<?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>113094</bug_id>
          
          <creation_ts>2013-03-22 13:41:32 -0700</creation_ts>
          <short_desc>[Mac] can-read-in-dragstart-event.html and can-read-in-copy-and-cut-events.html fail</short_desc>
          <delta_ts>2013-08-26 16:44:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dcheng</cc>
    
    <cc>enrica</cc>
    
    <cc>graouts</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>861811</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-22 13:41:32 -0700</bug_when>
    <thetext>Two tests added by http://trac.webkit.org/changeset/146644 fails on Mac port:
http://build.webkit.org/results/Apple%20MountainLion%20Release%20WK1%20(Tests)/r146644%20(8256)/results.html

--- /Volumes/Data/slave/mountainlion-release-tests-wk1/build/layout-test-results/editing/pasteboard/can-read-in-copy-and-cut-events-expected.txt
+++ /Volumes/Data/slave/mountainlion-release-tests-wk1/build/layout-test-results/editing/pasteboard/can-read-in-copy-and-cut-events-actual.txt
@@ -1,5 +1,5 @@
+CONSOLE MESSAGE: line 13: TypeError: &apos;null&apos; is not an object (evaluating &apos;event.clipboardData.types.indexOf&apos;)
+CONSOLE MESSAGE: line 22: TypeError: &apos;null&apos; is not an object (evaluating &apos;event.clipboardData.types.indexOf&apos;)
 Simple test that data set during a copy/cut event can be read back. To run the test manually, simply select any text and initiate a copy/cut operation.
 
-copy: SUCCESS
-cut: SUCCESS
 

--- /Volumes/Data/slave/mountainlion-release-tests-wk1/build/layout-test-results/editing/pasteboard/can-read-in-dragstart-event-expected.txt
+++ /Volumes/Data/slave/mountainlion-release-tests-wk1/build/layout-test-results/editing/pasteboard/can-read-in-dragstart-event-actual.txt
@@ -1,5 +1,5 @@
+CONSOLE MESSAGE: line 13: TypeError: &apos;null&apos; is not an object (evaluating &apos;event.dataTransfer.types.indexOf&apos;)
 Simple test that data set during a dragstart event can be read back. To run the test manually, simply start dragging the &apos;Drag Me&apos; element below.
 
 Drag Me
-dragstart: SUCCESS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861814</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-22 13:44:11 -0700</bug_when>
    <thetext>Committed r146652: &lt;http://trac.webkit.org/changeset/146652&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861839</commentid>
    <comment_count>2</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-03-22 14:18:54 -0700</bug_when>
    <thetext>This is a problem specific to the Mac port.

In the new tests, we verify that the data object is both readable and writable in the dragstart/copy/cut events, which the spec and Firefox both allow.

However, the Mac implementation of the Clipboard getters contains the following check:
    if (m_changeCount != platformStrategies()-&gt;pasteboardStrategy()-&gt;changeCount(m_pasteboardName))
        return ListHashSet&lt;String&gt;();

Unfortunately, by definition, the change count will be always be different, since we&apos;re mutating the clipboard in the first part of the test.

One possibility is to relax this check by skipping the change count check if the clipboard is in a writable state as well, but that seems like a hack. Another possibility would be to update the change count every time an item is written to the clipboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912784</commentid>
    <comment_count>3</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-30 05:09:26 -0700</bug_when>
    <thetext>The test editing/pasteboard/can-read-in-copy-and-cut-events.html now passes on wk2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912785</commentid>
    <comment_count>4</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-30 05:12:17 -0700</bug_when>
    <thetext>Retitled the bug to reflect the single test failure. Test expectations updated in http://trac.webkit.org/changeset/153465.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913040</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-07-30 15:02:08 -0700</bug_when>
    <thetext>This test still fails on wk1 though, so updated results again in &lt;http://trac.webkit.org/r153496&gt;. Re-titling the bug, too.

I&apos;m not actually sure if wk2 success is true, or a consequence of some other bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921133</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 13:04:11 -0700</bug_when>
    <thetext>&gt; Another possibility would be to update the change count every time an item is written to the clipboard.

That seems like the way to go to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921134</commentid>
    <comment_count>7</comment_count>
      <attachid>209672</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 13:04:43 -0700</bug_when>
    <thetext>Created attachment 209672
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921146</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 13:44:37 -0700</bug_when>
    <thetext>Unsure why WK2 EWS is still unhappy (can-read-in-copy-and-cut-events.html often fails on EWS, but not on regular WK2 bots).

I have another patch for pasteboard in WTR, hopefully together they will make EWS happier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921150</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 14:03:56 -0700</bug_when>
    <thetext>Actually, a crash on EWS is real, will post a patch with a null check in a moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921152</commentid>
    <comment_count>10</comment_count>
      <attachid>209676</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 14:07:38 -0700</bug_when>
    <thetext>Created attachment 209676
proposed fix

editing/pasteboard/dataTransfer-setData-getData.html was crashing because URL it was trying to set was invalid. This used to fail silently with a nil receiver in -writeToPasteboard:.

Not sure what the best behavior in this case is; updated patch proceeds with setting an empty URL in all flavors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921155</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 14:10:42 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r154639&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921227</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-26 16:44:36 -0700</bug_when>
    <thetext>Updated test results in &lt;http://trac.webkit.org/r154653&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209672</attachid>
            <date>2013-08-26 13:04:43 -0700</date>
            <delta_ts>2013-08-26 14:07:38 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>UpdateChangeCount.txt</filename>
            <type>text/plain</type>
            <size>51027</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDYyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEzLTA4LTI2ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIGNhbi1yZWFkLWlu
LWRyYWdzdGFydC1ldmVudC5odG1sIGFuZCBjYW4tcmVhZC1pbi1jb3B5LWFuZC1jdXQtZXZlbnRz
Lmh0bWwgZmFpbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEzMDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWFjIHBsYXRmb3JtIGltcGxlbWVudGF0aW9uIGhhcyBjaGVja3MgZm9yIHBhc3RlYm9hcmQg
Y2hhbmdlIGNvdW50LCBidXQgaXQKKyAgICAgICAgZGlkbid0IHVzZSB0byB1cGRhdGUgdGhlIGNv
dW50IHdoZW4gd3JpdGluZyB0byBwYXN0ZWJvYWQgZnJvbSBKYXZhU2NyaXB0LgorCisgICAgICAg
ICogcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5Lmg6IENoYW5nZWQgY2hhbmdlQ291bnQgZnVu
Y3Rpb24gdG8gcmV0dXJuIGEgbG9uZworICAgICAgICBpbnN0ZWFkIG9mIGFuIGludCwgYXMgdGhl
IHVuZGVybHlpbmcgTWFjIHR5cGUgaXMgTlNJbnRlZ2VyLiBDaGFuZ2VkIGFsbCBtZXRob2RzCisg
ICAgICAgIHRoYXQgbW9kaWZ5IHRoZSBwYXN0ZWJvYXJkIHRvIHJldHVybiBhIG5ldyBjaGFuZ2Ug
Y291bnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaDogQ2hhbmdl
ZCBhbGwgbWV0aG9kcyB0aGF0IG1vZGlmeSB0aGUgcGFzdGVib2FyZAorICAgICAgICB0byByZXR1
cm4gYSBuZXcgY2hhbmdlIGNvdW50LgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9h
cmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjbGVhcik6IFVwZGF0ZSBt
X2NoYW5nZUNvdW50LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rp
b25Gb3JUeXBlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQ
bGFpblRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVVJMRm9yVHlwZXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlVVJMKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjp3cml0ZUZpbGVXcmFwcGVyQXNSVEZEQXR0YWNobWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJvYXJkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjphZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKTogRGl0dG8uCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpjaGFuZ2VDb3VudCk6IENoYW5nZWQgcmV0dXJu
ZWQgdHlwZSB0byBsb25nIHRvIGF2b2lkCisgICAgICAgIGRhdGEgbG9zcy4KKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6Y29weSk6IFJldHVybiBuZXcgY2hhbmdlIGNvdW50
LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjphZGRUeXBlcyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRUeXBlcyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRCdWZmZXJGb3JUeXBl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnNldFBhdGhu
YW1lc0ZvclR5cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2Fy
ZDo6c2V0U3RyaW5nRm9yVHlwZSk6IERpdHRvLiBSZXBsYWNlZCAtW05TVVJMIHdyaXRlVG9QYXN0
ZWJvYXJkOl0KKyAgICAgICAgd2l0aCBhbiBlcXVpdmFsZW50IGltcGxlbW5lbnRhdGlvbiB0aGF0
IHRlbGxzIHVzZSB3aGV0aGVyIHdyaXRpbmcgd2FzIHN1Y2Nlc3NmdWwuCisKIDIwMTMtMDgtMjQg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
UHJvbWlzZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVn
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJh
dGVneS5oCShyZXZpc2lvbiAxNTQ2MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0
ZWJvYXJkU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTcgKzQzLDE3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5n
PiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nRm9yVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KSA9IDA7Ci0gICAgdmlydHVhbCBpbnQgY2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgbG9uZyBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgdW5pcXVlTmFtZSgpID0g
MDsKICAgICB2aXJ0dWFsIENvbG9yIGNvbG9yKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
ID0gMDsKICAgICB2aXJ0dWFsIEtVUkwgdXJsKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
ID0gMDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0
ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBhZGRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFR5cGVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnVmZmVyRm9yVHlwZShQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGF0aG5hbWVz
Rm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0U3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CisgICAgdmlydHVhbCBsb25n
IGFkZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIGxvbmcgc2V0VHlwZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgbG9uZyBjb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBh
c3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkKSA9IDA7CisgICAgdmlydHVhbCBs
b25nIHNldEJ1ZmZlckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7Cisg
ICAgdmlydHVhbCBsb25nIHNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0cmluZz4m
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKSA9IDA7CisgICAgdmlydHVhbCBsb25nIHNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkgPSAwOwogI2VuZGlmCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+UGFzdGVib2FyZFN0
cmF0ZWd5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2Fy
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVi
b2FyZC5oCShyZXZpc2lvbiAxNTQ2MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVBhc3RlYm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTYgKzQ5LDE5IEBAIHB1Ymxp
YzoKICAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyRm9yVHlwZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmRUeXBlKTsKICAgICB2b2lkIGdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9y
PFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7CiAgICAg
U3RyaW5nIHN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7Ci0gICAg
aW50IGNoYW5nZUNvdW50KCkgY29uc3Q7CisgICAgbG9uZyBjaGFuZ2VDb3VudCgpIGNvbnN0Owog
ICAgIENvbG9yIGNvbG9yKCk7CiAgICAgS1VSTCB1cmwoKTsKLSAgICAKLSAgICB2b2lkIGNvcHko
Y29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCk7Ci0gICAgdm9pZCBhZGRUeXBlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKTsKLSAgICB2b2lkIHNldFR5cGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwotICAgIHZvaWQgc2V0QnVmZmVyRm9y
VHlwZShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUpOwotICAgIHZvaWQgc2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKLSAgICB2b2lkIHNldFN0
cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7
CisKKyAgICAvLyBUYWtlIG93bmVyc2hpcCBvZiB0aGUgcGFzdGVib2FyZCwgYW5kIHJldHVybiBu
ZXcgY2hhbmdlIGNvdW50LgorICAgIGxvbmcgYWRkVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhc3RlYm9hcmRUeXBlcyk7CisgICAgbG9uZyBzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFzdGVib2FyZFR5cGVzKTsKKworICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCByZXR1cm4g
MCBpZiBwYXN0ZWJvYXJkIG93bmVyc2hpcCBoYXMgYmVlbiB0YWtlbiBmcm9tIHVzLgorICAgIGxv
bmcgY29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkKTsKKyAgICBsb25nIHNldEJ1ZmZl
ckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlKTsKKyAgICBsb25nIHNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7CisgICAgbG9uZyBz
ZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUpOwogCiBwcml2YXRlOgogI2lmIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCShyZXZpc2lvbiAxNTQ2MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTU1LDcgKzE1NSw3IEBAIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6
Y3JlYXQKIAogdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpCiB7Ci0gICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyhWZWN0b3I8U3RyaW5nPigpLCBt
X3Bhc3RlYm9hcmROYW1lKTsKKyAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyhWZWN0b3I8U3RyaW5nPigpLCBtX3Bh
c3RlYm9hcmROYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmQ6
OmdldERhdGFTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlKQpAQCAtMjA1LDMzICsyMDUsMzMgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlv
bkZvclR5cGVzKAogICAgIGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBj
bGllbnRUeXBlcywgY2xpZW50RGF0YSk7CiAgICAgdHlwZXMuYXBwZW5kVmVjdG9yKGNsaWVudFR5
cGVzKTsKIAotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
c2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOworICAgIG1fY2hhbmdlQ291bnQgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVz
LCBtX3Bhc3RlYm9hcmROYW1lKTsKICAgICBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmRpZFNl
dFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2FyZCgpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjbGllbnRUeXBlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBlKGNsaWVudERhdGFbaV0s
IGNsaWVudFR5cGVzW2ldLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICAgICAgbV9jaGFuZ2VDb3Vu
dCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVy
Rm9yVHlwZShjbGllbnREYXRhW2ldLCBjbGllbnRUeXBlc1tpXSwgbV9wYXN0ZWJvYXJkTmFtZSk7
CiAKICAgICAvLyBQdXQgSFRNTCBvbiB0aGUgcGFzdGVib2FyZC4KICAgICBpZiAodHlwZXMuY29u
dGFpbnMoV2ViQXJjaGl2ZVBib2FyZFR5cGUpKQotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5cGUoZ2V0RGF0YVNlbGVjdGlv
bihmcmFtZSwgV2ViQXJjaGl2ZVBib2FyZFR5cGUpLCBXZWJBcmNoaXZlUGJvYXJkVHlwZSwgbV9w
YXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5cGUoZ2V0RGF0YVNlbGVj
dGlvbihmcmFtZSwgV2ViQXJjaGl2ZVBib2FyZFR5cGUpLCBXZWJBcmNoaXZlUGJvYXJkVHlwZSwg
bV9wYXN0ZWJvYXJkTmFtZSk7CiAgICAgCiAgICAgLy8gUHV0IHRoZSBhdHRyaWJ1dGVkIHN0cmlu
ZyBvbiB0aGUgcGFzdGVib2FyZCAoUlRGL1JURkQgZm9ybWF0KS4KICAgICBpZiAodHlwZXMuY29u
dGFpbnMoU3RyaW5nKE5TUlRGRFBib2FyZFR5cGUpKSkKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBlKGdldERhdGFTZWxl
Y3Rpb24oZnJhbWUsIE5TUlRGRFBib2FyZFR5cGUpLCBOU1JURkRQYm9hcmRUeXBlLCBtX3Bhc3Rl
Ym9hcmROYW1lKTsKKyAgICAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlwZShnZXREYXRhU2VsZWN0aW9u
KGZyYW1lLCBOU1JURkRQYm9hcmRUeXBlKSwgTlNSVEZEUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CiAKICAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUlRGUGJvYXJkVHlwZSkp
KQotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNl
dEJ1ZmZlckZvclR5cGUoZ2V0RGF0YVNlbGVjdGlvbihmcmFtZSwgTlNSVEZQYm9hcmRUeXBlKSwg
TlNSVEZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICAgICAgbV9jaGFuZ2VDb3Vu
dCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVy
Rm9yVHlwZShnZXREYXRhU2VsZWN0aW9uKGZyYW1lLCBOU1JURlBib2FyZFR5cGUpLCBOU1JURlBi
b2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogICAgIAogICAgIC8vIFB1dCBwbGFpbiBzdHJp
bmcgb24gdGhlIHBhc3RlYm9hcmQuCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU1N0
cmluZ1Bib2FyZFR5cGUpKSkgewogICAgICAgICBTdHJpbmcgdGV4dCA9IHNob3VsZFNlcmlhbGl6
ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJv
YXJkCiAgICAgICAgICAgICA/IGZyYW1lLT5lZGl0b3IoKS5zdHJpbmdTZWxlY3Rpb25Gb3JQYXN0
ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpCiAgICAgICAgICAgICA6IGZyYW1lLT5lZGl0b3IoKS5z
dHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7Ci0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSh0ZXh0LCBOU1N0cmlu
Z1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOworICAgICAgICBtX2NoYW5nZUNvdW50ID0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JU
eXBlKHRleHQsIE5TU3RyaW5nUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiAgICAgfQog
ICAgIAogICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJTbWFydFBhc3RlUGJvYXJkVHlwZSkpCi0g
ICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVm
ZmVyRm9yVHlwZSgwLCBXZWJTbWFydFBhc3RlUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7
CisgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5cGUoMCwgV2ViU21hcnRQYXN0ZVBib2FyZFR5cGUs
IG1fcGFzdGVib2FyZE5hbWUpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbGFjZU9wdGlv
bikKQEAgLTI0Miw5ICsyNDIsOSBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNv
bnN0IFN0CiAgICAgICAgIHR5cGVzLmFwcGVuZChXZWJTbWFydFBhc3RlUGJvYXJkVHlwZSk7CiAK
ICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVz
KHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUodGV4dCwgTlNTdHJpbmdQYm9hcmRU
eXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKHRleHQsIE5T
U3RyaW5nUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiAgICAgaWYgKHNtYXJ0UmVwbGFj
ZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2UpCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlwZSgwLCBXZWJTbWFydFBhc3Rl
UGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIG1fY2hhbmdlQ291bnQgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5
cGUoMCwgV2ViU21hcnRQYXN0ZVBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogfQogICAg
IAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSosIGJvb2wgY2FuU21hcnRD
b3B5T3JEZWxldGUsIEZyYW1lKiBmcmFtZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9y
Q2xpcGJvYXJkIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCkKQEAgLTI1
Miw5ICsyNTIsOSBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiwgCiAg
ICAgd3JpdGVTZWxlY3Rpb25Gb3JUeXBlcyhWZWN0b3I8U3RyaW5nPigpLCBjYW5TbWFydENvcHlP
ckRlbGV0ZSwgZnJhbWUsIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCk7
CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlVVJMRm9yVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgdGl0bGVTdHIsIEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBsb25nIHdyaXRlVVJM
Rm9yVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGVTdHIsIEZyYW1l
KiBmcmFtZSkKIHsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPnNldFR5cGVzKHR5cGVzLCBwYXN0ZWJvYXJkTmFtZSk7CisgICAgbG9uZyBuZXdDaGFuZ2VD
b3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlw
ZXModHlwZXMsIHBhc3RlYm9hcmROYW1lKTsKICAgICAKICAgICBBU1NFUlQoIXVybC5pc0VtcHR5
KCkpOwogICAgIApAQCAtMjcxLDIxICsyNzEsMjMgQEAgc3RhdGljIHZvaWQgd3JpdGVVUkxGb3JU
eXBlcyhjb25zdCBWZWN0bwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKICAgICAgICAg
cGF0aHMuYXBwZW5kKFtjb2NvYVVSTCBhYnNvbHV0ZVN0cmluZ10pOwogICAgICAgICBwYXRocy5h
cHBlbmQodGl0bGVTdHIuc3RyaXBXaGl0ZVNwYWNlKCkpOwotICAgICAgICBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFBhdGhuYW1lc0ZvclR5cGUocGF0aHMs
IFdlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSwgcGFzdGVib2FyZE5hbWUpOworICAgICAgICBu
ZXdDaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+c2V0UGF0aG5hbWVzRm9yVHlwZShwYXRocywgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBl
LCBwYXN0ZWJvYXJkTmFtZSk7CiAgICAgfQogICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmco
TlNVUkxQYm9hcmRUeXBlKSkpCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShbY29jb2FVUkwgYWJzb2x1dGVTdHJpbmdd
LCBOU1VSTFBib2FyZFR5cGUsIHBhc3RlYm9hcmROYW1lKTsKKyAgICAgICAgbmV3Q2hhbmdlQ291
bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmlu
Z0ZvclR5cGUoW2NvY29hVVJMIGFic29sdXRlU3RyaW5nXSwgTlNVUkxQYm9hcmRUeXBlLCBwYXN0
ZWJvYXJkTmFtZSk7CiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYlVSTFBib2FyZFR5cGUpKQot
ICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0
cmluZ0ZvclR5cGUodXNlclZpc2libGVTdHJpbmcsIFdlYlVSTFBib2FyZFR5cGUsIHBhc3RlYm9h
cmROYW1lKTsKKyAgICAgICAgbmV3Q2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUodXNlclZpc2libGVTdHJpbmcs
IFdlYlVSTFBib2FyZFR5cGUsIHBhc3RlYm9hcmROYW1lKTsKICAgICBpZiAodHlwZXMuY29udGFp
bnMoV2ViVVJMTmFtZVBib2FyZFR5cGUpKQotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUodGl0bGUsIFdlYlVSTE5hbWVQ
Ym9hcmRUeXBlLCBwYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIG5ld0NoYW5nZUNvdW50ID0gcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBl
KHRpdGxlLCBXZWJVUkxOYW1lUGJvYXJkVHlwZSwgcGFzdGVib2FyZE5hbWUpOwogICAgIGlmICh0
eXBlcy5jb250YWlucyhTdHJpbmcoTlNTdHJpbmdQYm9hcmRUeXBlKSkpCi0gICAgICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSh1
c2VyVmlzaWJsZVN0cmluZywgTlNTdHJpbmdQYm9hcmRUeXBlLCBwYXN0ZWJvYXJkTmFtZSk7Cisg
ICAgICAgIG5ld0NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKHVzZXJWaXNpYmxlU3RyaW5nLCBOU1N0cmluZ1Bi
b2FyZFR5cGUsIHBhc3RlYm9hcmROYW1lKTsKKworICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsK
IH0KICAgICAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHRpdGxlU3RyLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgd3JpdGVVUkxGb3JUeXBl
cyh3cml0YWJsZVR5cGVzRm9yVVJMKCksIG1fcGFzdGVib2FyZE5hbWUsIHVybCwgdGl0bGVTdHIs
IGZyYW1lKTsKKyAgICBtX2NoYW5nZUNvdW50ID0gd3JpdGVVUkxGb3JUeXBlcyh3cml0YWJsZVR5
cGVzRm9yVVJMKCksIG1fcGFzdGVib2FyZE5hbWUsIHVybCwgdGl0bGVTdHIsIGZyYW1lKTsKIH0K
IAogc3RhdGljIE5TRmlsZVdyYXBwZXIqIGZpbGVXcmFwcGVyRm9ySW1hZ2UoQ2FjaGVkUmVzb3Vy
Y2UqIHJlc291cmNlLCBOU1VSTCAqdXJsKQpAQCAtMzAxLDcgKzMwMyw3IEBAIHN0YXRpYyBOU0Zp
bGVXcmFwcGVyKiBmaWxlV3JhcHBlckZvckltYWcKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAot
c3RhdGljIHZvaWQgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaG1lbnQoTlNGaWxlV3JhcHBl
ciogd3JhcHBlciwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3N0YXRpYyB2b2lkIHdy
aXRlRmlsZVdyYXBwZXJBc1JURkRBdHRhY2htZW50KE5TRmlsZVdyYXBwZXIqIHdyYXBwZXIsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGxvbmcmIG5ld0NoYW5nZUNvdW50KQogewogICAg
IE5TVGV4dEF0dGFjaG1lbnQgKmF0dGFjaG1lbnQgPSBbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2Nd
IGluaXRXaXRoRmlsZVdyYXBwZXI6d3JhcHBlcl07CiAgICAgCkBAIC0zMTAsNyArMzEyLDcgQEAg
c3RhdGljIHZvaWQgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaAogICAgIAogICAgIE5TRGF0
YSAqUlRGRERhdGEgPSBbc3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmlu
ZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKICAgICBpZiAoUlRGRERhdGEpCi0g
ICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVm
ZmVyRm9yVHlwZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoUlRGRERhdGEpLmdldCgpLCBOU1JU
RkRQYm9hcmRUeXBlLCBwYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIG5ld0NoYW5nZUNvdW50ID0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JU
eXBlKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShSVEZERGF0YSkuZ2V0KCksIE5TUlRGRFBib2Fy
ZFR5cGUsIHBhc3RlYm9hcmROYW1lKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdl
KE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKQEAgLTMy
OCw3ICszMzAsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAg
ICAgaWYgKCFjYWNoZWRJbWFnZSB8fCBjYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICB3cml0ZVVSTEZvclR5cGVzKHdyaXRhYmxlVHlwZXNGb3JJbWFn
ZSgpLCBtX3Bhc3RlYm9hcmROYW1lLCBjb2NvYVVSTCwgbnNTdHJpbmdOaWxJZkVtcHR5KHRpdGxl
KSwgbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgbV9jaGFuZ2VDb3VudCA9IHdyaXRl
VVJMRm9yVHlwZXMod3JpdGFibGVUeXBlc0ZvckltYWdlKCksIG1fcGFzdGVib2FyZE5hbWUsIGNv
Y29hVVJMLCBuc1N0cmluZ05pbElmRW1wdHkodGl0bGUpLCBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpKTsKICAgICAKICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5k
ZXJlcihyZW5kZXJlcik7CiAgICAgaWYgKCFpbWFnZSkKQEAgLTMzNiwxNyArMzM4LDE3IEBAIHZv
aWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBOU0RhdGEgKmltYWdl
RGF0YSA9IChOU0RhdGEgKilbaW1hZ2UtPmdldE5TSW1hZ2UoKSBUSUZGUmVwcmVzZW50YXRpb25d
OwogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47Ci0gICAgcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBlKFNoYXJlZEJ1
ZmZlcjo6d3JhcE5TRGF0YShpbWFnZURhdGEpLCBOU1RJRkZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9h
cmROYW1lKTsKKyAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBlKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0
YShpbWFnZURhdGEpLCBOU1RJRkZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKIAogICAg
IFN0cmluZyBNSU1FVHlwZSA9IGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCk7CiAg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVU
eXBlKE1JTUVUeXBlKSk7CiAKLSAgICB3cml0ZUZpbGVXcmFwcGVyQXNSVEZEQXR0YWNobWVudChm
aWxlV3JhcHBlckZvckltYWdlKGNhY2hlZEltYWdlLCBjb2NvYVVSTCksIG1fcGFzdGVib2FyZE5h
bWUpOworICAgIHdyaXRlRmlsZVdyYXBwZXJBc1JURkRBdHRhY2htZW50KGZpbGVXcmFwcGVyRm9y
SW1hZ2UoY2FjaGVkSW1hZ2UsIGNvY29hVVJMKSwgbV9wYXN0ZWJvYXJkTmFtZSwgbV9jaGFuZ2VD
b3VudCk7CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJvYXJkKGNvbnN0IFBhc3Rl
Ym9hcmQmIHBhc3RlYm9hcmQpCiB7Ci0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT5jb3B5KHBhc3RlYm9hcmQubV9wYXN0ZWJvYXJkTmFtZSwgbV9wYXN0ZWJv
YXJkTmFtZSk7CisgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+Y29weShwYXN0ZWJvYXJkLm1fcGFzdGVib2FyZE5hbWUsIG1fcGFz
dGVib2FyZE5hbWUpOwogfQogCiBib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCkBA
IC02NTIsNyArNjU0LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5
cAogICAgIFN0cmluZyBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUo
dHlwZSk7CiAgICAgaWYgKGNvY29hVHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0Zv
clR5cGUoZW1wdHlTdHJpbmcoKSwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBt
X2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT5zZXRTdHJpbmdGb3JUeXBlKGVtcHR5U3RyaW5nKCksIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBhYnNvbHV0ZVVSTHNGcm9tUGFzdGVi
b2FyZEZpbGVuYW1lcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBib29sIG9ubHlGaXJz
dFVSTCA9IGZhbHNlKQpAQCAtNzYxLDcgKzc2Myw3IEBAIHN0YXRpYyB2b2lkIGFkZEhUTUxDbGlw
Ym9hcmRUeXBlc0ZvckNvY28KICAgICAgICAgcmVzdWx0VHlwZXMuYWRkKHV0aVR5cGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIC8vIE5vIG1hcHBpbmcsIGp1c3QgcGFzcyB0aGUgd2hv
bGUgc3RyaW5nIHRob3VnaAorICAgIC8vIE5vIG1hcHBpbmcsIGp1c3QgcGFzcyB0aGUgd2hvbGUg
c3RyaW5nIHRocm91Z2guCiAgICAgcmVzdWx0VHlwZXMuYWRkKGNvY29hVHlwZSk7CiB9CiAKQEAg
LTc3OCw3ICs3ODAsNyBAQCBib29sIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmlu
CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwogICAgICAgICB0eXBlcy5hcHBlbmQoY29j
b2FUeXBlKTsKICAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5zZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0gICAgICAgIHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShjb2Nv
YURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIG1fY2hhbmdlQ291
bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmlu
Z0ZvclR5cGUoY29jb2FEYXRhLCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc4OCw3ICs3OTAsNyBAQCBib29sIFBhc3RlYm9h
cmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
OwogICAgICAgICB0eXBlcy5hcHBlbmQoY29jb2FUeXBlKTsKICAgICAgICAgcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5hZGRUeXBlcyh0eXBlcywgbV9wYXN0ZWJv
YXJkTmFtZSk7Ci0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+c2V0U3RyaW5nRm9yVHlwZShjb2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CisgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoY29jb2FEYXRhLCBjb2NvYVR5cGUs
IG1fcGFzdGVib2FyZE5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2Fy
ZE1hYy5tbQkocmV2aXNpb24gMTU0NjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBA
QCBTdHJpbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzdHJpbmdGb3JUeXBlCiAgICAgcmV0dXJuIFtt
X3Bhc3RlYm9hcmQuZ2V0KCkgc3RyaW5nRm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07CiB9CiAKLWlu
dCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50KCkgY29uc3QKK2xvbmcgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjpjaGFuZ2VDb3VudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX3Bhc3RlYm9h
cmQuZ2V0KCkgY2hhbmdlQ291bnRdOwogfQpAQCAtOTksNyArOTksNyBAQCBLVVJMIFBsYXRmb3Jt
UGFzdGVib2FyZDo6dXJsKCkKICAgICByZXR1cm4gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOm1f
cGFzdGVib2FyZC5nZXQoKV07CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpjb3B5KGNv
bnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQpCitsb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6Y29w
eShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkKQogewogICAgIE5TUGFzdGVib2FyZCogcGFz
dGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOmZyb21QYXN0ZWJvYXJk
XTsKICAgICBOU0FycmF5KiB0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKQEAgLTEwNyw1MiAr
MTA3LDg5IEBAIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpjb3B5KGNvbnN0IFN0cmkKICAgICBb
bV9wYXN0ZWJvYXJkLmdldCgpIGFkZFR5cGVzOnR5cGVzIG93bmVyOm5pbF07CiAgICAgZm9yIChO
U1VJbnRlZ2VyIGkgPSAwOyBpIDwgW3R5cGVzIGNvdW50XTsgaSsrKSB7CiAgICAgICAgIE5TU3Ry
aW5nKiB0eXBlID0gW3R5cGVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIFttX3Bhc3RlYm9h
cmQuZ2V0KCkgc2V0RGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTp0eXBlXSBmb3JUeXBlOnR5
cGVdOworICAgICAgICBpZiAoIVttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0RGF0YTpbcGFzdGVib2Fy
ZCBkYXRhRm9yVHlwZTp0eXBlXSBmb3JUeXBlOnR5cGVdKQorICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfSAgICAKKyAgICByZXR1cm4gY2hhbmdlQ291bnQoKTsKIH0KIAotdm9pZCBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OmFkZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlw
ZXMpCitsb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6YWRkVHlwZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhc3RlYm9hcmRUeXBlcykKIHsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHR5
cGVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwYXN0ZWJvYXJkVHlwZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIFt0
eXBlcy5nZXQoKSBhZGRPYmplY3Q6cGFzdGVib2FyZFR5cGVzW2ldXTsKIAotICAgIFttX3Bhc3Rl
Ym9hcmQuZ2V0KCkgYWRkVHlwZXM6dHlwZXMuZ2V0KCkgb3duZXI6bmlsXTsKKyAgICByZXR1cm4g
W21fcGFzdGVib2FyZC5nZXQoKSBhZGRUeXBlczp0eXBlcy5nZXQoKSBvd25lcjpuaWxdOwogfQog
Ci12b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6c2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhc3RlYm9hcmRUeXBlcykKK2xvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRUeXBlcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKQogewotICAgIGlmIChwYXN0ZWJvYXJk
VHlwZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgZGVjbGFyZVR5
cGVzOm5pbCBvd25lcjpuaWxdOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChwYXN0
ZWJvYXJkVHlwZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gW21fcGFzdGVib2FyZC5nZXQo
KSBkZWNsYXJlVHlwZXM6bmlsIG93bmVyOm5pbF07CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk+IHR5cGVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXN0ZWJvYXJkVHlwZXMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgIFt0eXBlcy5nZXQoKSBhZGRPYmplY3Q6cGFzdGVib2FyZFR5cGVzW2ldXTsKIAotICAg
IFttX3Bhc3RlYm9hcmQuZ2V0KCkgZGVjbGFyZVR5cGVzOnR5cGVzLmdldCgpIG93bmVyOm5pbF07
CisgICAgcmV0dXJuIFttX3Bhc3RlYm9hcmQuZ2V0KCkgZGVjbGFyZVR5cGVzOnR5cGVzLmdldCgp
IG93bmVyOm5pbF07CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRCdWZmZXJGb3JU
eXBlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUpCitsb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6c2V0QnVmZmVyRm9yVHlwZShQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
KQogewotICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0RGF0YTpidWZmZXIgPyBbYnVmZmVyLT5j
cmVhdGVOU0RhdGEoKSBhdXRvcmVsZWFzZV0gOiBuaWwgZm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07
CisgICAgQk9PTCBkaWRXcml0ZURhdGEgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldERhdGE6YnVm
ZmVyID8gW2J1ZmZlci0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdIDogbmlsIGZvclR5cGU6
cGFzdGVib2FyZFR5cGVdOworICAgIGlmICghZGlkV3JpdGVEYXRhKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gY2hhbmdlQ291bnQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBhc3RlYm9h
cmQ6OnNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKK2xvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpz
ZXRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCiB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBwYXRocyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOyAgICAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhdGhuYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
W3BhdGhzLmdldCgpIGFkZE9iamVjdDogW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnBhdGhuYW1l
c1tpXV1dOwotICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0UHJvcGVydHlMaXN0OnBhdGhzLmdl
dCgpIGZvclR5cGU6cGFzdGVib2FyZFR5cGVdOwotfQorICAgICAgICBbcGF0aHMuZ2V0KCkgYWRk
T2JqZWN0OltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpwYXRobmFtZXNbaV1dXTsKKyAgICBCT09M
IGRpZFdyaXRlRGF0YSA9IFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0UHJvcGVydHlMaXN0OnBhdGhz
LmdldCgpIGZvclR5cGU6cGFzdGVib2FyZFR5cGVdOworICAgIGlmICghZGlkV3JpdGVEYXRhKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2hhbmdlQ291bnQoKTsKK30KKworbG9uZyBQ
bGF0Zm9ybVBhc3RlYm9hcmQ6OnNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCit7CisgICAgQk9PTCBkaWRXcml0ZURhdGE7
CisKKyAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3RyaW5nKE5TVVJMUGJvYXJkVHlwZSkpIHsK
KyAgICAgICAgLy8gV2UgY2Fubm90IGp1c3QgdXNlIC1OU1Bhc3RlYm9hcmQgd3JpdGVPYmplY3Rz
Ol0sIGJlY2F1c2UgLWRlY2xhcmVUeXBlcyBoYXMgYmVlbiBhbHJlYWR5IGNhbGxlZCwgaW1wbGlj
aXRseSBjcmVhdGluZyBhbiBpdGVtLgorICAgICAgICBOU1VSTCAqdXJsID0gW05TVVJMIFVSTFdp
dGhTdHJpbmc6c3RyaW5nXTsKKyAgICAgICAgaWYgKFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVz
XSBjb250YWluc09iamVjdDpOU1VSTFBib2FyZFR5cGVdKSB7CisgICAgICAgICAgICBOU1VSTCAq
YmFzZSA9IFt1cmwgYmFzZVVSTF07CisgICAgICAgICAgICBpZiAoYmFzZSkKKyAgICAgICAgICAg
ICAgICBkaWRXcml0ZURhdGEgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldFByb3BlcnR5TGlzdDpA
W1t1cmwgcmVsYXRpdmVTdHJpbmddLCBbYmFzZSBhYnNvbHV0ZVN0cmluZ11dIGZvclR5cGU6TlNV
UkxQYm9hcmRUeXBlXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkaWRXcml0
ZURhdGEgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldFByb3BlcnR5TGlzdDpAW1t1cmwgYWJzb2x1
dGVTdHJpbmddLCBAIiJdIGZvclR5cGU6TlNVUkxQYm9hcmRUeXBlXTsKKworICAgICAgICAgICAg
aWYgKCFkaWRXcml0ZURhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoW1ttX3Bhc3RlYm9hcmQuZ2V0KCkgdHlwZXNdIGNvbnRhaW5zT2JqZWN0
OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKSB7CisgICAgICAgICAgICBkaWRXcml0ZURhdGEgPSBb
bV9wYXN0ZWJvYXJkLmdldCgpIHNldFN0cmluZzpbdXJsIGFic29sdXRlU3RyaW5nXSBmb3JUeXBl
OihOU1N0cmluZyAqKWtVVFR5cGVVUkxdOworICAgICAgICAgICAgaWYgKCFkaWRXcml0ZURhdGEp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoW1tt
X3Bhc3RlYm9hcmQuZ2V0KCkgdHlwZXNdIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5
cGVGaWxlVVJMXSAmJiBbdXJsIGlzRmlsZVVSTF0pIHsKKyAgICAgICAgICAgIGRpZFdyaXRlRGF0
YSA9IFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0U3RyaW5nOlt1cmwgYWJzb2x1dGVTdHJpbmddIGZv
clR5cGU6KE5TU3RyaW5nICopa1VUVHlwZUZpbGVVUkxdOworICAgICAgICAgICAgaWYgKCFkaWRX
cml0ZURhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgIH0g
ZWxzZSB7CisgICAgICAgIGRpZFdyaXRlRGF0YSA9IFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0U3Ry
aW5nOnN0cmluZyBmb3JUeXBlOnBhc3RlYm9hcmRUeXBlXTsKKyAgICAgICAgaWYgKCFkaWRXcml0
ZURhdGEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLXZvaWQgUGxhdGZvcm1QYXN0
ZWJvYXJkOjpzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmRUeXBlKQotewotICAgIGlmIChwYXN0ZWJvYXJkVHlwZSA9PSBTdHJpbmco
TlNVUkxQYm9hcmRUeXBlKSkKLSAgICAgICAgW1tOU1VSTCBVUkxXaXRoU3RyaW5nOnN0cmluZ10g
d3JpdGVUb1Bhc3RlYm9hcmQ6bV9wYXN0ZWJvYXJkLmdldCgpXTsKLSAgICBlbHNlCi0gICAgICAg
IFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0U3RyaW5nOnN0cmluZyBmb3JUeXBlOnBhc3RlYm9hcmRU
eXBlXTsKKyAgICByZXR1cm4gY2hhbmdlQ291bnQoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
cmV2aXNpb24gMTU0NjI5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTMtMDgtMjYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxh
cEBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10gY2FuLXJlYWQtaW4tZHJhZ3N0YXJ0LWV2ZW50
Lmh0bWwgYW5kIGNhbi1yZWFkLWluLWNvcHktYW5kLWN1dC1ldmVudHMuaHRtbCBmYWlsCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTMwOTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXR1cm4gbmV3IHBh
c3RlYm9hcmQgY2hhbmdlIGNvdW50IGZyb20gYWxsIGZ1bmN0aW9ucyB0aGF0IGNoYW5nZSBpdC4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvbnRleHQubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJDb250
ZXh0TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpwYXN0ZWJvYXJkQ29weSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OmFkZFBhc3RlYm9hcmRUeXBlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRUeXBlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29udGV4dDo6c2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpzZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZCk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvcHkpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjphZGRUeXBlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBs
YXRmb3JtU3RyYXRlZ2llczo6c2V0VHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OnNldEJ1ZmZlckZvclR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OnNldFBhdGhuYW1lc0ZvclR5cGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFN0cmluZ0ZvclR5cGUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6CisKIDIwMTMtMDgt
MjYgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgYnVpbGQgZml4LgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCShy
ZXZpc2lvbiAxNTQ2MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsMTYgKzMyMywxNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
Z2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1l
cyk7CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcmKTsKICAg
ICB2b2lkIGdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFNoYXJlZE1lbW9yeTo6SGFuZGxl
JiwgdWludDY0X3QmIHNpemUpOwotICAgIHZvaWQgcGFzdGVib2FyZENvcHkoY29uc3QgU3RyaW5n
JiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpOworICAgIHZvaWQg
cGFzdGVib2FyZENvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5n
JiB0b1Bhc3RlYm9hcmQsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7CiAgICAgdm9pZCBnZXRQ
YXN0ZWJvYXJkQ2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgdWludDY0
X3QmIGNoYW5nZUNvdW50KTsKICAgICB2b2lkIGdldFBhc3RlYm9hcmRVbmlxdWVOYW1lKFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZENvbG9yKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIFdlYkNvcmU6OkNvbG9yJik7CiAgICAgdm9pZCBnZXRQYXN0
ZWJvYXJkVVJMKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFdURjo6U3RyaW5nJik7Ci0g
ICAgdm9pZCBhZGRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcyk7Ci0gICAgdm9pZCBzZXRQYXN0
ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcyk7Ci0gICAgdm9pZCBzZXRQYXN0ZWJvYXJkUGF0aG5hbWVz
Rm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzKTsKLSAgICB2b2lkIHNl
dFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2V0
UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmLCB1
aW50NjRfdCBzaXplKTsKKyAgICB2b2lkIGFkZFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCB1
aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOworICAgIHZvaWQgc2V0UGFzdGVib2FyZFR5cGVzKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJv
YXJkVHlwZXMsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7CisgICAgdm9pZCBzZXRQYXN0ZWJv
YXJkUGF0aG5hbWVzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCB1
aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOworICAgIHZvaWQgc2V0UGFzdGVib2FyZFN0cmluZ0Zv
clR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkVHlwZSwgY29uc3QgU3RyaW5nJiwgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKKyAgICB2
b2lkIHNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFu
ZGxlJiwgdWludDY0X3Qgc2l6ZSwgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKICNlbmRpZgog
CiAjaWYgIVBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJD
b250ZXh0Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNTQ2MDkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTYgKzM0LDE2IEBAIG1lc3NhZ2VzIC0+IFdlYkNvbnRleHQgTGVnYWN5UmVjZWl2ZXIgewog
ICAgIEdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKFdURjo6U3RyaW5nIHBhc3RlYm9hcmRO
YW1lLCBXVEY6OlN0cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFZlY3RvcjxXVEY6OlN0cmluZz4g
cGF0aG5hbWVzKQogICAgIEdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKFdURjo6U3RyaW5nIHBh
c3RlYm9hcmROYW1lLCBXVEY6OlN0cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFdURjo6U3RyaW5n
IHN0cmluZykKICAgICBHZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShXVEY6OlN0cmluZyBwYXN0
ZWJvYXJkTmFtZSwgV1RGOjpTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkKLSAgICBQYXN0ZWJvYXJkQ29w
eShXVEY6OlN0cmluZyBmcm9tUGFzdGVib2FyZCwgV1RGOjpTdHJpbmcgdG9QYXN0ZWJvYXJkKQor
ICAgIFBhc3RlYm9hcmRDb3B5KFdURjo6U3RyaW5nIGZyb21QYXN0ZWJvYXJkLCBXVEY6OlN0cmlu
ZyB0b1Bhc3RlYm9hcmQpIC0+ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkKICAgICBHZXRQYXN0ZWJv
YXJkQ2hhbmdlQ291bnQoV1RGOjpTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+ICh1aW50NjRfdCBj
aGFuZ2VDb3VudCkKICAgICBHZXRQYXN0ZWJvYXJkVW5pcXVlTmFtZSgpIC0+IChXVEY6OlN0cmlu
ZyBwYXN0ZWJvYXJkTmFtZSkKICAgICBHZXRQYXN0ZWJvYXJkQ29sb3IoV1RGOjpTdHJpbmcgcGFz
dGVib2FyZE5hbWUpIC0+IChXZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBHZXRQYXN0ZWJvYXJk
VVJMKFdURjo6U3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAoV1RGOjpTdHJpbmcgdXJsU3RyaW5n
KQotICAgIEFkZFBhc3RlYm9hcmRUeXBlcyhXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgVmVj
dG9yPFdURjo6U3RyaW5nPiBwYXN0ZWJvYXJkVHlwZXMpCi0gICAgU2V0UGFzdGVib2FyZFR5cGVz
KFdURjo6U3RyaW5nIHBhc3RlYm9hcmROYW1lLCBWZWN0b3I8V1RGOjpTdHJpbmc+IHBhc3RlYm9h
cmRUeXBlcykKLSAgICBTZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShXVEY6OlN0cmluZyBw
YXN0ZWJvYXJkTmFtZSwgV1RGOjpTdHJpbmcgcGFzdGVib2FyZFR5cGUsIFZlY3RvcjxXVEY6OlN0
cmluZz4gcGF0aG5hbWVzKQotICAgIFNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKFdURjo6U3Ry
aW5nIHBhc3RlYm9hcmROYW1lLCBXVEY6OlN0cmluZyBwYXN0ZWJvYXJkVHlwZSwgV1RGOjpTdHJp
bmcgc3RyaW5nKQotICAgIFNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKFdURjo6U3RyaW5nIHBh
c3RlYm9hcmROYW1lLCBXVEY6OlN0cmluZyBwYXN0ZWJvYXJkVHlwZSwgV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVpbnQ2NF90IHNpemUpCisgICAgQWRkUGFzdGVib2FyZFR5
cGVzKFdURjo6U3RyaW5nIHBhc3RlYm9hcmROYW1lLCBWZWN0b3I8V1RGOjpTdHJpbmc+IHBhc3Rl
Ym9hcmRUeXBlcykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQorICAgIFNldFBhc3RlYm9hcmRU
eXBlcyhXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9yPFdURjo6U3RyaW5nPiBwYXN0
ZWJvYXJkVHlwZXMpIC0+ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkKKyAgICBTZXRQYXN0ZWJvYXJk
UGF0aG5hbWVzRm9yVHlwZShXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpTdHJpbmcg
cGFzdGVib2FyZFR5cGUsIFZlY3RvcjxXVEY6OlN0cmluZz4gcGF0aG5hbWVzKSAtPiAodWludDY0
X3QgY2hhbmdlQ291bnQpCisgICAgU2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoV1RGOjpTdHJp
bmcgcGFzdGVib2FyZE5hbWUsIFdURjo6U3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBXVEY6OlN0cmlu
ZyBzdHJpbmcpIC0+ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkKKyAgICBTZXRQYXN0ZWJvYXJkQnVm
ZmVyRm9yVHlwZShXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpTdHJpbmcgcGFzdGVi
b2FyZFR5cGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50NjRfdCBz
aXplKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCiAjZW5kaWYKIAogI2lmICFQTEFURk9STShN
QUMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFj
Lm1tCShyZXZpc2lvbiAxNTQ2MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dl
YkNvbnRleHRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwMyw5ICs0MDMsOSBAQCB2b2lkIFdl
YkNvbnRleHQ6OmdldFBhc3RlYm9hcmRCdWZmZXJGb3JUCiAgICAgc2hhcmVkTWVtb3J5QnVmZmVy
LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKIH0KIAotdm9p
ZCBXZWJDb250ZXh0OjpwYXN0ZWJvYXJkQ29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJk
LCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkKK3ZvaWQgV2ViQ29udGV4dDo6cGFzdGVib2Fy
ZENvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3Rl
Ym9hcmQsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCkKIHsKLSAgICBQbGF0Zm9ybVBhc3RlYm9h
cmQodG9QYXN0ZWJvYXJkKS5jb3B5KGZyb21QYXN0ZWJvYXJkKTsKKyAgICBuZXdDaGFuZ2VDb3Vu
dCA9IFBsYXRmb3JtUGFzdGVib2FyZCh0b1Bhc3RlYm9hcmQpLmNvcHkoZnJvbVBhc3RlYm9hcmQp
OwogfQogCiB2b2lkIFdlYkNvbnRleHQ6OmdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCB1aW50NjRfdCYgY2hhbmdlQ291bnQpCkBAIC00MjgsMzUg
KzQyOCwzNSBAQCB2b2lkIFdlYkNvbnRleHQ6OmdldFBhc3RlYm9hcmRVUkwoY29uc3QgCiAgICAg
dXJsU3RyaW5nID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS51cmwoKS5zdHJp
bmcoKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjphZGRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBl
cykKK3ZvaWQgV2ViQ29udGV4dDo6YWRkUGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIHVpbnQ2
NF90JiBuZXdDaGFuZ2VDb3VudCkKIHsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLmFkZFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CisgICAgbmV3Q2hhbmdlQ291bnQgPSBQ
bGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmFkZFR5cGVzKHBhc3RlYm9hcmRUeXBl
cyk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6c2V0UGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMp
Cit2b2lkIFdlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCB1aW50NjRf
dCYgbmV3Q2hhbmdlQ291bnQpCiB7Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKS5zZXRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOworICAgIG5ld0NoYW5nZUNvdW50ID0gUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMp
OwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMpCit2b2lkIFdlYkNvbnRleHQ6OnNldFBh
c3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFt
ZXMsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCkKIHsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQo
cGFzdGVib2FyZE5hbWUpLnNldFBhdGhuYW1lc0ZvclR5cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJk
VHlwZSk7CisgICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLnNldFBhdGhuYW1lc0ZvclR5cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJkVHlwZSk7CiB9
CiAKLXZvaWQgV2ViQ29udGV4dDo6c2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCit2b2lkIFdlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRTdHJpbmdGb3JU
eXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCiB7
Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRTdHJpbmdGb3JUeXBl
KHN0cmluZywgcGFzdGVib2FyZFR5cGUpOyAgICAKKyAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0U3RyaW5nRm9yVHlwZShzdHJpbmcsIHBh
c3RlYm9hcmRUeXBlKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpzZXRQYXN0ZWJvYXJkQnVmZmVy
Rm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRfdCBz
aXplKQordm9pZCBXZWJDb250ZXh0OjpzZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25z
dCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRfdCBzaXplLCB1aW50NjRfdCYg
bmV3Q2hhbmdlQ291bnQpCiB7CiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkgewotICAgICAgICBQ
bGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUoMCwgcGFz
dGVib2FyZFR5cGUpOworICAgICAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuc2V0QnVmZmVyRm9yVHlwZSgwLCBwYXN0ZWJvYXJkVHlwZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVt
b3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJl
YWRPbmx5KTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+KHNoYXJlZE1lbW9yeUJ1ZmZlci0+
ZGF0YSgpKSwgc2l6ZSk7Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5z
ZXRCdWZmZXJGb3JUeXBlKGJ1ZmZlciwgcGFzdGVib2FyZFR5cGUpOworICAgIG5ld0NoYW5nZUNv
dW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRCdWZmZXJGb3JUeXBl
KGJ1ZmZlciwgcGFzdGVib2FyZFR5cGUpOwogfQogCiB2b2lkIFdlYkNvbnRleHQ6OnNldFByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHJldmlzaW9uIDE1
NDYwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2lu
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQxLDcgKzE2NDEsOSBAQCB2b2lkIFBERlBsdWdpbjo6
d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOCiAgICAgZm9yIChOU1N0cmluZyAqdHlwZSBpbiB0eXBl
cykKICAgICAgICAgcGFzdGVib2FyZFR5cGVzLmFwcGVuZCh0eXBlKTsKIAotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YkNvbnRleHQ6OlNldFBhc3RlYm9hcmRUeXBlcyhOU0dlbmVyYWxQYm9hcmQsIHBhc3RlYm9hcmRU
eXBlcyksIDApOworICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OworICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkVHlwZXMoTlNHZW5lcmFsUGJvYXJkLCBwYXN0ZWJvYXJk
VHlwZXMpLAorICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZFR5cGVz
OjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwogCiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAw
LCBjb3VudCA9IGl0ZW1zLmNvdW50OyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBOU1N0cmlu
ZyAqdHlwZSA9IFt0eXBlcyBvYmplY3RBdEluZGV4OmldOwpAQCAtMTY1NSw3ICsxNjU3LDggQEAg
dm9pZCBQREZQbHVnaW46OndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTgogCiAgICAgICAgIGlmIChb
dHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRUeXBlXSB8fCBbdHlwZSBpc0VxdWFs
VG9TdHJpbmc6TlNQYXN0ZWJvYXJkVHlwZVN0cmluZ10pIHsKICAgICAgICAgICAgIFJldGFpblB0
cjxOU1N0cmluZz4gcGxhaW5UZXh0U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aERhdGE6ZGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwotICAgICAg
ICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoTlNHZW5l
cmFsUGJvYXJkLCB0eXBlLCBwbGFpblRleHRTdHJpbmcuZ2V0KCkpLCAwKTsKKyAgICAgICAgICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShOU0dlbmVy
YWxQYm9hcmQsIHR5cGUsIHBsYWluVGV4dFN0cmluZy5nZXQoKSksCisgICAgICAgICAgICAgICAg
TWVzc2FnZXM6OldlYkNvbnRleHQ6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlOjpSZXBseShu
ZXdDaGFuZ2VDb3VudCksIDApOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKGRhdGEpOwog
CkBAIC0xNjY2LDcgKzE2NjksOCBAQCB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVi
b2FyZChOCiAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBT
aGFyZWRNZW1vcnk6OmNyZWF0ZShidWZmZXItPnNpemUoKSk7CiAgICAgICAgICAgICBtZW1jcHko
c2hhcmVkTWVtb3J5LT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CiAg
ICAgICAgICAgICBzaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9y
eTo6UmVhZE9ubHkpOwotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2Fy
ZEJ1ZmZlckZvclR5cGUoTlNHZW5lcmFsUGJvYXJkLCB0eXBlLCBoYW5kbGUsIGJ1ZmZlci0+c2l6
ZSgpKSwgMCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2Fy
ZEJ1ZmZlckZvclR5cGUoTlNHZW5lcmFsUGJvYXJkLCB0eXBlLCBoYW5kbGUsIGJ1ZmZlci0+c2l6
ZSgpKSwKKyAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2Fy
ZEJ1ZmZlckZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lv
biAxNTQ2MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOSwxMiArNDA5LDE1
IEBAIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0cmluZ0ZvclQKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb3B5KGNvbnN0IFN0cmlu
ZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkKQorbG9uZyBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29u
c3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQ29udGV4dDo6UGFzdGVi
b2FyZENvcHkoZnJvbVBhc3RlYm9hcmQsIHRvUGFzdGVib2FyZCksIDApOworICAgIHVpbnQ2NF90
IG5ld0NoYW5nZUNvdW50OworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpQYXN0ZWJvYXJkQ29w
eShmcm9tUGFzdGVib2FyZCwgdG9QYXN0ZWJvYXJkKSwKKyAgICAgICAgTWVzc2FnZXM6OldlYkNv
bnRleHQ6OlBhc3RlYm9hcmRDb3B5OjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIHJl
dHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAotaW50IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y2hh
bmdlQ291bnQoY29uc3QgV1RGOjpTdHJpbmcgJnBhc3RlYm9hcmROYW1lKQorbG9uZyBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KGNvbnN0IFdURjo6U3RyaW5nICZwYXN0ZWJvYXJk
TmFtZSkKIHsKICAgICB1aW50NjRfdCBjaGFuZ2VDb3VudDsKICAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29u
dGV4dDo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50KHBhc3RlYm9hcmROYW1lKSwKQEAgLTQ0Niwx
NyArNDQ5LDIzIEBAIEtVUkwgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp1cmwoY29uc3QgU3QKICAg
ICByZXR1cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyk7CiB9CiAKLXZvaWQgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjphZGRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVi
b2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQorbG9uZyBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmFkZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlw
ZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQ29udGV4
dDo6QWRkUGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLCAw
KTsKKyAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4
dDo6QWRkUGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLAor
ICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6QWRkUGFzdGVib2FyZFR5cGVzOjpSZXBseShu
ZXdDaGFuZ2VDb3VudCksIDApOworICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAotdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCitsb25nIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6c2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJD
b250ZXh0OjpTZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBl
cyksIDApOworICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OworICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJD
b250ZXh0OjpTZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBl
cyksCisgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkVHlwZXM6OlJl
cGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgcmV0dXJuIG5ld0NoYW5nZUNvdW50OwogfQog
Ci12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQorbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNl
dEJ1ZmZlckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAg
ICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CiAgICAgaWYgKGJ1ZmZlcikgewpAQCAtNDY0
LDE3ICs0NzMsMjYgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldEJ1ZmZlckZvcgog
ICAgICAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgp
LCBidWZmZXItPnNpemUoKSk7CiAgICAgICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRlSGFu
ZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CiAgICAgfQotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YkNvbnRleHQ6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0
ZWJvYXJkVHlwZSwgaGFuZGxlLCBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6IDApLCAwKTsKKyAg
ICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0
UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlLCBo
YW5kbGUsIGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgpIDogMCksCisgICAgICAgIE1lc3NhZ2VzOjpX
ZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291
bnQpLCAwKTsKKyAgICByZXR1cm4gbmV3Q2hhbmdlQ291bnQ7CiB9CiAKLXZvaWQgV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjpzZXRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpCitsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0UGF0aG5hbWVzRm9y
VHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YkNvbnRleHQ6OlNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBw
YXN0ZWJvYXJkVHlwZSwgcGF0aG5hbWVzKSwgMCk7CisgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291
bnQ7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYkNvbnRleHQ6OlNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JU
eXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSwgcGF0aG5hbWVzKSwKKyAgICAgICAg
TWVzc2FnZXM6OldlYkNvbnRleHQ6OlNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlOjpSZXBs
eShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAot
dm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpCitsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0U3RyaW5nRm9yVHlw
ZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQ
YXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHN0
cmluZyksIDApOworICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OworICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFz
dGVib2FyZFR5cGUsIHN0cmluZyksCisgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQ
YXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICBy
ZXR1cm4gbmV3Q2hhbmdlQ291bnQ7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxNTQ2MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC05OSwxNyArOTksMTcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0ZvclR5cGUoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBpbnQgY2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBsb25nIGNoYW5nZUNvdW50KGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3RyaW5nIHVuaXF1ZU5h
bWUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6S1VS
TCB1cmwoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgY29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcm
IHRvUGFzdGVib2FyZCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFkZFR5cGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQ
YXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBsb25nIGFkZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJv
YXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgbG9uZyBzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVz
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGxv
bmcgY29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFz
dGVib2FyZCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBsb25nIHNldEJ1ZmZlckZvclR5cGUoUGFz
c1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGxvbmcgc2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgbG9uZyBzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
IE9WRVJSSURFOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDYyOSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEzLTA4LTI2ICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIGNhbi1y
ZWFkLWluLWRyYWdzdGFydC1ldmVudC5odG1sIGFuZCBjYW4tcmVhZC1pbi1jb3B5LWFuZC1jdXQt
ZXZlbnRzLmh0bWwgZmFpbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTEzMDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmV0dXJuIG5ldyBwYXN0ZWJvYXJkIGNoYW5nZSBjb3VudCBmcm9tIGFsbCBmdW5j
dGlvbnMgdGhhdCBjaGFuZ2UgaXQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMubW06CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvcHkpOgorICAg
ICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjaGFuZ2VDb3VudCk6CisgICAgICAgIChXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmFkZFR5cGVzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6c2V0VHlwZXMpOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRCdWZm
ZXJGb3JUeXBlKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0UGF0aG5hbWVz
Rm9yVHlwZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFN0cmluZ0ZvclR5
cGUpOgorCiAyMDEzLTA4LTI2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZp
c2lvbiAxNTQ2MDkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTcgKzgzLDE3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVy
Rm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlw
ZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0
cmluZyBzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGNoYW5nZUNv
dW50KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
bG9uZyBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIFN0cmluZyB1bmlxdWVOYW1lKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpDb2xvciBjb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OktVUkwgdXJsKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIGNvcHkoY29uc3QgU3RyaW5nJiBm
cm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBhZGRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5
cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEJ1ZmZlckZvclR5cGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8
U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTdHJpbmdGb3JUeXBl
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgbG9uZyBhZGRUeXBlcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGxvbmcgc2V0VHlwZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBsb25nIGNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFz
dGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgbG9uZyBzZXRCdWZmZXJGb3JUeXBlKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBsb25nIHNldFBhdGhuYW1lc0ZvclR5cGUoY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGxvbmcgc2V0U3Ry
aW5nRm9yVHlwZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKIH07CiAKICNlbmRpZiAvLyBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXNfaApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQkocmV2aXNpb24g
MTU0NjA5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCBTdHJpbmcg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzdHJpbmdGb3JUCiAgICAgcmV0dXJuIFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkVHlwZSk7CiB9
CiAKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBh
c3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkKQorbG9uZyBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5n
JiB0b1Bhc3RlYm9hcmQpCiB7Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHRvUGFzdGVib2FyZCku
Y29weShmcm9tUGFzdGVib2FyZCk7CisgICAgcmV0dXJuIFBsYXRmb3JtUGFzdGVib2FyZCh0b1Bh
c3RlYm9hcmQpLmNvcHkoZnJvbVBhc3RlYm9hcmQpOwogfQogCi1pbnQgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcgJnBhc3RlYm9hcmROYW1lKQorbG9uZyBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KGNvbnN0IFN0cmluZyAmcGFzdGVib2Fy
ZE5hbWUpCiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
Y2hhbmdlQ291bnQoKTsKIH0KQEAgLTE5OSwyNyArMTk5LDI3IEBAIEtVUkwgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjp1cmwoY29uc3QgU3QKICAgICByZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS51cmwoKTsKIH0KIAotdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmFk
ZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpCitsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YWRkVHlwZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkKIHsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmFk
ZFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CisgICAgcmV0dXJuIFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuYWRkVHlwZXMocGFzdGVib2FyZFR5cGVzKTsKIH0KIAotdm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJv
YXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCitsb25nIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6c2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBl
cywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLnNldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CisgICAgcmV0dXJu
IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0VHlwZXMocGFzdGVib2FyZFR5
cGVzKTsKIH0KIAotdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldEJ1ZmZlckZvclR5cGUo
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK2xvbmcgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpzZXRCdWZmZXJGb3JUeXBlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpCiB7Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRCdWZmZXJG
b3JUeXBlKGJ1ZmZlciwgcGFzdGVib2FyZFR5cGUpOworICAgIHJldHVybiBQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUoYnVmZmVyLCBwYXN0ZWJvYXJk
VHlwZSk7CiB9CiAKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRQYXRobmFtZXNGb3JU
eXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCitsb25nIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6c2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0
aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lKQogewotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0
UGF0aG5hbWVzRm9yVHlwZShwYXRobmFtZXMsIHBhc3RlYm9hcmRUeXBlKTsKKyAgICByZXR1cm4g
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRQYXRobmFtZXNGb3JUeXBlKHBh
dGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6c2V0U3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK2xvbmcgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KQogewotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0U3RyaW5nRm9y
VHlwZShzdHJpbmcsIHBhc3RlYm9hcmRUeXBlKTsgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0U3RyaW5nRm9yVHlwZShzdHJpbmcsIHBhc3RlYm9h
cmRUeXBlKTsKIH0K
</data>
<flag name="review"
          id="231721"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209676</attachid>
            <date>2013-08-26 14:07:38 -0700</date>
            <delta_ts>2013-08-26 14:08:09 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>UpdateChangeCount.txt</filename>
            <type>text/plain</type>
            <size>51160</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDYyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEzLTA4LTI2ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIGNhbi1yZWFkLWlu
LWRyYWdzdGFydC1ldmVudC5odG1sIGFuZCBjYW4tcmVhZC1pbi1jb3B5LWFuZC1jdXQtZXZlbnRz
Lmh0bWwgZmFpbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEzMDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWFjIHBsYXRmb3JtIGltcGxlbWVudGF0aW9uIGhhcyBjaGVja3MgZm9yIHBhc3RlYm9hcmQg
Y2hhbmdlIGNvdW50LCBidXQgaXQKKyAgICAgICAgZGlkbid0IHVzZSB0byB1cGRhdGUgdGhlIGNv
dW50IHdoZW4gd3JpdGluZyB0byBwYXN0ZWJvYWQgZnJvbSBKYXZhU2NyaXB0LgorCisgICAgICAg
ICogcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5Lmg6IENoYW5nZWQgY2hhbmdlQ291bnQgZnVu
Y3Rpb24gdG8gcmV0dXJuIGEgbG9uZworICAgICAgICBpbnN0ZWFkIG9mIGFuIGludCwgYXMgdGhl
IHVuZGVybHlpbmcgTWFjIHR5cGUgaXMgTlNJbnRlZ2VyLiBDaGFuZ2VkIGFsbCBtZXRob2RzCisg
ICAgICAgIHRoYXQgbW9kaWZ5IHRoZSBwYXN0ZWJvYXJkIHRvIHJldHVybiBhIG5ldyBjaGFuZ2Ug
Y291bnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaDogQ2hhbmdl
ZCBhbGwgbWV0aG9kcyB0aGF0IG1vZGlmeSB0aGUgcGFzdGVib2FyZAorICAgICAgICB0byByZXR1
cm4gYSBuZXcgY2hhbmdlIGNvdW50LgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9h
cmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjbGVhcik6IFVwZGF0ZSBt
X2NoYW5nZUNvdW50LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rp
b25Gb3JUeXBlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQ
bGFpblRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVVJMRm9yVHlwZXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlVVJMKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjp3cml0ZUZpbGVXcmFwcGVyQXNSVEZEQXR0YWNobWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJvYXJkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjphZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKTogRGl0dG8uCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpjaGFuZ2VDb3VudCk6IENoYW5nZWQgcmV0dXJu
ZWQgdHlwZSB0byBsb25nIHRvIGF2b2lkCisgICAgICAgIGRhdGEgbG9zcy4KKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6Y29weSk6IFJldHVybiBuZXcgY2hhbmdlIGNvdW50
LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjphZGRUeXBlcyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRUeXBlcyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRCdWZmZXJGb3JUeXBl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnNldFBhdGhu
YW1lc0ZvclR5cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2Fy
ZDo6c2V0U3RyaW5nRm9yVHlwZSk6IERpdHRvLiBSZXBsYWNlZCAtW05TVVJMIHdyaXRlVG9QYXN0
ZWJvYXJkOl0KKyAgICAgICAgd2l0aCBhbiBlcXVpdmFsZW50IGltcGxlbW5lbnRhdGlvbiB0aGF0
IHRlbGxzIHVzZSB3aGV0aGVyIHdyaXRpbmcgd2FzIHN1Y2Nlc3NmdWwuCisKIDIwMTMtMDgtMjQg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
UHJvbWlzZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVn
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJh
dGVneS5oCShyZXZpc2lvbiAxNTQ2MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0
ZWJvYXJkU3RyYXRlZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTcgKzQzLDE3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5n
PiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nRm9yVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KSA9IDA7Ci0gICAgdmlydHVhbCBpbnQgY2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgbG9uZyBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgdW5pcXVlTmFtZSgpID0g
MDsKICAgICB2aXJ0dWFsIENvbG9yIGNvbG9yKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
ID0gMDsKICAgICB2aXJ0dWFsIEtVUkwgdXJsKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
ID0gMDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0
ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBhZGRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFR5cGVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnVmZmVyRm9yVHlwZShQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGF0aG5hbWVz
Rm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0U3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CisgICAgdmlydHVhbCBsb25n
IGFkZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIGxvbmcgc2V0VHlwZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgbG9uZyBjb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBh
c3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkKSA9IDA7CisgICAgdmlydHVhbCBs
b25nIHNldEJ1ZmZlckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7Cisg
ICAgdmlydHVhbCBsb25nIHNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0cmluZz4m
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKSA9IDA7CisgICAgdmlydHVhbCBsb25nIHNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkgPSAwOwogI2VuZGlmCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+UGFzdGVib2FyZFN0
cmF0ZWd5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2Fy
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVi
b2FyZC5oCShyZXZpc2lvbiAxNTQ2MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVBhc3RlYm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTYgKzQ5LDE5IEBAIHB1Ymxp
YzoKICAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyRm9yVHlwZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmRUeXBlKTsKICAgICB2b2lkIGdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9y
PFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7CiAgICAg
U3RyaW5nIHN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7Ci0gICAg
aW50IGNoYW5nZUNvdW50KCkgY29uc3Q7CisgICAgbG9uZyBjaGFuZ2VDb3VudCgpIGNvbnN0Owog
ICAgIENvbG9yIGNvbG9yKCk7CiAgICAgS1VSTCB1cmwoKTsKLSAgICAKLSAgICB2b2lkIGNvcHko
Y29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCk7Ci0gICAgdm9pZCBhZGRUeXBlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKTsKLSAgICB2b2lkIHNldFR5cGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwotICAgIHZvaWQgc2V0QnVmZmVyRm9y
VHlwZShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUpOwotICAgIHZvaWQgc2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKLSAgICB2b2lkIHNldFN0
cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7
CisKKyAgICAvLyBUYWtlIG93bmVyc2hpcCBvZiB0aGUgcGFzdGVib2FyZCwgYW5kIHJldHVybiBu
ZXcgY2hhbmdlIGNvdW50LgorICAgIGxvbmcgYWRkVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhc3RlYm9hcmRUeXBlcyk7CisgICAgbG9uZyBzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFzdGVib2FyZFR5cGVzKTsKKworICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCByZXR1cm4g
MCBpZiBwYXN0ZWJvYXJkIG93bmVyc2hpcCBoYXMgYmVlbiB0YWtlbiBmcm9tIHVzLgorICAgIGxv
bmcgY29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkKTsKKyAgICBsb25nIHNldEJ1ZmZl
ckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlKTsKKyAgICBsb25nIHNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7CisgICAgbG9uZyBz
ZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUpOwogCiBwcml2YXRlOgogI2lmIFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCShyZXZpc2lvbiAxNTQ2MDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTU1LDcgKzE1NSw3IEBAIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6
Y3JlYXQKIAogdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpCiB7Ci0gICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyhWZWN0b3I8U3RyaW5nPigpLCBt
X3Bhc3RlYm9hcmROYW1lKTsKKyAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyhWZWN0b3I8U3RyaW5nPigpLCBtX3Bh
c3RlYm9hcmROYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmQ6
OmdldERhdGFTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlKQpAQCAtMjA1LDMzICsyMDUsMzMgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlv
bkZvclR5cGVzKAogICAgIGZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBj
bGllbnRUeXBlcywgY2xpZW50RGF0YSk7CiAgICAgdHlwZXMuYXBwZW5kVmVjdG9yKGNsaWVudFR5
cGVzKTsKIAotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
c2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOworICAgIG1fY2hhbmdlQ291bnQgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVz
LCBtX3Bhc3RlYm9hcmROYW1lKTsKICAgICBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmRpZFNl
dFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2FyZCgpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjbGllbnRUeXBlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBlKGNsaWVudERhdGFbaV0s
IGNsaWVudFR5cGVzW2ldLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICAgICAgbV9jaGFuZ2VDb3Vu
dCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVy
Rm9yVHlwZShjbGllbnREYXRhW2ldLCBjbGllbnRUeXBlc1tpXSwgbV9wYXN0ZWJvYXJkTmFtZSk7
CiAKICAgICAvLyBQdXQgSFRNTCBvbiB0aGUgcGFzdGVib2FyZC4KICAgICBpZiAodHlwZXMuY29u
dGFpbnMoV2ViQXJjaGl2ZVBib2FyZFR5cGUpKQotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5cGUoZ2V0RGF0YVNlbGVjdGlv
bihmcmFtZSwgV2ViQXJjaGl2ZVBib2FyZFR5cGUpLCBXZWJBcmNoaXZlUGJvYXJkVHlwZSwgbV9w
YXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5cGUoZ2V0RGF0YVNlbGVj
dGlvbihmcmFtZSwgV2ViQXJjaGl2ZVBib2FyZFR5cGUpLCBXZWJBcmNoaXZlUGJvYXJkVHlwZSwg
bV9wYXN0ZWJvYXJkTmFtZSk7CiAgICAgCiAgICAgLy8gUHV0IHRoZSBhdHRyaWJ1dGVkIHN0cmlu
ZyBvbiB0aGUgcGFzdGVib2FyZCAoUlRGL1JURkQgZm9ybWF0KS4KICAgICBpZiAodHlwZXMuY29u
dGFpbnMoU3RyaW5nKE5TUlRGRFBib2FyZFR5cGUpKSkKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBlKGdldERhdGFTZWxl
Y3Rpb24oZnJhbWUsIE5TUlRGRFBib2FyZFR5cGUpLCBOU1JURkRQYm9hcmRUeXBlLCBtX3Bhc3Rl
Ym9hcmROYW1lKTsKKyAgICAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlwZShnZXREYXRhU2VsZWN0aW9u
KGZyYW1lLCBOU1JURkRQYm9hcmRUeXBlKSwgTlNSVEZEUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CiAKICAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUlRGUGJvYXJkVHlwZSkp
KQotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNl
dEJ1ZmZlckZvclR5cGUoZ2V0RGF0YVNlbGVjdGlvbihmcmFtZSwgTlNSVEZQYm9hcmRUeXBlKSwg
TlNSVEZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICAgICAgbV9jaGFuZ2VDb3Vu
dCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVy
Rm9yVHlwZShnZXREYXRhU2VsZWN0aW9uKGZyYW1lLCBOU1JURlBib2FyZFR5cGUpLCBOU1JURlBi
b2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogICAgIAogICAgIC8vIFB1dCBwbGFpbiBzdHJp
bmcgb24gdGhlIHBhc3RlYm9hcmQuCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU1N0
cmluZ1Bib2FyZFR5cGUpKSkgewogICAgICAgICBTdHJpbmcgdGV4dCA9IHNob3VsZFNlcmlhbGl6
ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJv
YXJkCiAgICAgICAgICAgICA/IGZyYW1lLT5lZGl0b3IoKS5zdHJpbmdTZWxlY3Rpb25Gb3JQYXN0
ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpCiAgICAgICAgICAgICA6IGZyYW1lLT5lZGl0b3IoKS5z
dHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7Ci0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSh0ZXh0LCBOU1N0cmlu
Z1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOworICAgICAgICBtX2NoYW5nZUNvdW50ID0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JU
eXBlKHRleHQsIE5TU3RyaW5nUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiAgICAgfQog
ICAgIAogICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJTbWFydFBhc3RlUGJvYXJkVHlwZSkpCi0g
ICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVm
ZmVyRm9yVHlwZSgwLCBXZWJTbWFydFBhc3RlUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7
CisgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5cGUoMCwgV2ViU21hcnRQYXN0ZVBib2FyZFR5cGUs
IG1fcGFzdGVib2FyZE5hbWUpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbGFjZU9wdGlv
bikKQEAgLTI0Miw5ICsyNDIsOSBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNv
bnN0IFN0CiAgICAgICAgIHR5cGVzLmFwcGVuZChXZWJTbWFydFBhc3RlUGJvYXJkVHlwZSk7CiAK
ICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVz
KHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUodGV4dCwgTlNTdHJpbmdQYm9hcmRU
eXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKHRleHQsIE5T
U3RyaW5nUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiAgICAgaWYgKHNtYXJ0UmVwbGFj
ZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2UpCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlwZSgwLCBXZWJTbWFydFBhc3Rl
UGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIG1fY2hhbmdlQ291bnQgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5
cGUoMCwgV2ViU21hcnRQYXN0ZVBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogfQogICAg
IAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSosIGJvb2wgY2FuU21hcnRD
b3B5T3JEZWxldGUsIEZyYW1lKiBmcmFtZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9y
Q2xpcGJvYXJkIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCkKQEAgLTI1
Miw5ICsyNTIsOSBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiwgCiAg
ICAgd3JpdGVTZWxlY3Rpb25Gb3JUeXBlcyhWZWN0b3I8U3RyaW5nPigpLCBjYW5TbWFydENvcHlP
ckRlbGV0ZSwgZnJhbWUsIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCk7
CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlVVJMRm9yVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgdGl0bGVTdHIsIEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBsb25nIHdyaXRlVVJM
Rm9yVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGVTdHIsIEZyYW1l
KiBmcmFtZSkKIHsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPnNldFR5cGVzKHR5cGVzLCBwYXN0ZWJvYXJkTmFtZSk7CisgICAgbG9uZyBuZXdDaGFuZ2VD
b3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlw
ZXModHlwZXMsIHBhc3RlYm9hcmROYW1lKTsKICAgICAKICAgICBBU1NFUlQoIXVybC5pc0VtcHR5
KCkpOwogICAgIApAQCAtMjcxLDIxICsyNzEsMjMgQEAgc3RhdGljIHZvaWQgd3JpdGVVUkxGb3JU
eXBlcyhjb25zdCBWZWN0bwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKICAgICAgICAg
cGF0aHMuYXBwZW5kKFtjb2NvYVVSTCBhYnNvbHV0ZVN0cmluZ10pOwogICAgICAgICBwYXRocy5h
cHBlbmQodGl0bGVTdHIuc3RyaXBXaGl0ZVNwYWNlKCkpOwotICAgICAgICBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFBhdGhuYW1lc0ZvclR5cGUocGF0aHMs
IFdlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSwgcGFzdGVib2FyZE5hbWUpOworICAgICAgICBu
ZXdDaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+c2V0UGF0aG5hbWVzRm9yVHlwZShwYXRocywgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBl
LCBwYXN0ZWJvYXJkTmFtZSk7CiAgICAgfQogICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmco
TlNVUkxQYm9hcmRUeXBlKSkpCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShbY29jb2FVUkwgYWJzb2x1dGVTdHJpbmdd
LCBOU1VSTFBib2FyZFR5cGUsIHBhc3RlYm9hcmROYW1lKTsKKyAgICAgICAgbmV3Q2hhbmdlQ291
bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmlu
Z0ZvclR5cGUoW2NvY29hVVJMIGFic29sdXRlU3RyaW5nXSwgTlNVUkxQYm9hcmRUeXBlLCBwYXN0
ZWJvYXJkTmFtZSk7CiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYlVSTFBib2FyZFR5cGUpKQot
ICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0
cmluZ0ZvclR5cGUodXNlclZpc2libGVTdHJpbmcsIFdlYlVSTFBib2FyZFR5cGUsIHBhc3RlYm9h
cmROYW1lKTsKKyAgICAgICAgbmV3Q2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUodXNlclZpc2libGVTdHJpbmcs
IFdlYlVSTFBib2FyZFR5cGUsIHBhc3RlYm9hcmROYW1lKTsKICAgICBpZiAodHlwZXMuY29udGFp
bnMoV2ViVVJMTmFtZVBib2FyZFR5cGUpKQotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUodGl0bGUsIFdlYlVSTE5hbWVQ
Ym9hcmRUeXBlLCBwYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIG5ld0NoYW5nZUNvdW50ID0gcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBl
KHRpdGxlLCBXZWJVUkxOYW1lUGJvYXJkVHlwZSwgcGFzdGVib2FyZE5hbWUpOwogICAgIGlmICh0
eXBlcy5jb250YWlucyhTdHJpbmcoTlNTdHJpbmdQYm9hcmRUeXBlKSkpCi0gICAgICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSh1
c2VyVmlzaWJsZVN0cmluZywgTlNTdHJpbmdQYm9hcmRUeXBlLCBwYXN0ZWJvYXJkTmFtZSk7Cisg
ICAgICAgIG5ld0NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKHVzZXJWaXNpYmxlU3RyaW5nLCBOU1N0cmluZ1Bi
b2FyZFR5cGUsIHBhc3RlYm9hcmROYW1lKTsKKworICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsK
IH0KICAgICAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHRpdGxlU3RyLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgd3JpdGVVUkxGb3JUeXBl
cyh3cml0YWJsZVR5cGVzRm9yVVJMKCksIG1fcGFzdGVib2FyZE5hbWUsIHVybCwgdGl0bGVTdHIs
IGZyYW1lKTsKKyAgICBtX2NoYW5nZUNvdW50ID0gd3JpdGVVUkxGb3JUeXBlcyh3cml0YWJsZVR5
cGVzRm9yVVJMKCksIG1fcGFzdGVib2FyZE5hbWUsIHVybCwgdGl0bGVTdHIsIGZyYW1lKTsKIH0K
IAogc3RhdGljIE5TRmlsZVdyYXBwZXIqIGZpbGVXcmFwcGVyRm9ySW1hZ2UoQ2FjaGVkUmVzb3Vy
Y2UqIHJlc291cmNlLCBOU1VSTCAqdXJsKQpAQCAtMzAxLDcgKzMwMyw3IEBAIHN0YXRpYyBOU0Zp
bGVXcmFwcGVyKiBmaWxlV3JhcHBlckZvckltYWcKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAot
c3RhdGljIHZvaWQgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaG1lbnQoTlNGaWxlV3JhcHBl
ciogd3JhcHBlciwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3N0YXRpYyB2b2lkIHdy
aXRlRmlsZVdyYXBwZXJBc1JURkRBdHRhY2htZW50KE5TRmlsZVdyYXBwZXIqIHdyYXBwZXIsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGxvbmcmIG5ld0NoYW5nZUNvdW50KQogewogICAg
IE5TVGV4dEF0dGFjaG1lbnQgKmF0dGFjaG1lbnQgPSBbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2Nd
IGluaXRXaXRoRmlsZVdyYXBwZXI6d3JhcHBlcl07CiAgICAgCkBAIC0zMTAsNyArMzEyLDcgQEAg
c3RhdGljIHZvaWQgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaAogICAgIAogICAgIE5TRGF0
YSAqUlRGRERhdGEgPSBbc3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmlu
ZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKICAgICBpZiAoUlRGRERhdGEpCi0g
ICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVm
ZmVyRm9yVHlwZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoUlRGRERhdGEpLmdldCgpLCBOU1JU
RkRQYm9hcmRUeXBlLCBwYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIG5ld0NoYW5nZUNvdW50ID0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JU
eXBlKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShSVEZERGF0YSkuZ2V0KCksIE5TUlRGRFBib2Fy
ZFR5cGUsIHBhc3RlYm9hcmROYW1lKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdl
KE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKQEAgLTMy
OCw3ICszMzAsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAg
ICAgaWYgKCFjYWNoZWRJbWFnZSB8fCBjYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICB3cml0ZVVSTEZvclR5cGVzKHdyaXRhYmxlVHlwZXNGb3JJbWFn
ZSgpLCBtX3Bhc3RlYm9hcmROYW1lLCBjb2NvYVVSTCwgbnNTdHJpbmdOaWxJZkVtcHR5KHRpdGxl
KSwgbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgbV9jaGFuZ2VDb3VudCA9IHdyaXRl
VVJMRm9yVHlwZXMod3JpdGFibGVUeXBlc0ZvckltYWdlKCksIG1fcGFzdGVib2FyZE5hbWUsIGNv
Y29hVVJMLCBuc1N0cmluZ05pbElmRW1wdHkodGl0bGUpLCBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpKTsKICAgICAKICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5k
ZXJlcihyZW5kZXJlcik7CiAgICAgaWYgKCFpbWFnZSkKQEAgLTMzNiwxNyArMzM4LDE3IEBAIHZv
aWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBOU0RhdGEgKmltYWdl
RGF0YSA9IChOU0RhdGEgKilbaW1hZ2UtPmdldE5TSW1hZ2UoKSBUSUZGUmVwcmVzZW50YXRpb25d
OwogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47Ci0gICAgcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBlKFNoYXJlZEJ1
ZmZlcjo6d3JhcE5TRGF0YShpbWFnZURhdGEpLCBOU1RJRkZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9h
cmROYW1lKTsKKyAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBlKFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0
YShpbWFnZURhdGEpLCBOU1RJRkZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKIAogICAg
IFN0cmluZyBNSU1FVHlwZSA9IGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCk7CiAg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVU
eXBlKE1JTUVUeXBlKSk7CiAKLSAgICB3cml0ZUZpbGVXcmFwcGVyQXNSVEZEQXR0YWNobWVudChm
aWxlV3JhcHBlckZvckltYWdlKGNhY2hlZEltYWdlLCBjb2NvYVVSTCksIG1fcGFzdGVib2FyZE5h
bWUpOworICAgIHdyaXRlRmlsZVdyYXBwZXJBc1JURkRBdHRhY2htZW50KGZpbGVXcmFwcGVyRm9y
SW1hZ2UoY2FjaGVkSW1hZ2UsIGNvY29hVVJMKSwgbV9wYXN0ZWJvYXJkTmFtZSwgbV9jaGFuZ2VD
b3VudCk7CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJvYXJkKGNvbnN0IFBhc3Rl
Ym9hcmQmIHBhc3RlYm9hcmQpCiB7Ci0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT5jb3B5KHBhc3RlYm9hcmQubV9wYXN0ZWJvYXJkTmFtZSwgbV9wYXN0ZWJv
YXJkTmFtZSk7CisgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+Y29weShwYXN0ZWJvYXJkLm1fcGFzdGVib2FyZE5hbWUsIG1fcGFz
dGVib2FyZE5hbWUpOwogfQogCiBib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCkBA
IC02NTIsNyArNjU0LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5
cAogICAgIFN0cmluZyBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUo
dHlwZSk7CiAgICAgaWYgKGNvY29hVHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0Zv
clR5cGUoZW1wdHlTdHJpbmcoKSwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBt
X2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT5zZXRTdHJpbmdGb3JUeXBlKGVtcHR5U3RyaW5nKCksIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBhYnNvbHV0ZVVSTHNGcm9tUGFzdGVi
b2FyZEZpbGVuYW1lcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBib29sIG9ubHlGaXJz
dFVSTCA9IGZhbHNlKQpAQCAtNzYxLDcgKzc2Myw3IEBAIHN0YXRpYyB2b2lkIGFkZEhUTUxDbGlw
Ym9hcmRUeXBlc0ZvckNvY28KICAgICAgICAgcmVzdWx0VHlwZXMuYWRkKHV0aVR5cGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIC8vIE5vIG1hcHBpbmcsIGp1c3QgcGFzcyB0aGUgd2hv
bGUgc3RyaW5nIHRob3VnaAorICAgIC8vIE5vIG1hcHBpbmcsIGp1c3QgcGFzcyB0aGUgd2hvbGUg
c3RyaW5nIHRocm91Z2guCiAgICAgcmVzdWx0VHlwZXMuYWRkKGNvY29hVHlwZSk7CiB9CiAKQEAg
LTc3OCw3ICs3ODAsNyBAQCBib29sIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmlu
CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwogICAgICAgICB0eXBlcy5hcHBlbmQoY29j
b2FUeXBlKTsKICAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5zZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0gICAgICAgIHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShjb2Nv
YURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIG1fY2hhbmdlQ291
bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmlu
Z0ZvclR5cGUoY29jb2FEYXRhLCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc4OCw3ICs3OTAsNyBAQCBib29sIFBhc3RlYm9h
cmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
OwogICAgICAgICB0eXBlcy5hcHBlbmQoY29jb2FUeXBlKTsKICAgICAgICAgcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5hZGRUeXBlcyh0eXBlcywgbV9wYXN0ZWJv
YXJkTmFtZSk7Ci0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+c2V0U3RyaW5nRm9yVHlwZShjb2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CisgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoY29jb2FEYXRhLCBjb2NvYVR5cGUs
IG1fcGFzdGVib2FyZE5hbWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2Fy
ZE1hYy5tbQkocmV2aXNpb24gMTU0NjA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBA
QCBTdHJpbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzdHJpbmdGb3JUeXBlCiAgICAgcmV0dXJuIFtt
X3Bhc3RlYm9hcmQuZ2V0KCkgc3RyaW5nRm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07CiB9CiAKLWlu
dCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50KCkgY29uc3QKK2xvbmcgUGxhdGZvcm1Q
YXN0ZWJvYXJkOjpjaGFuZ2VDb3VudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX3Bhc3RlYm9h
cmQuZ2V0KCkgY2hhbmdlQ291bnRdOwogfQpAQCAtOTksNyArOTksNyBAQCBLVVJMIFBsYXRmb3Jt
UGFzdGVib2FyZDo6dXJsKCkKICAgICByZXR1cm4gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOm1f
cGFzdGVib2FyZC5nZXQoKV07CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpjb3B5KGNv
bnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQpCitsb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6Y29w
eShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkKQogewogICAgIE5TUGFzdGVib2FyZCogcGFz
dGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOmZyb21QYXN0ZWJvYXJk
XTsKICAgICBOU0FycmF5KiB0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKQEAgLTEwNyw1MiAr
MTA3LDkxIEBAIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpjb3B5KGNvbnN0IFN0cmkKICAgICBb
bV9wYXN0ZWJvYXJkLmdldCgpIGFkZFR5cGVzOnR5cGVzIG93bmVyOm5pbF07CiAgICAgZm9yIChO
U1VJbnRlZ2VyIGkgPSAwOyBpIDwgW3R5cGVzIGNvdW50XTsgaSsrKSB7CiAgICAgICAgIE5TU3Ry
aW5nKiB0eXBlID0gW3R5cGVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIFttX3Bhc3RlYm9h
cmQuZ2V0KCkgc2V0RGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTp0eXBlXSBmb3JUeXBlOnR5
cGVdOworICAgICAgICBpZiAoIVttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0RGF0YTpbcGFzdGVib2Fy
ZCBkYXRhRm9yVHlwZTp0eXBlXSBmb3JUeXBlOnR5cGVdKQorICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfSAgICAKKyAgICByZXR1cm4gY2hhbmdlQ291bnQoKTsKIH0KIAotdm9pZCBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OmFkZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlw
ZXMpCitsb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6YWRkVHlwZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhc3RlYm9hcmRUeXBlcykKIHsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHR5
cGVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwYXN0ZWJvYXJkVHlwZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIFt0
eXBlcy5nZXQoKSBhZGRPYmplY3Q6cGFzdGVib2FyZFR5cGVzW2ldXTsKIAotICAgIFttX3Bhc3Rl
Ym9hcmQuZ2V0KCkgYWRkVHlwZXM6dHlwZXMuZ2V0KCkgb3duZXI6bmlsXTsKKyAgICByZXR1cm4g
W21fcGFzdGVib2FyZC5nZXQoKSBhZGRUeXBlczp0eXBlcy5nZXQoKSBvd25lcjpuaWxdOwogfQog
Ci12b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6c2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhc3RlYm9hcmRUeXBlcykKK2xvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRUeXBlcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKQogewotICAgIGlmIChwYXN0ZWJvYXJk
VHlwZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgZGVjbGFyZVR5
cGVzOm5pbCBvd25lcjpuaWxdOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChwYXN0
ZWJvYXJkVHlwZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gW21fcGFzdGVib2FyZC5nZXQo
KSBkZWNsYXJlVHlwZXM6bmlsIG93bmVyOm5pbF07CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk+IHR5cGVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXN0ZWJvYXJkVHlwZXMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgIFt0eXBlcy5nZXQoKSBhZGRPYmplY3Q6cGFzdGVib2FyZFR5cGVzW2ldXTsKIAotICAg
IFttX3Bhc3RlYm9hcmQuZ2V0KCkgZGVjbGFyZVR5cGVzOnR5cGVzLmdldCgpIG93bmVyOm5pbF07
CisgICAgcmV0dXJuIFttX3Bhc3RlYm9hcmQuZ2V0KCkgZGVjbGFyZVR5cGVzOnR5cGVzLmdldCgp
IG93bmVyOm5pbF07CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRCdWZmZXJGb3JU
eXBlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUpCitsb25nIFBsYXRmb3JtUGFzdGVib2FyZDo6c2V0QnVmZmVyRm9yVHlwZShQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
KQogewotICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0RGF0YTpidWZmZXIgPyBbYnVmZmVyLT5j
cmVhdGVOU0RhdGEoKSBhdXRvcmVsZWFzZV0gOiBuaWwgZm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07
CisgICAgQk9PTCBkaWRXcml0ZURhdGEgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldERhdGE6YnVm
ZmVyID8gW2J1ZmZlci0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdIDogbmlsIGZvclR5cGU6
cGFzdGVib2FyZFR5cGVdOworICAgIGlmICghZGlkV3JpdGVEYXRhKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gY2hhbmdlQ291bnQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBhc3RlYm9h
cmQ6OnNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKK2xvbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpz
ZXRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCiB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBwYXRocyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOyAgICAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhdGhuYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
W3BhdGhzLmdldCgpIGFkZE9iamVjdDogW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnBhdGhuYW1l
c1tpXV1dOwotICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0UHJvcGVydHlMaXN0OnBhdGhzLmdl
dCgpIGZvclR5cGU6cGFzdGVib2FyZFR5cGVdOwotfQorICAgICAgICBbcGF0aHMuZ2V0KCkgYWRk
T2JqZWN0OltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpwYXRobmFtZXNbaV1dXTsKKyAgICBCT09M
IGRpZFdyaXRlRGF0YSA9IFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0UHJvcGVydHlMaXN0OnBhdGhz
LmdldCgpIGZvclR5cGU6cGFzdGVib2FyZFR5cGVdOworICAgIGlmICghZGlkV3JpdGVEYXRhKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2hhbmdlQ291bnQoKTsKK30KKworbG9uZyBQ
bGF0Zm9ybVBhc3RlYm9hcmQ6OnNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCit7CisgICAgQk9PTCBkaWRXcml0ZURhdGE7
CisKKyAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3RyaW5nKE5TVVJMUGJvYXJkVHlwZSkpIHsK
KyAgICAgICAgLy8gV2UgY2Fubm90IGp1c3QgdXNlIC1OU1Bhc3RlYm9hcmQgd3JpdGVPYmplY3Rz
Ol0sIGJlY2F1c2UgLWRlY2xhcmVUeXBlcyBoYXMgYmVlbiBhbHJlYWR5IGNhbGxlZCwgaW1wbGlj
aXRseSBjcmVhdGluZyBhbiBpdGVtLgorICAgICAgICBOU1VSTCAqdXJsID0gW05TVVJMIFVSTFdp
dGhTdHJpbmc6c3RyaW5nXTsKKyAgICAgICAgaWYgKFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVz
XSBjb250YWluc09iamVjdDpOU1VSTFBib2FyZFR5cGVdKSB7CisgICAgICAgICAgICBOU1VSTCAq
YmFzZSA9IFt1cmwgYmFzZVVSTF07CisgICAgICAgICAgICBpZiAoYmFzZSkKKyAgICAgICAgICAg
ICAgICBkaWRXcml0ZURhdGEgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldFByb3BlcnR5TGlzdDpA
W1t1cmwgcmVsYXRpdmVTdHJpbmddLCBbYmFzZSBhYnNvbHV0ZVN0cmluZ11dIGZvclR5cGU6TlNV
UkxQYm9hcmRUeXBlXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHVybCkKKyAgICAgICAgICAgICAg
ICBkaWRXcml0ZURhdGEgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldFByb3BlcnR5TGlzdDpAW1t1
cmwgYWJzb2x1dGVTdHJpbmddLCBAIiJdIGZvclR5cGU6TlNVUkxQYm9hcmRUeXBlXTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkaWRXcml0ZURhdGEgPSBbbV9wYXN0ZWJvYXJk
LmdldCgpIHNldFByb3BlcnR5TGlzdDpAW0AiIiwgQCIiXSBmb3JUeXBlOk5TVVJMUGJvYXJkVHlw
ZV07CisKKyAgICAgICAgICAgIGlmICghZGlkV3JpdGVEYXRhKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5
cGVzXSBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSkgeworICAgICAgICAg
ICAgZGlkV3JpdGVEYXRhID0gW21fcGFzdGVib2FyZC5nZXQoKSBzZXRTdHJpbmc6W3VybCBhYnNv
bHV0ZVN0cmluZ10gZm9yVHlwZTooTlNTdHJpbmcgKilrVVRUeXBlVVJMXTsKKyAgICAgICAgICAg
IGlmICghZGlkV3JpdGVEYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXSBjb250YWluc09iamVj
dDooTlNTdHJpbmcgKilrVVRUeXBlRmlsZVVSTF0gJiYgW3VybCBpc0ZpbGVVUkxdKSB7CisgICAg
ICAgICAgICBkaWRXcml0ZURhdGEgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldFN0cmluZzpbdXJs
IGFic29sdXRlU3RyaW5nXSBmb3JUeXBlOihOU1N0cmluZyAqKWtVVFR5cGVGaWxlVVJMXTsKKyAg
ICAgICAgICAgIGlmICghZGlkV3JpdGVEYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgICBkaWRXcml0ZURhdGEgPSBbbV9wYXN0
ZWJvYXJkLmdldCgpIHNldFN0cmluZzpzdHJpbmcgZm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07Cisg
ICAgICAgIGlmICghZGlkV3JpdGVEYXRhKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQog
Ci12b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6c2V0U3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcm
IHN0cmluZywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKLXsKLSAgICBpZiAocGFzdGVi
b2FyZFR5cGUgPT0gU3RyaW5nKE5TVVJMUGJvYXJkVHlwZSkpCi0gICAgICAgIFtbTlNVUkwgVVJM
V2l0aFN0cmluZzpzdHJpbmddIHdyaXRlVG9QYXN0ZWJvYXJkOm1fcGFzdGVib2FyZC5nZXQoKV07
Ci0gICAgZWxzZQotICAgICAgICBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldFN0cmluZzpzdHJpbmcg
Zm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07CisgICAgcmV0dXJuIGNoYW5nZUNvdW50KCk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDYyOSkKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEzLTA4LTI2ICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIGNhbi1yZWFk
LWluLWRyYWdzdGFydC1ldmVudC5odG1sIGFuZCBjYW4tcmVhZC1pbi1jb3B5LWFuZC1jdXQtZXZl
bnRzLmh0bWwgZmFpbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTEzMDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmV0dXJuIG5ldyBwYXN0ZWJvYXJkIGNoYW5nZSBjb3VudCBmcm9tIGFsbCBmdW5jdGlv
bnMgdGhhdCBjaGFuZ2UgaXQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4
dDo6cGFzdGVib2FyZENvcHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjphZGRQYXN0
ZWJvYXJkVHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpzZXRQYXN0ZWJvYXJk
VHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpzZXRQYXN0ZWJvYXJkUGF0aG5h
bWVzRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRT
dHJpbmdGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6c2V0UGFzdGVib2Fy
ZEJ1ZmZlckZvclR5cGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OndyaXRlSXRlbXNUb1Bhc3RlYm9h
cmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb3B5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjaGFuZ2VDb3VudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6YWRkVHlwZXMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFR5cGVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRCdWZmZXJGb3JUeXBlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRQYXRobmFtZXNGb3JUeXBlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRTdHJpbmdGb3JUeXBl
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5oOgorCiAyMDEzLTA4LTI2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkNvbnRleHQuaAkocmV2aXNpb24gMTU0NjA5KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDE2ICszMjMsMTYgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFZlY3Rv
cjxTdHJpbmc+JiBwYXRobmFtZXMpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5
cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgU3RyaW5nJik7CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBT
aGFyZWRNZW1vcnk6OkhhbmRsZSYsIHVpbnQ2NF90JiBzaXplKTsKLSAgICB2b2lkIHBhc3RlYm9h
cmRDb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0
ZWJvYXJkKTsKKyAgICB2b2lkIHBhc3RlYm9hcmRDb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3Rl
Ym9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291
bnQpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50KGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIHVpbnQ2NF90JiBjaGFuZ2VDb3VudCk7CiAgICAgdm9pZCBnZXRQYXN0ZWJv
YXJkVW5pcXVlTmFtZShTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKICAgICB2b2lkIGdldFBhc3Rl
Ym9hcmRDb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXZWJDb3JlOjpDb2xvciYp
OwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZFVSTChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBXVEY6OlN0cmluZyYpOwotICAgIHZvaWQgYWRkUGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMp
OwotICAgIHZvaWQgc2V0UGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwotICAgIHZvaWQgc2V0
UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhu
YW1lcyk7Ci0gICAgdm9pZCBzZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJp
bmcmKTsKLSAgICB2b2lkIHNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFNoYXJl
ZE1lbW9yeTo6SGFuZGxlJiwgdWludDY0X3Qgc2l6ZSk7CisgICAgdm9pZCBhZGRQYXN0ZWJvYXJk
VHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhc3RlYm9hcmRUeXBlcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKKyAgICB2b2lkIHNl
dFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOwor
ICAgIHZvaWQgc2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhdGhuYW1lcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKKyAgICB2b2lkIHNl
dFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90JiBuZXdD
aGFuZ2VDb3VudCk7CisgICAgdm9pZCBzZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25z
dCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYsIHVpbnQ2NF90IHNpemUsIHVpbnQ2NF90JiBuZXdDaGFu
Z2VDb3VudCk7CiAjZW5kaWYKIAogI2lmICFQTEFURk9STShNQUMpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTU0
NjA5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTM0LDE2ICszNCwxNiBAQCBtZXNzYWdlcyAtPiBXZWJDb250ZXh0
IExlZ2FjeVJlY2VpdmVyIHsKICAgICBHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShXVEY6
OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChW
ZWN0b3I8V1RGOjpTdHJpbmc+IHBhdGhuYW1lcykKICAgICBHZXRQYXN0ZWJvYXJkU3RyaW5nRm9y
VHlwZShXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpTdHJpbmcgcGFzdGVib2FyZFR5
cGUpIC0+IChXVEY6OlN0cmluZyBzdHJpbmcpCiAgICAgR2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5
cGUoV1RGOjpTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFdURjo6U3RyaW5nIHBhc3RlYm9hcmRUeXBl
KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVpbnQ2NF90IHNpemUp
Ci0gICAgUGFzdGVib2FyZENvcHkoV1RGOjpTdHJpbmcgZnJvbVBhc3RlYm9hcmQsIFdURjo6U3Ry
aW5nIHRvUGFzdGVib2FyZCkKKyAgICBQYXN0ZWJvYXJkQ29weShXVEY6OlN0cmluZyBmcm9tUGFz
dGVib2FyZCwgV1RGOjpTdHJpbmcgdG9QYXN0ZWJvYXJkKSAtPiAodWludDY0X3QgY2hhbmdlQ291
bnQpCiAgICAgR2V0UGFzdGVib2FyZENoYW5nZUNvdW50KFdURjo6U3RyaW5nIHBhc3RlYm9hcmRO
YW1lKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCiAgICAgR2V0UGFzdGVib2FyZFVuaXF1ZU5h
bWUoKSAtPiAoV1RGOjpTdHJpbmcgcGFzdGVib2FyZE5hbWUpCiAgICAgR2V0UGFzdGVib2FyZENv
bG9yKFdURjo6U3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAoV2ViQ29yZTo6Q29sb3IgY29sb3Ip
CiAgICAgR2V0UGFzdGVib2FyZFVSTChXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKFdU
Rjo6U3RyaW5nIHVybFN0cmluZykKLSAgICBBZGRQYXN0ZWJvYXJkVHlwZXMoV1RGOjpTdHJpbmcg
cGFzdGVib2FyZE5hbWUsIFZlY3RvcjxXVEY6OlN0cmluZz4gcGFzdGVib2FyZFR5cGVzKQotICAg
IFNldFBhc3RlYm9hcmRUeXBlcyhXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9yPFdU
Rjo6U3RyaW5nPiBwYXN0ZWJvYXJkVHlwZXMpCi0gICAgU2V0UGFzdGVib2FyZFBhdGhuYW1lc0Zv
clR5cGUoV1RGOjpTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFdURjo6U3RyaW5nIHBhc3RlYm9hcmRU
eXBlLCBWZWN0b3I8V1RGOjpTdHJpbmc+IHBhdGhuYW1lcykKLSAgICBTZXRQYXN0ZWJvYXJkU3Ry
aW5nRm9yVHlwZShXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpTdHJpbmcgcGFzdGVi
b2FyZFR5cGUsIFdURjo6U3RyaW5nIHN0cmluZykKLSAgICBTZXRQYXN0ZWJvYXJkQnVmZmVyRm9y
VHlwZShXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpTdHJpbmcgcGFzdGVib2FyZFR5
cGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50NjRfdCBzaXplKQor
ICAgIEFkZFBhc3RlYm9hcmRUeXBlcyhXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9y
PFdURjo6U3RyaW5nPiBwYXN0ZWJvYXJkVHlwZXMpIC0+ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkK
KyAgICBTZXRQYXN0ZWJvYXJkVHlwZXMoV1RGOjpTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFZlY3Rv
cjxXVEY6OlN0cmluZz4gcGFzdGVib2FyZFR5cGVzKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQp
CisgICAgU2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoV1RGOjpTdHJpbmcgcGFzdGVib2Fy
ZE5hbWUsIFdURjo6U3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8V1RGOjpTdHJpbmc+IHBh
dGhuYW1lcykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQorICAgIFNldFBhc3RlYm9hcmRTdHJp
bmdGb3JUeXBlKFdURjo6U3RyaW5nIHBhc3RlYm9hcmROYW1lLCBXVEY6OlN0cmluZyBwYXN0ZWJv
YXJkVHlwZSwgV1RGOjpTdHJpbmcgc3RyaW5nKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCisg
ICAgU2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoV1RGOjpTdHJpbmcgcGFzdGVib2FyZE5hbWUs
IFdURjo6U3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxl
IGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQogI2VuZGlm
CiAKICNpZiAhUExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9XZWJDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV2ViQ29udGV4dE1hYy5tbQkocmV2aXNpb24gMTU0NjA5KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDMs
OSArNDAzLDkgQEAgdm9pZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVAogICAg
IHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpS
ZWFkT25seSk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6cGFzdGVib2FyZENvcHkoY29uc3QgU3Ry
aW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpCit2b2lkIFdl
YkNvbnRleHQ6OnBhc3RlYm9hcmRDb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNv
bnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCiB7Ci0g
ICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHRvUGFzdGVib2FyZCkuY29weShmcm9tUGFzdGVib2FyZCk7
CisgICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQodG9QYXN0ZWJvYXJkKS5j
b3B5KGZyb21QYXN0ZWJvYXJkKTsKIH0KIAogdm9pZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJk
Q2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgdWludDY0X3QmIGNoYW5n
ZUNvdW50KQpAQCAtNDI4LDM1ICs0MjgsMzUgQEAgdm9pZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJv
YXJkVVJMKGNvbnN0IAogICAgIHVybFN0cmluZyA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSkudXJsKCkuc3RyaW5nKCk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6YWRkUGFzdGVi
b2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXN0ZWJvYXJkVHlwZXMpCit2b2lkIFdlYkNvbnRleHQ6OmFkZFBhc3RlYm9hcmRUeXBl
cyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFz
dGVib2FyZFR5cGVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCiB7Ci0gICAgUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5hZGRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOworICAg
IG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5hZGRU
eXBlcyhwYXN0ZWJvYXJkVHlwZXMpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnNldFBhc3RlYm9h
cmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFzdGVib2FyZFR5cGVzKQordm9pZCBXZWJDb250ZXh0OjpzZXRQYXN0ZWJvYXJkVHlwZXMo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3Rl
Ym9hcmRUeXBlcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQogewotICAgIFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0VHlwZXMocGFzdGVib2FyZFR5cGVzKTsKKyAgICBu
ZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0VHlw
ZXMocGFzdGVib2FyZFR5cGVzKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpzZXRQYXN0ZWJvYXJk
UGF0aG5hbWVzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzKQordm9p
ZCBXZWJDb250ZXh0OjpzZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCiB7Ci0gICAg
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRQYXRobmFtZXNGb3JUeXBlKHBh
dGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOworICAgIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywg
cGFzdGVib2FyZFR5cGUpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRTdHJp
bmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBXZWJDb250ZXh0OjpzZXRQ
YXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDY0X3Qm
IG5ld0NoYW5nZUNvdW50KQogewotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFt
ZSkuc2V0U3RyaW5nRm9yVHlwZShzdHJpbmcsIHBhc3RlYm9hcmRUeXBlKTsgICAgCisgICAgbmV3
Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFN0cmlu
Z0ZvclR5cGUoc3RyaW5nLCBwYXN0ZWJvYXJkVHlwZSk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6
c2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUm
IGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkKK3ZvaWQgV2ViQ29udGV4dDo6c2V0UGFzdGVib2FyZEJ1
ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRsZSwgdWludDY0
X3Qgc2l6ZSwgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQogewogICAgIGlmIChoYW5kbGUuaXNO
dWxsKCkpIHsKLSAgICAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRC
dWZmZXJGb3JUeXBlKDAsIHBhc3RlYm9hcmRUeXBlKTsKKyAgICAgICAgbmV3Q2hhbmdlQ291bnQg
PSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUoMCwg
cGFzdGVib2FyZFR5cGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJlZlB0cjxTaGFy
ZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRs
ZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVm
ZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihz
aGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSksIHNpemUpOwotICAgIFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuc2V0QnVmZmVyRm9yVHlwZShidWZmZXIsIHBhc3RlYm9hcmRUeXBl
KTsKKyAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFt
ZSkuc2V0QnVmZmVyRm9yVHlwZShidWZmZXIsIHBhc3RlYm9hcmRUeXBlKTsKIH0KIAogdm9pZCBX
ZWJDb250ZXh0OjpzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tCShyZXZpc2lvbiAxNTQ2MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTY0MSw3ICsxNjQxLDkg
QEAgdm9pZCBQREZQbHVnaW46OndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTgogICAgIGZvciAoTlNT
dHJpbmcgKnR5cGUgaW4gdHlwZXMpCiAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlw
ZSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkVHlwZXMoTlNHZW5lcmFs
UGJvYXJkLCBwYXN0ZWJvYXJkVHlwZXMpLCAwKTsKKyAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3Vu
dDsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZFR5cGVzKE5TR2VuZXJh
bFBib2FyZCwgcGFzdGVib2FyZFR5cGVzKSwKKyAgICAgICAgTWVzc2FnZXM6OldlYkNvbnRleHQ6
OlNldFBhc3RlYm9hcmRUeXBlczo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKIAogICAgIGZv
ciAoTlNVSW50ZWdlciBpID0gMCwgY291bnQgPSBpdGVtcy5jb3VudDsgaSA8IGNvdW50OyArK2kp
IHsKICAgICAgICAgTlNTdHJpbmcgKnR5cGUgPSBbdHlwZXMgb2JqZWN0QXRJbmRleDppXTsKQEAg
LTE2NTUsNyArMTY1Nyw4IEBAIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJk
KE4KIAogICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlw
ZV0gfHwgW3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TUGFzdGVib2FyZFR5cGVTdHJpbmddKSB7CiAg
ICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHBsYWluVGV4dFN0cmluZyA9IGFkb3B0TlMo
W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgZW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddKTsKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkNvbnRleHQ6OlNldFBhc3RlYm9hcmRT
dHJpbmdGb3JUeXBlKE5TR2VuZXJhbFBib2FyZCwgdHlwZSwgcGxhaW5UZXh0U3RyaW5nLmdldCgp
KSwgMCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZFN0
cmluZ0ZvclR5cGUoTlNHZW5lcmFsUGJvYXJkLCB0eXBlLCBwbGFpblRleHRTdHJpbmcuZ2V0KCkp
LAorICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkU3Ry
aW5nRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6
d3JhcE5TRGF0YShkYXRhKTsKIApAQCAtMTY2Niw3ICsxNjY5LDggQEAgdm9pZCBQREZQbHVnaW46
OndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTgogICAgICAgICAgICAgUmVmUHRyPFNoYXJlZE1lbW9y
eT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoYnVmZmVyLT5zaXplKCkpOwog
ICAgICAgICAgICAgbWVtY3B5KHNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwg
YnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUo
aGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkNv
bnRleHQ6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKE5TR2VuZXJhbFBib2FyZCwgdHlwZSwg
aGFuZGxlLCBidWZmZXItPnNpemUoKSksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYkNv
bnRleHQ6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKE5TR2VuZXJhbFBib2FyZCwgdHlwZSwg
aGFuZGxlLCBidWZmZXItPnNpemUoKSksCisgICAgICAgICAgICAgICAgTWVzc2FnZXM6OldlYkNv
bnRleHQ6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCks
IDApOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmNwcAkocmV2aXNpb24gMTU0NjA5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDksMTIgKzQwOSwxNSBAQCBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzdHJp
bmdGb3JUCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6Y29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFz
dGVib2FyZCkKK2xvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb3B5KGNvbnN0IFN0cmluZyYg
ZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkKQogewotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkNvbnRleHQ6OlBhc3RlYm9hcmRDb3B5KGZyb21QYXN0ZWJvYXJkLCB0b1Bhc3RlYm9hcmQp
LCAwKTsKKyAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKKyAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29u
dGV4dDo6UGFzdGVib2FyZENvcHkoZnJvbVBhc3RlYm9hcmQsIHRvUGFzdGVib2FyZCksCisgICAg
ICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpQYXN0ZWJvYXJkQ29weTo6UmVwbHkobmV3Q2hhbmdl
Q291bnQpLCAwKTsKKyAgICByZXR1cm4gbmV3Q2hhbmdlQ291bnQ7CiB9CiAKLWludCBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KGNvbnN0IFdURjo6U3RyaW5nICZwYXN0ZWJvYXJk
TmFtZSkKK2xvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjaGFuZ2VDb3VudChjb25zdCBXVEY6
OlN0cmluZyAmcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgdWludDY0X3QgY2hhbmdlQ291bnQ7CiAg
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYkNvbnRleHQ6OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChwYXN0ZWJv
YXJkTmFtZSksCkBAIC00NDYsMTcgKzQ0OSwyMyBAQCBLVVJMIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6dXJsKGNvbnN0IFN0CiAgICAgcmV0dXJuIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJp
bmcpOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YWRkVHlwZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkKK2xvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjphZGRUeXBlcyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewot
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkNvbnRleHQ6OkFkZFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwg
cGFzdGVib2FyZFR5cGVzKSwgMCk7CisgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7CisgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYkNvbnRleHQ6OkFkZFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwg
cGFzdGVib2FyZFR5cGVzKSwKKyAgICAgICAgTWVzc2FnZXM6OldlYkNvbnRleHQ6OkFkZFBhc3Rl
Ym9hcmRUeXBlczo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICByZXR1cm4gbmV3Q2hh
bmdlQ291bnQ7CiB9CiAKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRUeXBlcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKQorbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFR5cGVzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
CiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmRO
YW1lLCBwYXN0ZWJvYXJkVHlwZXMpLCAwKTsKKyAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsK
KyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmRO
YW1lLCBwYXN0ZWJvYXJkVHlwZXMpLAorICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0
UGFzdGVib2FyZFR5cGVzOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIHJldHVybiBu
ZXdDaGFuZ2VDb3VudDsKIH0KIAotdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldEJ1ZmZl
ckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK2xvbmcgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpzZXRCdWZmZXJGb3JUeXBlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpCiB7CiAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIGlm
IChidWZmZXIpIHsKQEAgLTQ2NCwxNyArNDczLDI2IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpzZXRCdWZmZXJGb3IKICAgICAgICAgbWVtY3B5KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0
YSgpLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwogICAgICAgICBzaGFyZWRNZW1v
cnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwog
ICAgIH0KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShw
YXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIGhhbmRsZSwgYnVmZmVyID8gYnVmZmVyLT5z
aXplKCkgOiAwKSwgMCk7CisgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7CisgICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYkNvbnRleHQ6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1l
LCBwYXN0ZWJvYXJkVHlwZSwgaGFuZGxlLCBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6IDApLAor
ICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGU6
OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgcmV0dXJuIG5ld0NoYW5nZUNvdW50Owog
fQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0UGF0aG5hbWVzRm9yVHlwZShjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQorbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OnNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlw
ZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHBhdGhuYW1lcyksIDApOworICAgIHVp
bnQ2NF90IG5ld0NoYW5nZUNvdW50OworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0
ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHBh
dGhuYW1lcyksCisgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkUGF0
aG5hbWVzRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICByZXR1cm4gbmV3
Q2hhbmdlQ291bnQ7CiB9CiAKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRTdHJpbmdG
b3JUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQorbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OnNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUs
IHBhc3RlYm9hcmRUeXBlLCBzdHJpbmcpLCAwKTsKKyAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3Vu
dDsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUo
cGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlLCBzdHJpbmcpLAorICAgICAgICBNZXNzYWdl
czo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5KG5ld0NoYW5n
ZUNvdW50KSwgMCk7CisgICAgcmV0dXJuIG5ld0NoYW5nZUNvdW50OwogfQogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTU0NjA5KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTcgKzk5LDE3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyRm9yVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0b3I8
U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0cmluZyBzdHJp
bmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGNoYW5nZUNvdW50KGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgbG9uZyBjaGFu
Z2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIFN0cmluZyB1bmlxdWVOYW1lKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpD
b2xvciBjb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIFdlYkNvcmU6OktVUkwgdXJsKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9W
RVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIGNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVi
b2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBhZGRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJ1ZmZlckZv
clR5cGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgbG9uZyBhZGRUeXBlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGxvbmcgc2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBsb25nIGNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwg
Y29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgbG9uZyBz
ZXRCdWZmZXJGb3JUeXBlKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBsb25nIHNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGxvbmcgc2V0U3RyaW5nRm9yVHlw
ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQ2MjkpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MiBAQAorMjAxMy0wOC0yNiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbTWFjXSBjYW4tcmVhZC1pbi1kcmFnc3RhcnQtZXZlbnQuaHRtbCBhbmQgY2FuLXJl
YWQtaW4tY29weS1hbmQtY3V0LWV2ZW50cy5odG1sIGZhaWwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzA5NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJldHVybiBuZXcgcGFzdGVib2FyZCBjaGFuZ2Ug
Y291bnQgZnJvbSBhbGwgZnVuY3Rpb25zIHRoYXQgY2hhbmdlIGl0LgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjb3B5KToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y2hhbmdlQ291
bnQpOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjphZGRUeXBlcyk6CisgICAgICAg
IChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFR5cGVzKToKKyAgICAgICAgKFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6c2V0QnVmZmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OnNldFBhdGhuYW1lc0ZvclR5cGUpOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpzZXRTdHJpbmdGb3JUeXBlKToKKwogMjAxMy0wOC0yNiAgQW5kcmVhcyBLbGluZyAgPGFr
bGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTU0NjA5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgz
LDE3ICs4MywxNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lk
IGdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIGludCBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGxvbmcgY2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHJpbmcgdW5pcXVlTmFtZSgpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29sb3IgY29sb3IoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpLVVJMIHVybChjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBj
b3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJv
YXJkKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkVHlwZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRCdWZmZXJGb3JUeXBlKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhdGhuYW1lc0Zv
clR5cGUoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0U3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGxvbmcgYWRkVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBsb25n
IHNldFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgbG9uZyBjb3B5KGNv
bnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGxvbmcgc2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgbG9uZyBzZXRQ
YXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBsb25nIHNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7
CiB9OwogCiAjZW5kaWYgLy8gV2ViUGxhdGZvcm1TdHJhdGVnaWVzX2gKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMubW0JKHJldmlzaW9uIDE1NDYwOSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDEy
ICsxNzQsMTIgQEAgU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3RyaW5nRm9yVAogICAg
IHJldHVybiBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnN0cmluZ0ZvclR5cGUo
cGFzdGVib2FyZFR5cGUpOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29weShj
b25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkK
K2xvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3Rl
Ym9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkKQogewotICAgIFBsYXRmb3JtUGFzdGVi
b2FyZCh0b1Bhc3RlYm9hcmQpLmNvcHkoZnJvbVBhc3RlYm9hcmQpOworICAgIHJldHVybiBQbGF0
Zm9ybVBhc3RlYm9hcmQodG9QYXN0ZWJvYXJkKS5jb3B5KGZyb21QYXN0ZWJvYXJkKTsKIH0KIAot
aW50IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y2hhbmdlQ291bnQoY29uc3QgU3RyaW5nICZwYXN0
ZWJvYXJkTmFtZSkKK2xvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjaGFuZ2VDb3VudChjb25z
dCBTdHJpbmcgJnBhc3RlYm9hcmROYW1lKQogewogICAgIHJldHVybiBQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNvdW50KCk7CiB9CkBAIC0xOTksMjcgKzE5OSwyNyBA
QCBLVVJMIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6dXJsKGNvbnN0IFN0CiAgICAgcmV0dXJuIFBs
YXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkudXJsKCk7CiB9CiAKLXZvaWQgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjphZGRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2Fy
ZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQorbG9uZyBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmFkZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKS5hZGRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOworICAgIHJldHVybiBQ
bGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmFkZFR5cGVzKHBhc3RlYm9hcmRUeXBl
cyk7CiB9CiAKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRUeXBlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KQorbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0g
ICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRUeXBlcyhwYXN0ZWJvYXJk
VHlwZXMpOworICAgIHJldHVybiBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNl
dFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CiB9CiAKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpzZXRCdWZmZXJGb3JUeXBlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCits
b25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSkuc2V0QnVmZmVyRm9yVHlwZShidWZmZXIsIHBhc3RlYm9hcmRUeXBlKTsKKyAgICBy
ZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRCdWZmZXJGb3JUeXBl
KGJ1ZmZlciwgcGFzdGVib2FyZFR5cGUpOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6c2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KQorbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQo
cGFzdGVib2FyZE5hbWUpLnNldFBhdGhuYW1lc0ZvclR5cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJk
VHlwZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0
UGF0aG5hbWVzRm9yVHlwZShwYXRobmFtZXMsIHBhc3RlYm9hcmRUeXBlKTsKIH0KIAotdm9pZCBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUpCitsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0U3RyaW5nRm9yVHlwZShjb25z
dCBTdHJpbmcmIHN0cmluZywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLnNldFN0cmluZ0ZvclR5cGUoc3RyaW5nLCBwYXN0ZWJvYXJkVHlwZSk7ICAgIAorICAg
IHJldHVybiBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFN0cmluZ0ZvclR5
cGUoc3RyaW5nLCBwYXN0ZWJvYXJkVHlwZSk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>