<?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>173912</bug_id>
          
          <creation_ts>2017-06-28 00:22:19 -0700</creation_ts>
          <short_desc>Safari&apos;s Speedometer score massively regresses when accessibility is enabled</short_desc>
          <delta_ts>2017-07-15 20:54:15 -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>Accessibility</component>
          <version>Safari Technology Preview</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174559</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>manian</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1323466</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 00:22:19 -0700</bug_when>
    <thetext>When the accessibility tree is turned on, we trigger a synchronous layout in HTMLTextFormControlElement::setInnerTextValue. We need to avoid that.

&lt;rdar://problem/32686777&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323468</commentid>
    <comment_count>1</comment_count>
      <attachid>314001</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 00:24:25 -0700</bug_when>
    <thetext>Created attachment 314001
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323469</commentid>
    <comment_count>2</comment_count>
      <attachid>314002</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 00:26:19 -0700</bug_when>
    <thetext>Created attachment 314002
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323732</commentid>
    <comment_count>3</comment_count>
      <attachid>314067</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 16:33:22 -0700</bug_when>
    <thetext>Created attachment 314067
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323734</commentid>
    <comment_count>4</comment_count>
      <attachid>314067</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-06-28 16:37:00 -0700</bug_when>
    <thetext>Comment on attachment 314067
Fixes the bug

View in context: https://bugs.webkit.org/attachment.cgi?id=314067&amp;action=review

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:699
&gt; +    auto *cache = m_object-&gt;axObjectCache();

we probably shouldn&apos;t assert cache here, it is possible to have a null cache (happens when our wrapper outlives the backing object), in which can we should return a nil value</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323738</commentid>
    <comment_count>5</comment_count>
      <attachid>314067</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 16:48:36 -0700</bug_when>
    <thetext>Comment on attachment 314067
Fixes the bug

View in context: https://bugs.webkit.org/attachment.cgi?id=314067&amp;action=review

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:699
&gt;&gt; +    auto *cache = m_object-&gt;axObjectCache();
&gt; 
&gt; we probably shouldn&apos;t assert cache here, it is possible to have a null cache (happens when our wrapper outlives the backing object), in which can we should return a nil value

Okay. I can fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323742</commentid>
    <comment_count>6</comment_count>
      <attachid>314070</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 16:56:36 -0700</bug_when>
    <thetext>Created attachment 314070
Addressed Chris&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323747</commentid>
    <comment_count>7</comment_count>
      <attachid>314070</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-06-28 17:03:22 -0700</bug_when>
    <thetext>Comment on attachment 314070
Addressed Chris&apos;s comment

View in context: https://bugs.webkit.org/attachment.cgi?id=314070&amp;action=review

small suggestions. otherwise change looks ok to me

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2170
&gt; +    textMarkerData.offset = 0;

these few lines should be unnecessary now that you initialize them

&gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:412
&gt; +    if (position.isNotNull()) {

should use early return here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323754</commentid>
    <comment_count>8</comment_count>
      <attachid>314074</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 17:33:48 -0700</bug_when>
    <thetext>Created attachment 314074
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323755</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 17:33:56 -0700</bug_when>
    <thetext>Thanks for the review!

(In reply to chris fleizach from comment #7)
&gt; Comment on attachment 314070 [details]
&gt; Addressed Chris&apos;s comment
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314070&amp;action=review
&gt; 
&gt; small suggestions. otherwise change looks ok to me
&gt; 
&gt; &gt; Source/WebCore/accessibility/AXObjectCache.cpp:2170
&gt; &gt; +    textMarkerData.offset = 0;
&gt; 
&gt; these few lines should be unnecessary now that you initialize them

Removed.

&gt; &gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:412
&gt; &gt; +    if (position.isNotNull()) {
&gt; 
&gt; should use early return here

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323756</commentid>
    <comment_count>10</comment_count>
      <attachid>314074</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 17:34:07 -0700</bug_when>
    <thetext>Comment on attachment 314074
Patch for landing

Wait for EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323757</commentid>
    <comment_count>11</comment_count>
      <attachid>314075</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 17:53:28 -0700</bug_when>
    <thetext>Created attachment 314075
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323758</commentid>
    <comment_count>12</comment_count>
      <attachid>314075</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 17:53:38 -0700</bug_when>
    <thetext>Comment on attachment 314075
Patch for landing

Wait for EWS again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323785</commentid>
    <comment_count>13</comment_count>
      <attachid>314085</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 18:49:15 -0700</bug_when>
    <thetext>Created attachment 314085
Another GTK+/WPE build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323788</commentid>
    <comment_count>14</comment_count>
      <attachid>314087</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 19:00:23 -0700</bug_when>
    <thetext>Created attachment 314087
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323807</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-28 19:54:02 -0700</bug_when>
    <thetext>Committed r218910: &lt;http://trac.webkit.org/changeset/218910&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329304</commentid>
    <comment_count>16</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-15 20:52:31 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #15)
&gt; Committed r218910: &lt;http://trac.webkit.org/changeset/218910&gt;

I am able to hit ASSERT(LayoutDisallowedScope::isLayoutAllowed()), added in this commit, whenever I have VoiceOver enabled and update the value of text field. See bug #174559.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329308</commentid>
    <comment_count>17</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-07-15 20:54:15 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #16)
&gt; (In reply to Ryosuke Niwa from comment #15)
&gt; &gt; Committed r218910: &lt;http://trac.webkit.org/changeset/218910&gt;
&gt; 
&gt; I am able to hit ASSERT(LayoutDisallowedScope::isLayoutAllowed()), added in
&gt; this commit, whenever I have VoiceOver enabled and update the value of text
&gt; field. See bug #174559.

*whenever I have VoiceOver enabled and update the value of a text field from a mouseup event listener.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314001</attachid>
            <date>2017-06-28 00:24:25 -0700</date>
            <delta_ts>2017-06-28 00:26:19 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip173912.patch</filename>
            <type>text/plain</type>
            <size>22116</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCShyZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Bc3NlcnRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBACiAj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9u
cyIKICAgICB2YV9saXN0IGNvcHlPZkFyZ3M7CiAgICAgdmFfY29weShjb3B5T2ZBcmdzLCBhcmdz
KTsKLSAgICBhc2xfdmxvZygwLCAwLCBBU0xfTEVWRUxfTk9USUNFLCBmb3JtYXQsIGNvcHlPZkFy
Z3MpOworLy8gICAgYXNsX3Zsb2coMCwgMCwgQVNMX0xFVkVMX05PVElDRSwgZm9ybWF0LCBjb3B5
T2ZBcmdzKTsKICAgICB2YV9lbmQoY29weU9mQXJncyk7CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCiAjZW5kaWYKQEAgLTE3NSw3ICsxNzUsNyBAQAogc3RhdGljIHZvaWQgdnByaW50Zl9z
dGRlcnJfd2l0aF90cmFpbGluZ19uZXdsaW5lKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBh
cmdzKQogewogICAgIHNpemVfdCBmb3JtYXRMZW5ndGggPSBzdHJsZW4oZm9ybWF0KTsKLSAgICBp
ZiAoZm9ybWF0TGVuZ3RoICYmIGZvcm1hdFtmb3JtYXRMZW5ndGggLSAxXSA9PSAnXG4nKSB7Cisg
ICAgaWYgKGZvcm1hdExlbmd0aCkgewogICAgICAgICB2cHJpbnRmX3N0ZGVycl9jb21tb24oZm9y
bWF0LCBhcmdzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gMjE4ODIyKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1ldGVyRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5saW5lRWxlbWVudEJveC5oIgogI2luY2x1ZGUgIk1h
dGhNTEVsZW1lbnQuaCIKQEAgLTkzLDYgKzk0LDcgQEAKICNpbmNsdWRlICJTVkdFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisj
aW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KIApAQCAtMTI5Myw2ICsxMjk1LDI1IEBA
CiAjZW5kaWYKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRD
b250cm9sLCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGluc2VydGVk
VGV4dCkKK3sKKyAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOworCisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gZ2V0T3JDcmVhdGUoJnRleHRDb250cm9s
KTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBpZiAob2JqZWN0KSB7CisgICAgICAgIGlmIChl
bnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlvbihvYmplY3QpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBvYmplY3QgPSBvYmplY3QtPm9ic2VydmFibGVPYmplY3QoKTsK
KyAgICB9CisKKyAgICBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb25Gb3JU
ZXh0Q29udHJvbChvYmplY3QsIGRlbGV0ZWRUZXh0LCBpbnNlcnRlZFRleHQsIHRleHRDb250cm9s
KTsKKyNlbHNlCisgICAgbm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3Qs
IHRleHRDaGFuZ2VGb3JFZGl0VHlwZShkZWxldGlvblR5cGUpLCBwb3NpdGlvbi5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpLCBkZWxldGVkVGV4dCk7CisgICAgbm9kZVRleHRDaGFuZ2VQbGF0Zm9y
bU5vdGlmaWNhdGlvbihvYmplY3QsIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShpbnNlcnRpb25UeXBl
KSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgaW5zZXJ0ZWRUZXh0KTsKKyNl
bmRpZgorfQorCiBib29sIEFYT2JqZWN0Q2FjaGU6OmVucXVldWVQYXNzd29yZFZhbHVlQ2hhbmdl
Tm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkKIHsKICAgICBpZiAoIWlz
UGFzc3dvcmRGaWVsZE9yQ29udGFpbmVkQnlQYXNzd29yZEZpZWxkKG9iamVjdCkpCkBAIC0yMDgz
LDQ3ICsyMTA0LDc2IEBACiAgICAgcmV0dXJuIHRoaXMtPmdldE9yQ3JlYXRlKGRvbU5vZGUpOwog
fQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9u
KFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zKQorc3RkOjpvcHRpb25hbDxUZXh0TWFya2VyRGF0YT4gQVhPYmplY3RDYWNoZTo6
dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zKQogewotICAgIC8vIFRoaXMgbWVtb3J5IG11c3QgYmUgYnplcm8nZCBzbyBpbnN0
YW5jZXMgb2YgVGV4dE1hcmtlckRhdGEgY2FuIGJlIHRlc3RlZCBmb3IgYnl0ZS1lcXVpdmFsZW5j
ZS4KLSAgICAvLyBUaGlzIGFsc28gYWxsb3dzIGNhbGxlcnMgdG8gY2hlY2sgZm9yIGZhaWx1cmUg
YnkgbG9va2luZyBhdCB0ZXh0TWFya2VyRGF0YSB1cG9uIHJldHVybi4KLSAgICBtZW1zZXQoJnRl
eHRNYXJrZXJEYXRhLCAwLCBzaXplb2YoVGV4dE1hcmtlckRhdGEpKTsKLSAgICAKICAgICBpZiAo
dmlzaWJsZVBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCiAgICAgUG9zaXRpb24gZGVlcFBvcyA9IHZpc2libGVQb3MuZGVl
cEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBkb21Ob2RlID0gZGVlcFBvcy5kZXByZWNhdGVkTm9k
ZSgpOwogICAgIEFTU0VSVChkb21Ob2RlKTsKICAgICBpZiAoIWRvbU5vZGUpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwogICAgIGlmIChpczxI
VE1MSW5wdXRFbGVtZW50PigqZG9tTm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
KmRvbU5vZGUpLmlzUGFzc3dvcmRGaWVsZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKICAgICAvLyBJZiB0aGUgdmlzaWJsZSBwb3NpdGlv
biBoYXMgYW4gYW5jaG9yIHR5cGUgcmVmZXJyaW5nIHRvIGEgbm9kZSBvdGhlciB0aGFuIHRoZSBh
bmNob3JlZCBub2RlLCB3ZSBzaG91bGQKICAgICAvLyBzZXQgdGhlIHRleHQgbWFya2VyIGRhdGEg
d2l0aCBDaGFyYWN0ZXJPZmZzZXQgc28gdGhhdCB0aGUgb2Zmc2V0IHdpbGwgY29ycmVzcG9uZCB0
byB0aGUgbm9kZS4KICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFj
dGVyT2Zmc2V0RnJvbVZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zKTsKICAgICBpZiAoZGVlcFBv
cy5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBkZWVw
UG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW4pIHsK
KyAgICAgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CiAgICAgICAgIHRleHRNYXJr
ZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KHRleHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJPZmZzZXQp
OwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0ZXh0TWFya2VyRGF0YTsKICAgICB9
Ci0gICAgCisKICAgICAvLyBmaW5kIG9yIGNyZWF0ZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCBm
b3IgdGhpcyBub2RlCiAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb21Ob2RlLT5kb2N1bWVu
dCgpLmF4T2JqZWN0Q2FjaGUoKTsKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2Jq
ID0gY2FjaGUtPmdldE9yQ3JlYXRlKGRvbU5vZGUpOwotICAgIAorCisgICAgVGV4dE1hcmtlckRh
dGEgdGV4dE1hcmtlckRhdGE7CiAgICAgdGV4dE1hcmtlckRhdGEuYXhJRCA9IG9iai5nZXQoKS0+
YXhPYmplY3RJRCgpOwogICAgIHRleHRNYXJrZXJEYXRhLm5vZGUgPSBkb21Ob2RlOwogICAgIHRl
eHRNYXJrZXJEYXRhLm9mZnNldCA9IGRlZXBQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsK
ICAgICB0ZXh0TWFya2VyRGF0YS5hZmZpbml0eSA9IHZpc2libGVQb3MuYWZmaW5pdHkoKTsKLSAg
ICAKKwogICAgIHRleHRNYXJrZXJEYXRhLmNoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNl
dC5vZmZzZXQ7CiAgICAgdGV4dE1hcmtlckRhdGEuY2hhcmFjdGVyU3RhcnRJbmRleCA9IGNoYXJh
Y3Rlck9mZnNldC5zdGFydEluZGV4OwotICAgIAorCiAgICAgY2FjaGUtPnNldE5vZGVJblVzZShk
b21Ob2RlKTsKKworICAgIHJldHVybiB0ZXh0TWFya2VyRGF0YTsKIH0KIAorLy8gVGhpcyBmdW5j
dGlvbiBleGl0cyBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0byBhdm9pZCBhIHN5bmNo
cm9ub3VzIGxheW91dC4KK3N0ZDo6b3B0aW9uYWw8VGV4dE1hcmtlckRhdGE+IEFYT2JqZWN0Q2Fj
aGU6OnRleHRNYXJrZXJEYXRhRm9yRmlyc3RQb3NpdGlvbkluVGV4dENvbnRyb2woSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250cm9sKQoreworICAgIFRleHRDb250cm9sSW5uZXJU
ZXh0RWxlbWVudCogaW5uZXJUZXh0RWxlbWVudCA9IHRleHRDb250cm9sLmlubmVyVGV4dEVsZW1l
bnQoKTsKKyAgICBpZiAoIWlubmVyVGV4dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4odGV4dENvbnRyb2wpICYmIGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHRleHRDb250cm9sKS5pc1Bhc3N3b3JkRmllbGQoKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hl
ID0gdGV4dENvbnRyb2wuZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCk7CisgICAgUmVmUHRyPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGNhY2hlLT5nZXRPckNyZWF0ZSgmdGV4dENvbnRyb2wp
OworCisgICAgUG9zaXRpb24gZmlyc3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk5vZGUoaW5u
ZXJUZXh0RWxlbWVudCk7CisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CisgICAg
dGV4dE1hcmtlckRhdGEuYXhJRCA9IG9iai5nZXQoKS0+YXhPYmplY3RJRCgpOworICAgIHRleHRN
YXJrZXJEYXRhLm5vZGUgPSBmaXJzdFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAgICB0ZXh0
TWFya2VyRGF0YS5vZmZzZXQgPSBmaXJzdFBvc2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKTsKKyAgICB0ZXh0TWFya2VyRGF0YS5hZmZpbml0eSA9IERPV05TVFJFQU07CisgICAg
dGV4dE1hcmtlckRhdGEuY2hhcmFjdGVyT2Zmc2V0ID0gMDsKKyAgICB0ZXh0TWFya2VyRGF0YS5j
aGFyYWN0ZXJTdGFydEluZGV4ID0gMDsKKworICAgIGNhY2hlLT5zZXROb2RlSW5Vc2UoJnRleHRD
b250cm9sKTsKKworICAgIEFTU0VSVCh0ZXh0TWFya2VyRGF0YSA9PSB0ZXh0TWFya2VyRGF0YUZv
clZpc2libGVQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbikpKTsKKworICAg
IHJldHVybiB0ZXh0TWFya2VyRGF0YTsKK30KKwogQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2Fj
aGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJP
ZmZzZXQsIGJvb2wgaWdub3JlTmV4dE5vZGVTdGFydCkKIHsKICAgICBpZiAoY2hhcmFjdGVyT2Zm
c2V0LmlzTnVsbCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmgJKHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAK
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgSFRNTEFyZWFFbGVtZW50OworY2xhc3MgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlbmRl
ckJsb2NrOwpAQCAtNTEsMTUgKzUyLDI1IEBACiBjbGFzcyBXaWRnZXQ7CiAKIHN0cnVjdCBUZXh0
TWFya2VyRGF0YSB7Ci0gICAgQVhJRCBheElEOwotICAgIE5vZGUqIG5vZGU7Ci0gICAgaW50IG9m
ZnNldDsKLSAgICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleDsKLSAgICBpbnQgY2hhcmFjdGVyT2Zm
c2V0OwotICAgIGJvb2wgaWdub3JlZDsKLSAgICBFQWZmaW5pdHkgYWZmaW5pdHk7CisgICAgQVhJ
RCBheElEIHsgMCB9OworICAgIE5vZGUqIG5vZGUgeyBudWxscHRyIH07CisgICAgaW50IG9mZnNl
dCB7IDAgfTsKKyAgICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleCB7IDAgfTsKKyAgICBpbnQgY2hh
cmFjdGVyT2Zmc2V0IHsgMCB9OworICAgIGJvb2wgaWdub3JlZCB7IGZhbHNlIH07CisgICAgRUFm
ZmluaXR5IGFmZmluaXR5IHsgRE9XTlNUUkVBTSB9OwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUZXh0TWFya2VyRGF0YSYgYSwgY29uc3QgVGV4dE1hcmtlckRhdGEmIGIpCit7
CisgICAgcmV0dXJuIGEuYXhJRCA9PSBiLmF4SUQKKyAgICAgICAgJiYgYS5ub2RlID09IGIubm9k
ZQorICAgICAgICAmJiBhLm9mZnNldCA9PSBiLm9mZnNldAorICAgICAgICAmJiBhLmNoYXJhY3Rl
clN0YXJ0SW5kZXggPT0gYi5jaGFyYWN0ZXJTdGFydEluZGV4CisgICAgICAgICYmIGEuaWdub3Jl
ZCA9PSBiLmlnbm9yZWQKKyAgICAgICAgJiYgYS5hZmZpbml0eSA9PSBiLmFmZmluaXR5OworfQor
CiBzdHJ1Y3QgQ2hhcmFjdGVyT2Zmc2V0IHsKICAgICBOb2RlKiBub2RlOwogICAgIGludCBzdGFy
dEluZGV4OwpAQCAtMjEyLDcgKzIyMyw4IEBACiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ZWN0RnJvbUFYSUQoQVhJRCBpZCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RzLmdldChpZCk7IH0K
IAogICAgIC8vIFRleHQgbWFya2VyIHV0aWxpdGllcy4KLSAgICB2b2lkIHRleHRNYXJrZXJEYXRh
Rm9yVmlzaWJsZVBvc2l0aW9uKFRleHRNYXJrZXJEYXRhJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
Jik7CisgICAgc3RkOjpvcHRpb25hbDxUZXh0TWFya2VyRGF0YT4gdGV4dE1hcmtlckRhdGFGb3JW
aXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisgICAgc3RkOjpvcHRpb25h
bDxUZXh0TWFya2VyRGF0YT4gdGV4dE1hcmtlckRhdGFGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29u
dHJvbChIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYpOwogICAgIHZvaWQgdGV4dE1hcmtlckRh
dGFGb3JDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZz
ZXQmKTsKICAgICB2b2lkIHRleHRNYXJrZXJEYXRhRm9yTmV4dENoYXJhY3Rlck9mZnNldChUZXh0
TWFya2VyRGF0YSYsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIHZvaWQgdGV4dE1hcmtl
ckRhdGFGb3JQcmV2aW91c0NoYXJhY3Rlck9mZnNldChUZXh0TWFya2VyRGF0YSYsIGNvbnN0IENo
YXJhY3Rlck9mZnNldCYpOwpAQCAtMzAwLDYgKzMxMiw3IEBACiAKICAgICB2b2lkIHBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBlLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2b2lkIHBvc3RUZXh0UmVwbGFjZW1l
bnROb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBlIGRlbGV0aW9uVHlwZSwgY29uc3Qg
U3RyaW5nJiBkZWxldGVkVGV4dCwgQVhUZXh0RWRpdFR5cGUgaW5zZXJ0aW9uVHlwZSwgY29uc3Qg
U3RyaW5nJiBpbnNlcnRlZFRleHQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAgIHZvaWQg
cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5n
JiBpbnNlcnRlZFRleHQpOwogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGNvbnN0
IFBvc2l0aW9uJiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0TGl2ZVJlZ2lvbkNoYW5nZU5vdGlmaWNhdGlvbihB
Y2Nlc3NpYmlsaXR5T2JqZWN0Kik7CkBAIC0zMzcsNiArMzUwLDcgQEAKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlUGxhdGZv
cm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFYVGV4dEVkaXRUeXBlLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKyAgICB2b2lkIHBvc3RUZXh0UmVw
bGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEFjY2Vzc2liaWxpdHlP
YmplY3QqLCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGluc2VydGVk
VGV4dCwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmKTsKICAgICB2b2lkIHBvc3RUZXh0UmVw
bGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhUZXh0
RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIEFYVGV4dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICNlbHNlCiAgICAgc3RhdGljIEFYVGV4dENoYW5nZSB0
ZXh0Q2hhbmdlRm9yRWRpdFR5cGUoQVhUZXh0RWRpdFR5cGUpOwpAQCAtNDk5LDYgKzUxMyw3IEBA
CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKE5vZGUqLCBjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBv
c3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBlLCBjb25z
dCBTdHJpbmcmLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJikgeyB9CitpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2Vt
ZW50Tm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbCYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
cG9zdE5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgRG9jdW1lbnQqLCBBWE5vdGlm
aWNhdGlvbiwgUG9zdFRhcmdldCwgUG9zdFR5cGUpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RD
YWNoZTo6cG9zdE5vdGlmaWNhdGlvbihSZW5kZXJPYmplY3QqLCBBWE5vdGlmaWNhdGlvbiwgUG9z
dFRhcmdldCwgUG9zdFR5cGUpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdE5v
dGlmaWNhdGlvbihOb2RlKiwgQVhOb3RpZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhP
YmplY3RDYWNoZUlPUy5tbQkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDYgKzExMywxMSBAQAogICAgIHBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIEFYVmFs
dWVDaGFuZ2VkKTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50
UGxhdGZvcm1Ob3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50JikKK3sKKyAgICBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCBBWFZhbHVl
Q2hhbmdlZCk7Cit9CisKIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0
Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheEZyYW1lT2JqZWN0LCBBWExv
YWRpbmdFdmVudCBsb2FkaW5nRXZlbnQpCiB7CiAgICAgaWYgKCFheEZyYW1lT2JqZWN0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDIxODgy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwxMCBAQAog
CiArIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrZXJXaXRoVmlzaWJsZVBv
c2l0aW9uOihWaXNpYmxlUG9zaXRpb24mKXZpc2libGVQb3MgY2FjaGU6KEFYT2JqZWN0Q2FjaGUq
KWNhY2hlCiB7Ci0gICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0gICAgY2FjaGUt
PnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2aXNpYmxl
UG9zKTsKLSAgICAKLSAgICByZXR1cm4gW1tbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxs
b2NdIGluaXRXaXRoVGV4dE1hcmtlcjomdGV4dE1hcmtlckRhdGEgY2FjaGU6Y2FjaGVdIGF1dG9y
ZWxlYXNlXTsKKyAgICBhdXRvIHRleHRNYXJrZXJEYXRhID0gY2FjaGUtPnRleHRNYXJrZXJEYXRh
Rm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2aXNpYmxlUG9zKTsKKyAgICBpZiAo
IXRleHRNYXJrZXJEYXRhKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1tXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBhbGxvY10gaW5pdFdpdGhUZXh0TWFya2VyOiZ0ZXh0TWFy
a2VyRGF0YS52YWx1ZSgpIGNhY2hlOmNhY2hlXSBhdXRvcmVsZWFzZV07CiB9CiAKICsgKFdlYkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlcldpdGhDaGFyYWN0ZXJPZmZzZXQ6KENo
YXJhY3Rlck9mZnNldCYpY2hhcmFjdGVyT2Zmc2V0IGNhY2hlOihBWE9iamVjdENhY2hlKiljYWNo
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9i
amVjdENhY2hlTWFjLm1tCShyZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDcs
OCArNDA3LDIzIEBACiAgICAgW3VzZXJJbmZvIHJlbGVhc2VdOwogfQogCi1zdGF0aWMgTlNEaWN0
aW9uYXJ5ICp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iamVjdCwgQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCitzdGF0aWMgdm9pZCBhZGRUZXh0TWFya2Vy
Rm9yKE5TTXV0YWJsZURpY3Rpb25hcnkqIGNoYW5nZSwgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2Jq
ZWN0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogeworICAgIGlmIChwb3NpdGlv
bi5pc05vdE51bGwoKSkgeworICAgICAgICBpZiAoaWQgdGV4dE1hcmtlciA9IFtvYmplY3Qud3Jh
cHBlcigpIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246cG9zaXRpb25dKQorICAgICAgICAg
ICAgW2NoYW5nZSBzZXRPYmplY3Q6dGV4dE1hcmtlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4
dENoYW5nZVZhbHVlU3RhcnRNYXJrZXJdOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWRkVGV4
dE1hcmtlckZvcihOU011dGFibGVEaWN0aW9uYXJ5KiBjaGFuZ2UsIEFjY2Vzc2liaWxpdHlPYmpl
Y3QmIG9iamVjdCwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250cm9sKQorewor
ICAgIGlmIChpZCB0ZXh0TWFya2VyID0gW29iamVjdC53cmFwcGVyKCkgdGV4dE1hcmtlckZvckZp
cnN0UG9zaXRpb25JblRleHRDb250cm9sOnRleHRDb250cm9sXSkKKyAgICAgICAgW2NoYW5nZSBz
ZXRPYmplY3Q6dGV4dE1hcmtlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVl
U3RhcnRNYXJrZXJdOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dE1hcmtlclRhcmdldFR5
cGU+CitzdGF0aWMgTlNEaWN0aW9uYXJ5ICp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5
KEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIFRleHRNYXJrZXJUYXJnZXRUeXBlJiBtYXJrZXJUYXJnZXQpCit7CiAg
ICAgTlNTdHJpbmcgKnRleHQgPSAoTlNTdHJpbmcgKilzdHJpbmc7CiAgICAgTlNVSW50ZWdlciBs
ZW5ndGggPSBbdGV4dCBsZW5ndGhdOwogICAgIGlmICghbGVuZ3RoKQpAQCAtNDIwLDEwICs0MzUs
NyBAQAogICAgICAgICB0ZXh0ID0gW3RleHQgc3Vic3RyaW5nVG9JbmRleDpBWFZhbHVlQ2hhbmdl
VHJ1bmNhdGlvbkxlbmd0aF07CiAgICAgfQogICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHQgZm9y
S2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZV07Ci0gICAgaWYgKHBvc2l0aW9uLmlz
Tm90TnVsbCgpKSB7Ci0gICAgICAgIGlmIChpZCB0ZXh0TWFya2VyID0gW29iamVjdC0+d3JhcHBl
cigpIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246cG9zaXRpb25dKQotICAgICAgICAgICAg
W2NoYW5nZSBzZXRPYmplY3Q6dGV4dE1hcmtlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENo
YW5nZVZhbHVlU3RhcnRNYXJrZXJdOwotICAgIH0KKyAgICBhZGRUZXh0TWFya2VyRm9yKGNoYW5n
ZSwgb2JqZWN0LCBtYXJrZXJUYXJnZXQpOwogICAgIHJldHVybiBbY2hhbmdlIGF1dG9yZWxlYXNl
XTsKIH0KIApAQCAtNDM1LDYgKzQ0NywyMyBAQAogICAgIHBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0
Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIEFYVGV4dEVkaXRUeXBlVW5rbm93biwgZW1wdHlTdHJp
bmcoKSwgdHlwZSwgdGV4dCwgcG9zaXRpb24pOwogfQogCitzdGF0aWMgdm9pZCBwb3N0VXNlcklu
Zm9Gb3JDaGFuZ2VzKEFjY2Vzc2liaWxpdHlPYmplY3QmIHJvb3RXZWJBcmVhLCBBY2Nlc3NpYmls
aXR5T2JqZWN0JiBvYmplY3QsIE5TTXV0YWJsZUFycmF5KiBjaGFuZ2VzKQoreworICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkgKnVzZXJJbmZvID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5OjRdOworICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6QChwbGF0Zm9ybUNo
YW5nZVR5cGVGb3JXZWJDb3JlQ2hhbmdlVHlwZShBWFRleHRTdGF0ZUNoYW5nZVR5cGVFZGl0KSkg
Zm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRTdGF0ZUNoYW5nZVR5cGVLZXldOworICAgIGlmIChj
aGFuZ2VzLmNvdW50KQorICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OmNoYW5nZXMgZm9yS2V5
Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZXNdOworCisgICAgaWYgKGlkIHdyYXBwZXIg
PSBvYmplY3Qud3JhcHBlcigpKQorICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OndyYXBwZXIg
Zm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFuZ2VFbGVtZW50XTsKKworICAgIEFYUG9zdE5v
dGlmaWNhdGlvbldpdGhVc2VySW5mbyhyb290V2ViQXJlYS53cmFwcGVyKCksIE5TQWNjZXNzaWJp
bGl0eVZhbHVlQ2hhbmdlZE5vdGlmaWNhdGlvbiwgdXNlckluZm8pOworICAgIGlmIChyb290V2Vi
QXJlYS53cmFwcGVyKCkgIT0gb2JqZWN0LndyYXBwZXIoKSkKKyAgICAgICAgQVhQb3N0Tm90aWZp
Y2F0aW9uV2l0aFVzZXJJbmZvKG9iamVjdC53cmFwcGVyKCksIE5TQWNjZXNzaWJpbGl0eVZhbHVl
Q2hhbmdlZE5vdGlmaWNhdGlvbiwgdXNlckluZm8pOworCisgICAgW3VzZXJJbmZvIHJlbGVhc2Vd
OworfQorCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5v
dGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIEFYVGV4dEVkaXRUeXBlIGRl
bGV0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgQVhUZXh0RWRpdFR5cGUgaW5z
ZXJ0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKCFvYmplY3QpCkBAIC00NDMsMjYgKzQ3MiwzMCBA
QAogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICp1c2VySW5mbyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTo0XTsKLSAgICBbdXNlckluZm8gc2V0T2JqZWN0OkAocGxhdGZvcm1DaGFuZ2VUeXBl
Rm9yV2ViQ29yZUNoYW5nZVR5cGUoQVhUZXh0U3RhdGVDaGFuZ2VUeXBlRWRpdCkpIGZvcktleTpO
U0FjY2Vzc2liaWxpdHlUZXh0U3RhdGVDaGFuZ2VUeXBlS2V5XTsKLQogICAgIE5TTXV0YWJsZUFy
cmF5ICpjaGFuZ2VzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eToy
XTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VE
aWN0aW9uYXJ5KG9iamVjdCwgZGVsZXRpb25UeXBlLCBkZWxldGVkVGV4dCwgcG9zaXRpb24pKQor
ICAgIGlmIChOU0RpY3Rpb25hcnkgKmNoYW5nZSA9IHRleHRSZXBsYWNlbWVudENoYW5nZURpY3Rp
b25hcnkoKm9iamVjdCwgZGVsZXRpb25UeXBlLCBkZWxldGVkVGV4dCwgcG9zaXRpb24pKQogICAg
ICAgICBbY2hhbmdlcyBhZGRPYmplY3Q6Y2hhbmdlXTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpj
aGFuZ2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KG9iamVjdCwgaW5zZXJ0aW9u
VHlwZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbikpCisgICAgaWYgKE5TRGljdGlvbmFyeSAqY2hh
bmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeSgqb2JqZWN0LCBpbnNlcnRpb25U
eXBlLCBpbnNlcnRlZFRleHQsIHBvc2l0aW9uKSkKICAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0
OmNoYW5nZV07Ci0gICAgaWYgKGNoYW5nZXMuY291bnQpCi0gICAgICAgIFt1c2VySW5mbyBzZXRP
YmplY3Q6Y2hhbmdlcyBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVlc107Cisg
ICAgcG9zdFVzZXJJbmZvRm9yQ2hhbmdlcygqcm9vdFdlYkFyZWEoKSwgKm9iamVjdCwgY2hhbmdl
cyk7CiAgICAgW2NoYW5nZXMgcmVsZWFzZV07Cit9CiAKLSAgICBpZiAoaWQgd3JhcHBlciA9IG9i
amVjdC0+d3JhcHBlcigpKQotICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OndyYXBwZXIgZm9y
S2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFuZ2VFbGVtZW50XTsKK3ZvaWQgQVhPYmplY3RDYWNo
ZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wo
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBj
b25zdCBTdHJpbmcmIGluc2VydGVkVGV4dCwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRl
eHRDb250cm9sKQoreworICAgIGlmICghb2JqZWN0KQorICAgICAgICBvYmplY3QgPSByb290V2Vi
QXJlYSgpOwogCi0gICAgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKHJvb3RXZWJBcmVh
KCktPndyYXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0aW9uLCB1
c2VySW5mbyk7Ci0gICAgaWYgKHJvb3RXZWJBcmVhKCktPndyYXBwZXIoKSAhPSBvYmplY3QtPndy
YXBwZXIoKSkKLSAgICAgICAgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKG9iamVjdC0+
d3JhcHBlcigpLCBOU0FjY2Vzc2liaWxpdHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb24sIHVzZXJJ
bmZvKTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgW3VzZXJJbmZv
IHJlbGVhc2VdOworICAgIE5TTXV0YWJsZUFycmF5ICpjaGFuZ2VzID0gW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eToyXTsKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFu
Z2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KCpvYmplY3QsIEFYVGV4dEVkaXRU
eXBlRGVsZXRlLCBkZWxldGVkVGV4dCwgdGV4dENvbnRyb2wpKQorICAgICAgICBbY2hhbmdlcyBh
ZGRPYmplY3Q6Y2hhbmdlXTsKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVw
bGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KCpvYmplY3QsIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCBp
bnNlcnRlZFRleHQsIHRleHRDb250cm9sKSkKKyAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNo
YW5nZV07CisgICAgcG9zdFVzZXJJbmZvRm9yQ2hhbmdlcygqcm9vdFdlYkFyZWEoKSwgKm9iamVj
dCwgY2hhbmdlcyk7CisgICAgW2NoYW5nZXMgcmVsZWFzZV07CiB9CiAKIHZvaWQgQVhPYmplY3RD
YWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBheEZyYW1lT2JqZWN0LCBBWExvYWRpbmdFdmVudCBsb2FkaW5nRXZlbnQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAkocmV2aXNpb24gMjE4ODIy
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIHN0cnVj
dCBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWE7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgRmxv
YXRQb2ludDsKK2NsYXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OwogY2xhc3MgUGF0aDsK
IGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAtIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJs
ZVBvc2l0aW9uczooY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJilzdGFydFBvc2l0aW9u
IGVuZFBvc2l0aW9uOihjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mKWVuZFBvc2l0aW9u
OwogLSAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjooY29uc3QgV2ViQ29yZTo6Vmlz
aWJsZVBvc2l0aW9uJil2aXNpYmxlUG9zOworLSAoaWQpdGV4dE1hcmtlckZvckZpcnN0UG9zaXRp
b25JblRleHRDb250cm9sOihXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYpdGV4
dENvbnRyb2w7CiAKIC8vIFdoZW4gYSBwbHVnaW4gdXNlcyBhIFdlYktpdCBjb250cm9sIHRvIGFj
dCBhcyBhIHN1cnJvZ2F0ZSB2aWV3IChlLmcuIFBERiB1c2UgV2ViS2l0IHRvIGNyZWF0ZSB0ZXh0
IGZpZWxkcykuCiAtIChpZClhc3NvY2lhdGVkUGx1Z2luUGFyZW50OwpJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02ODEsMTMgKzY4MSwxMiBAQAogc3RhdGljIGlkIHRl
eHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKIHsKICAgICBBU1NFUlQoY2FjaGUpOwotICAgIAot
ICAgIFRleHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOwotICAgIGNhY2hlLT50ZXh0TWFya2Vy
RGF0YUZvclZpc2libGVQb3NpdGlvbih0ZXh0TWFya2VyRGF0YSwgdmlzaWJsZVBvcyk7Ci0gICAg
aWYgKCF0ZXh0TWFya2VyRGF0YS5heElEKQorCisgICAgYXV0byB0ZXh0TWFya2VyRGF0YSA9IGNh
Y2hlLT50ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zKTsKKyAgICBp
ZiAoIXRleHRNYXJrZXJEYXRhKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIHJldHVy
biBDRkJyaWRnaW5nUmVsZWFzZSh3a0NyZWF0ZUFYVGV4dE1hcmtlcigmdGV4dE1hcmtlckRhdGEs
IHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKTsKKworICAgIHJldHVybiBDRkJyaWRnaW5nUmVsZWFz
ZSh3a0NyZWF0ZUFYVGV4dE1hcmtlcigmdGV4dE1hcmtlckRhdGEudmFsdWUoKSwgc2l6ZW9mKHRl
eHRNYXJrZXJEYXRhLnZhbHVlKCkpKSk7CiB9CiAKIC0gKGlkKXRleHRNYXJrZXJGb3JWaXNpYmxl
UG9zaXRpb246KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKXZpc2libGVQb3MKQEAgLTY5NSw2ICs2
OTQsMTggQEAKICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihtX29iamVj
dC0+YXhPYmplY3RDYWNoZSgpLCB2aXNpYmxlUG9zKTsKIH0KIAorLSAoaWQpdGV4dE1hcmtlckZv
ckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOihIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCAm
KXRleHRDb250cm9sCit7CisgICAgYXV0byAqY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpOworICAgIEFTU0VSVChjYWNoZSk7CisKKyAgICBhdXRvIHRleHRNYXJrZXJEYXRhID0gY2Fj
aGUtPnRleHRNYXJrZXJEYXRhRm9yRmlyc3RQb3NpdGlvbkluVGV4dENvbnRyb2wodGV4dENvbnRy
b2wpOworICAgIGlmICghdGV4dE1hcmtlckRhdGEpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2Uod2tDcmVhdGVBWFRleHRNYXJrZXIoJnRleHRNYXJr
ZXJEYXRhLnZhbHVlKCksIHNpemVvZih0ZXh0TWFya2VyRGF0YS52YWx1ZSgpKSkpOworfQorCiBz
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhPYmpl
Y3RDYWNoZSogY2FjaGUsIENGVHlwZVJlZiB0ZXh0TWFya2VyKQogewogICAgIEFTU0VSVChjYWNo
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmNwcAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OSw3ICs1
NDksNyBAQAogCiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRW
YWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxl
bWVudCogaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgpOworICAgIFJlZlB0cjxUZXh0Q29u
dHJvbElubmVyVGV4dEVsZW1lbnQ+IGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKICAg
ICBpZiAoIWlubmVyVGV4dCkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NzcsNyArNTc3LDggQEAK
ICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBpZiAo
dGV4dElzQ2hhbmdlZCAmJiByZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBpZiAoQVhPYmplY3RD
YWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQotICAgICAg
ICAgICAgICAgIGNhY2hlLT5wb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uKHRoaXMsIEFY
VGV4dEVkaXRUeXBlRGVsZXRlLCBwcmV2aW91c1ZhbHVlLCBBWFRleHRFZGl0VHlwZUluc2VydCwg
dmFsdWUsIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbih0aGlzLCBQb3NpdGlvbjo6UG9zaXRpb25J
c0JlZm9yZUFuY2hvcikpKTsKKy8vICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0VGV4dFJlcGxh
Y2VtZW50Tm90aWZpY2F0aW9uKHRoaXMsIEFYVGV4dEVkaXRUeXBlRGVsZXRlLCBwcmV2aW91c1Zh
bHVlLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdmFsdWUsIFZpc2libGVQb3NpdGlvbihQb3NpdGlv
bih0aGlzLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcikpKTsKKyAgICAgICAgICAg
ICAgICBjYWNoZS0+cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9s
KCp0aGlzLCBwcmV2aW91c1ZhbHVlLCB2YWx1ZSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314002</attachid>
            <date>2017-06-28 00:26:19 -0700</date>
            <delta_ts>2017-06-28 16:33:21 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>10529</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUg
IkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE1ldGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5saW5lRWxlbWVu
dEJveC5oIgogI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKQEAgLTEyOTMsNiArMTI5NCwyNSBA
QAogI2VuZGlmCiB9CiAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudE5v
dGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiB0ZXh0
Q29udHJvbCwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRl
ZFRleHQsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBzdG9wQ2FjaGluZ0NvbXB1
dGVkT2JqZWN0QXR0cmlidXRlcygpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0
ID0gZ2V0T3JDcmVhdGUoJnRleHRDb250cm9sKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBp
ZiAob2JqZWN0KSB7CisgICAgICAgIGlmIChlbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlm
aWNhdGlvbihvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBvYmplY3QgPSBv
YmplY3QtPm9ic2VydmFibGVPYmplY3QoKTsKKyAgICB9CisKKyAgICBwb3N0VGV4dFJlcGxhY2Vt
ZW50UGxhdGZvcm1Ob3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChvYmplY3QsIGRlbGV0ZWRUZXh0
LCBpbnNlcnRlZFRleHQsIHBvc2l0aW9uKTsKKyNlbHNlCisgICAgbm9kZVRleHRDaGFuZ2VQbGF0
Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShkZWxldGlvblR5
cGUpLCBwb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBkZWxldGVkVGV4dCk7Cisg
ICAgbm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIHRleHRDaGFuZ2VG
b3JFZGl0VHlwZShpbnNlcnRpb25UeXBlKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgaW5zZXJ0ZWRUZXh0KTsKKyNlbmRpZgorfQorCiBib29sIEFYT2JqZWN0Q2FjaGU6OmVu
cXVldWVQYXNzd29yZFZhbHVlQ2hhbmdlTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iamVjdCkKIHsKICAgICBpZiAoIWlzUGFzc3dvcmRGaWVsZE9yQ29udGFpbmVkQnlQYXNzd29y
ZEZpZWxkKG9iamVjdCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAK
IAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQ7CitjbGFzcyBIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVu
ZGVyQmxvY2s7CkBAIC0zMDAsNiArMzAxLDcgQEAKIAogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNo
YW5nZU5vdGlmaWNhdGlvbihOb2RlKiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOwogICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlm
aWNhdGlvbihOb2RlKiwgQVhUZXh0RWRpdFR5cGUgZGVsZXRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGRlbGV0ZWRUZXh0LCBBWFRleHRFZGl0VHlwZSBpbnNlcnRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGluc2VydGVkVGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisgICAgdm9pZCBwb3N0VGV4
dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGluc2Vy
dGVkVGV4dCwgY29uc3QgUG9zaXRpb24mKTsKICAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VO
b3RpZmljYXRpb24oTm9kZSosIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNh
dGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQgcG9zdExpdmVSZWdpb25DaGFuZ2VOb3Rp
ZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCopOwpAQCAtMzM3LDYgKzMzOSw3IEBACiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlUGxhdGZvcm1Ob3Rp
ZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50
ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNo
YW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRleHRFZGl0
VHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisgICAgdm9pZCBw
b3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5n
JiBpbnNlcnRlZFRleHQsIGNvbnN0IFBvc2l0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFJlcGxh
Y2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFYVGV4dEVk
aXRUeXBlLCBjb25zdCBTdHJpbmcmLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJik7CiAjZWxzZQogICAgIHN0YXRpYyBBWFRleHRDaGFuZ2UgdGV4
dENoYW5nZUZvckVkaXRUeXBlKEFYVGV4dEVkaXRUeXBlKTsKQEAgLTQ5OSw2ICs1MDIsNyBAQAog
aW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0
VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSwgY29uc3Qg
U3RyaW5nJiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpIHsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVu
dE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2wmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKSB7IH0KIGlubGlu
ZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVj
dCosIERvY3VtZW50KiwgQVhOb3RpZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0K
IGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0
KiwgQVhOb3RpZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGluZSB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oTm9kZSosIEFYTm90aWZpY2F0aW9uLCBQ
b3N0VGFyZ2V0LCBQb3N0VHlwZSkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0JKHJldmlzaW9uIDIxODgyMikK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTQwNyw4ICs0MDcsMTkgQEAKICAgICBbdXNlckluZm8gcmVsZWFz
ZV07CiB9CiAKLXN0YXRpYyBOU0RpY3Rpb25hcnkgKnRleHRSZXBsYWNlbWVudENoYW5nZURpY3Rp
b25hcnkoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBBWFRleHRFZGl0VHlwZSB0eXBlLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKK3N0
YXRpYyBpZCB0ZXh0TWFya2VyRm9yUG9zaXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogeworICAgIHJldHVybiBbb2JqZWN0
LndyYXBwZXIoKSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnBvc2l0aW9uXTsKK30KKwor
c3RhdGljIGlkIHRleHRNYXJrZXJGb3JQb3NpdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgY29u
c3QgUG9zaXRpb24mKQoreworICAgIHJldHVybiBuaWw7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBQb3NpdGlvblR5cGU+CitzdGF0aWMgTlNEaWN0aW9uYXJ5ICp0ZXh0UmVwbGFjZW1lbnRDaGFu
Z2VEaWN0aW9uYXJ5KEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgQVhUZXh0RWRpdFR5cGUg
dHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFBvc2l0aW9uVHlwZSYgcG9zaXRpb24p
Cit7CiAgICAgTlNTdHJpbmcgKnRleHQgPSAoTlNTdHJpbmcgKilzdHJpbmc7CiAgICAgTlNVSW50
ZWdlciBsZW5ndGggPSBbdGV4dCBsZW5ndGhdOwogICAgIGlmICghbGVuZ3RoKQpAQCAtNDIxLDcg
KzQzMiw3IEBACiAgICAgfQogICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHQgZm9yS2V5Ok5TQWNj
ZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZV07CiAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgp
KSB7Ci0gICAgICAgIGlmIChpZCB0ZXh0TWFya2VyID0gW29iamVjdC0+d3JhcHBlcigpIHRleHRN
YXJrZXJGb3JWaXNpYmxlUG9zaXRpb246cG9zaXRpb25dKQorICAgICAgICBpZiAoaWQgdGV4dE1h
cmtlciA9IHRleHRNYXJrZXJGb3JQb3NpdGlvbihvYmplY3QsIHBvc2l0aW9uKSkKICAgICAgICAg
ICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHRNYXJrZXIgZm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRl
eHRDaGFuZ2VWYWx1ZVN0YXJ0TWFya2VyXTsKICAgICB9CiAgICAgcmV0dXJuIFtjaGFuZ2UgYXV0
b3JlbGVhc2VdOwpAQCAtNDM1LDYgKzQ0NiwyMyBAQAogICAgIHBvc3RUZXh0UmVwbGFjZW1lbnRQ
bGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIEFYVGV4dEVkaXRUeXBlVW5rbm93biwgZW1wdHlT
dHJpbmcoKSwgdHlwZSwgdGV4dCwgcG9zaXRpb24pOwogfQogCitzdGF0aWMgdm9pZCBwb3N0VXNl
ckluZm9Gb3JDaGFuZ2VzKEFjY2Vzc2liaWxpdHlPYmplY3QmIHJvb3RXZWJBcmVhLCBBY2Nlc3Np
YmlsaXR5T2JqZWN0JiBvYmplY3QsIE5TTXV0YWJsZUFycmF5KiBjaGFuZ2VzKQoreworICAgIE5T
TXV0YWJsZURpY3Rpb25hcnkgKnVzZXJJbmZvID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5OjRdOworICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6QChwbGF0Zm9y
bUNoYW5nZVR5cGVGb3JXZWJDb3JlQ2hhbmdlVHlwZShBWFRleHRTdGF0ZUNoYW5nZVR5cGVFZGl0
KSkgZm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRTdGF0ZUNoYW5nZVR5cGVLZXldOworICAgIGlm
IChjaGFuZ2VzLmNvdW50KQorICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OmNoYW5nZXMgZm9y
S2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZXNdOworCisgICAgaWYgKGlkIHdyYXBw
ZXIgPSBvYmplY3Qud3JhcHBlcigpKQorICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OndyYXBw
ZXIgZm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFuZ2VFbGVtZW50XTsKKworICAgIEFYUG9z
dE5vdGlmaWNhdGlvbldpdGhVc2VySW5mbyhyb290V2ViQXJlYS53cmFwcGVyKCksIE5TQWNjZXNz
aWJpbGl0eVZhbHVlQ2hhbmdlZE5vdGlmaWNhdGlvbiwgdXNlckluZm8pOworICAgIGlmIChyb290
V2ViQXJlYS53cmFwcGVyKCkgIT0gb2JqZWN0LndyYXBwZXIoKSkKKyAgICAgICAgQVhQb3N0Tm90
aWZpY2F0aW9uV2l0aFVzZXJJbmZvKG9iamVjdC53cmFwcGVyKCksIE5TQWNjZXNzaWJpbGl0eVZh
bHVlQ2hhbmdlZE5vdGlmaWNhdGlvbiwgdXNlckluZm8pOworCisgICAgW3VzZXJJbmZvIHJlbGVh
c2VdOworfQorCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0Zm9y
bU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIEFYVGV4dEVkaXRUeXBl
IGRlbGV0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgQVhUZXh0RWRpdFR5cGUg
aW5zZXJ0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKCFvYmplY3QpCkBAIC00NDMsMjYgKzQ3MSwz
MCBAQAogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBOU011dGFibGVE
aWN0aW9uYXJ5ICp1c2VySW5mbyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdp
dGhDYXBhY2l0eTo0XTsKLSAgICBbdXNlckluZm8gc2V0T2JqZWN0OkAocGxhdGZvcm1DaGFuZ2VU
eXBlRm9yV2ViQ29yZUNoYW5nZVR5cGUoQVhUZXh0U3RhdGVDaGFuZ2VUeXBlRWRpdCkpIGZvcktl
eTpOU0FjY2Vzc2liaWxpdHlUZXh0U3RhdGVDaGFuZ2VUeXBlS2V5XTsKLQogICAgIE5TTXV0YWJs
ZUFycmF5ICpjaGFuZ2VzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0
eToyXTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFu
Z2VEaWN0aW9uYXJ5KG9iamVjdCwgZGVsZXRpb25UeXBlLCBkZWxldGVkVGV4dCwgcG9zaXRpb24p
KQorICAgIGlmIChOU0RpY3Rpb25hcnkgKmNoYW5nZSA9IHRleHRSZXBsYWNlbWVudENoYW5nZURp
Y3Rpb25hcnkoKm9iamVjdCwgZGVsZXRpb25UeXBlLCBkZWxldGVkVGV4dCwgcG9zaXRpb24pKQog
ICAgICAgICBbY2hhbmdlcyBhZGRPYmplY3Q6Y2hhbmdlXTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5
ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KG9iamVjdCwgaW5zZXJ0
aW9uVHlwZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbikpCisgICAgaWYgKE5TRGljdGlvbmFyeSAq
Y2hhbmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeSgqb2JqZWN0LCBpbnNlcnRp
b25UeXBlLCBpbnNlcnRlZFRleHQsIHBvc2l0aW9uKSkKICAgICAgICAgW2NoYW5nZXMgYWRkT2Jq
ZWN0OmNoYW5nZV07Ci0gICAgaWYgKGNoYW5nZXMuY291bnQpCi0gICAgICAgIFt1c2VySW5mbyBz
ZXRPYmplY3Q6Y2hhbmdlcyBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVlc107
CisgICAgcG9zdFVzZXJJbmZvRm9yQ2hhbmdlcygqcm9vdFdlYkFyZWEoKSwgKm9iamVjdCwgY2hh
bmdlcyk7CiAgICAgW2NoYW5nZXMgcmVsZWFzZV07Cit9CiAKLSAgICBpZiAoaWQgd3JhcHBlciA9
IG9iamVjdC0+d3JhcHBlcigpKQotICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OndyYXBwZXIg
Zm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFuZ2VFbGVtZW50XTsKK3ZvaWQgQVhPYmplY3RD
YWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRy
b2woQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0
LCBjb25zdCBTdHJpbmcmIGluc2VydGVkVGV4dCwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQor
eworICAgIGlmICghb2JqZWN0KQorICAgICAgICBvYmplY3QgPSByb290V2ViQXJlYSgpOwogCi0g
ICAgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKHJvb3RXZWJBcmVhKCktPndyYXBwZXIo
KSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0aW9uLCB1c2VySW5mbyk7Ci0g
ICAgaWYgKHJvb3RXZWJBcmVhKCktPndyYXBwZXIoKSAhPSBvYmplY3QtPndyYXBwZXIoKSkKLSAg
ICAgICAgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKG9iamVjdC0+d3JhcHBlcigpLCBO
U0FjY2Vzc2liaWxpdHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb24sIHVzZXJJbmZvKTsKKyAgICBp
ZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgW3VzZXJJbmZvIHJlbGVhc2VdOwor
ICAgIE5TTXV0YWJsZUFycmF5ICpjaGFuZ2VzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eToyXTsKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVw
bGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KCpvYmplY3QsIEFYVGV4dEVkaXRUeXBlRGVsZXRlLCBk
ZWxldGVkVGV4dCwgcG9zaXRpb24pKQorICAgICAgICBbY2hhbmdlcyBhZGRPYmplY3Q6Y2hhbmdl
XTsKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VE
aWN0aW9uYXJ5KCpvYmplY3QsIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCBpbnNlcnRlZFRleHQsIHBv
c2l0aW9uKSkKKyAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07CisgICAgcG9zdFVz
ZXJJbmZvRm9yQ2hhbmdlcygqcm9vdFdlYkFyZWEoKSwgKm9iamVjdCwgY2hhbmdlcyk7CisgICAg
W2NoYW5nZXMgcmVsZWFzZV07CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5n
RXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheEZyYW1lT2Jq
ZWN0LCBBWExvYWRpbmdFdmVudCBsb2FkaW5nRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMjE4
ODIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OSw3ICs1NDksNyBAQAogCiB2b2lkIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewotICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0ID0gaW5uZXJUZXh0
RWxlbWVudCgpOworICAgIFJlZlB0cjxUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ+IGlubmVy
VGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKICAgICBpZiAoIWlubmVyVGV4dCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC01NzcsNyArNTc3LDcgQEAKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYm
IFBMQVRGT1JNKENPQ09BKQogICAgICAgICBpZiAodGV4dElzQ2hhbmdlZCAmJiByZW5kZXJlcigp
KSB7CiAgICAgICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4
aXN0aW5nQVhPYmplY3RDYWNoZSgpKQotICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0VGV4dFJl
cGxhY2VtZW50Tm90aWZpY2F0aW9uKHRoaXMsIEFYVGV4dEVkaXRUeXBlRGVsZXRlLCBwcmV2aW91
c1ZhbHVlLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdmFsdWUsIFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbih0aGlzLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcikpKTsKKyAgICAgICAg
ICAgICAgICBjYWNoZS0+cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250
cm9sKCp0aGlzLCBwcmV2aW91c1ZhbHVlLCB2YWx1ZSwgZmlyc3RQb3NpdGlvbkluTm9kZShpbm5l
clRleHQuZ2V0KCkpKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314067</attachid>
            <date>2017-06-28 16:33:22 -0700</date>
            <delta_ts>2017-06-28 16:56:35 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-173912-20170628163322.patch</filename>
            <type>text/plain</type>
            <size>36118</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE3LTA2LTI4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNhZmFyaSdzIFNwZWVkb21ldGVy
IHNjb3JlIG1hc3NpdmVseSByZWdyZXNzZXMgd2hlbiBhY2Nlc3NpYmlsaXR5IGlzIGVuYWJsZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzkxMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBidWcg
d2FzIGNhdXNlZCBieSBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0SW5uZXJUZXh0VmFs
dWUgdHJpZ2dlcmluZyBhIHN5bmNocm9ub3VzIGxheW91dAorICAgICAgICB2aWEgY29uc3RydWN0
aW5nIFZpc2libGVQb3NpdGlvbiB3aGVuIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgaXMgcHJlc2Vu
dC4KKworICAgICAgICBBZGRlZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wgd2hpY2ggYXZvaWRzIHRoZSBjb25zdHJ1Y3Rpb24gb2YK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGFuZCBvdGhlciBtZWFucyBvZiB0cmlnZ2VyaW5nIGEg
c3luY2hyb25vdXMgbGF5b3V0LiBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSBzdWJ0bGUgYnVnCisg
ICAgICAgIHRoYXQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgd2FzIGNyZWF0aW5nIFRleHRN
YXJrZXJEYXRhIHdpdGggYXhJRCBzZXQgdG8gdGhhdCBvZiB0aGUgdGV4dCBjb250cm9sCisgICAg
ICAgIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IGluc2lkZSBp
dHMgc2hhZG93IHRyZWUgZXZlbiB0aG91Z2ggdGhlIHR5cGluZyBjb21tYW5kIHVzZXMKKyAgICAg
ICAgYXhJRCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50LiBXaGlsZSBJIGNvdWxkbid0IGZp
bmQgYW55IHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZSBmcm9tIHRoaXMKKyAgICAgICAg
Y29kZSBjaGFuZ2UsIG5ldyBjb2RlIGlzIG1vcmUgc2VsZi1jb25zaXN0ZW50LgorCisgICAgICAg
IEFsc28gYWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIHdoaWNoIGFzc2VydHMgdGhhdCBubyBz
eW5jaHJvbm91cyBsYXlvdXQgaGFwcGVucyBpbiBzZXRJbm5lclRleHRWYWx1ZQorICAgICAgICBz
byB0aGF0IHdlIGRvbid0IGludHJvZHVjZSBhIG5ldyBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGxp
a2UgdGhpcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3Rpbmcg
dGVzdHMgaW4gYWNjZXNzaWJpbGl0eSBkaXJlY3RvcnkgY292ZXJzIHRoaXMuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDogQWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcC4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJv
bCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRh
dGFGb3JWaXNpYmxlUG9zaXRpb24pOiBNb2Rlcm5pemVkLiBSZXR1cm5zIG9wdGlvbmFsPFRleHRN
YXJrZXJEYXRhPgorICAgICAgICBpbnN0ZWFkIG9mIHRha2luZyBUZXh0TWFya2VyRGF0YSBhcyBh
biBvdXQtYXJndW1lbnQsIGFuZCByZXR1cm5pbmcgd2l0aCBheElEIG9mIDAuCisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvckZpcnN0UG9zaXRpb25JblRl
eHRDb250cm9sKTogQWRkZWQuIFRoaXMgc3BlY2lhbGl6ZWQgdmVyc2lvbgorICAgICAgICBjb25z
dHJ1Y3RzIFRleHRNYXJrZXJEYXRhIGZvciB0aGUgZmlyc3QgcG9zaXRpb24gaW5zaWRlIHRoZSBl
ZGl0YWJsZSByZWdpb24gaW4gYSB0ZXh0IGNvbnRyb2wgd2l0aG91dAorICAgICAgICB0cmlnZ2Vy
aW5nIGEgc3luY2hyb25vdXMgbGF5b3V0LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFya2VyRGF0YSk6IEluaXRpYWxp
emUgZWFjaCBtZW1iZXIgYXV0b21hdGljYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbCk6CisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wpOiBBZGRlZC4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoK1tX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpj
YWNoZTpdKToKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjphZGRUZXh0TWFya2VyRm9yKTogRXh0cmFjdGVkIGZyb20g
dGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeS4gQWRkZWQgYSBuZXcgdmFyaWFudCB3aGlj
aAorICAgICAgICB0YWtlcyBhIHRleHQgZm9ybSBjb250cm9sIGluc3RlYWQuCisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KTogVGVtcGxhdGl6ZWQgdGhp
cyBmdW5jdGlvbiB0byBlaXRoZXIgdGFrZSBWaXNpYmxlUG9zaXRpb24KKyAgICAgICAgYW5kIGNh
bGwgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbiBvciB0YWtlIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50IGFuZCBjYWxsCisgICAgICAgIHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5U
ZXh0Q29udHJvbC4KKyAgICAgICAgKFdlYkNvcmU6OnBvc3RVc2VySW5mb0ZvckNoYW5nZXMpOiBF
eHRyYWN0ZWQgZnJvbSBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZv
cm1Ob3RpZmljYXRpb24pOiAKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RU
ZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKTogQWRkZWQu
CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5oOgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICh0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
dGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOl0pOiBBZGRlZC4KKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBk
YXRlTGF5b3V0KTogQXNzZXJ0IHRoYXQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIGlzIG5vdCBpbiB0
aGUgc3RhY2sgZnJhbWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZXRJbm5lclRleHRWYWx1ZSk6IENhbGwgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sCisgICAgICAgIHRvIGF2b2lkIHRyaWdnZXJpbmcgYSBzeW5jaHJvbm91cyBs
YXlvdXQuIEFsc28gY3JlYXRlIExheW91dERpc2FsbG93ZWRTY29wZSB0byBhdm9pZCBhIHNpbWls
YXIgcGVyZm9ybWFuY2UKKyAgICAgICAgcmVncmVzc2lvbiBmcm9tIGJlaW5nIGludHJvZHVjZWQg
aW4gdGhlIGZ1dHVyZSBpbiB0aGlzIGZ1bmN0aW9uLiBGaW5hbGx5LCBtYWRlIGlubmVyVGV4dCBh
IFJlZlB0ciBmb3IgZXh0cmEKKyAgICAgICAgc2FmZXR5IHNpbmNlIHdlJ3JlIHVzaW5nIGl0IGFm
dGVyIHVwZGF0aW5nIHRoZSBET00gdHJlZS4KKworICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRE
aXNhbGxvd2VkU2NvcGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0RGlz
YWxsb3dlZFNjb3BlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0RGlzYWxsb3dl
ZFNjb3BlOjpMYXlvdXREaXNhbGxvd2VkU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
RGlzYWxsb3dlZFNjb3BlOjp+TGF5b3V0RGlzYWxsb3dlZFNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dERpc2FsbG93ZWRTY29wZTo6aXNMYXlvdXRBbGxvd2VkKToKKwogMjAxNy0wNi0y
OCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnRM
b2FkZXIgc2hvdWxkIGFsd2F5cyBub3RpZnkgdGhlIGNsaWVudCBpZiB0aGVyZSBhcmUgcGVuZGlu
ZyBpY29uIGxvYWRzIHdoZW4gdGhlIGxvYWQgaXMgc3RvcHBlZC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMjUxMCw2ICsyNTEwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAogICAgIHJlbmRlcmluZy9JbmxpbmVJ
dGVyYXRvci5jcHAKICAgICByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKyAgICByZW5kZXJp
bmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBhaW50
ZXIuY3BwCiAgICAgcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAogICAgIHJlbmRlcmluZy9PcmRl
ckl0ZXJhdG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjM3
LDYgKzQyMzcsNyBAQAogCQk5QkM2QzIxQzEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUJDNkMyMUExM0NDQzk3QjAwOEUwMzM3IC8qIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcCAqLzsgfTsKIAkJOUJEMEJGOTMxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2
ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCRDBCRjkxMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmggKi87IH07CiAJ
CTlCRDBCRjk0MTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDBCRjkyMTJBNDJCRjUw
MDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLzsgfTsKKwkJOUJEMUY2ODIxRjA0NjMx
MDAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQxRjY4MTFGMDQ2MzEwMDAxQzlDREQgLyog
TGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTYxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQ0RTkxNDFDNDYyODcyMDA1MDY1QkMgLyogSlND
dXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTcxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZS5oICovOyB9OwogCQk5QkQ0RTkxQTFDNDYyQ0ZDMDA1MDY1QkMg
LyogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDRFOTE4MUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVt
ZW50UmVnaXN0cnkuY3BwICovOyB9OwpAQCAtMTI1MjEsNiArMTI1MjIsOCBAQAogCQk5QkM2QzIx
QTEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQwQkY5MTEyQTQyQkY1MDA3
MkZENDMgLyogU2NvcGVkRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY29wZWRFdmVudFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
RDBCRjkyMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjb3BlZEV2ZW50UXVldWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4MDFGMDQ2MkI4MDAxQzlDREQgLyogTGF5b3V0
RGlzYWxsb3dlZFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dERpc2FsbG93ZWRTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4
MTFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dERpc2FsbG93ZWRTY29wZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRDRFOTE0MUM0NjI4NzIwMDUwNjVCQyAvKiBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJENEU5MTgxQzQ2
MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzOTksNiArMjU0MDIsOCBAQAogCQkJCUJDRUE0ODFB
MDk3RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmNwcCAqLywKIAkJCQlCQ0VBNDgxQjA5
N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5oICovLAogCQkJCTU4MDM3MTYzMUE2NkYx
RDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggKi8sCisJCQkJOUJEMUY2ODExRjA0NjMxMDAw
MUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgKi8sCisJCQkJOUJEMUY2ODAxRjA0
NjJCODAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5oICovLAogCQkJCUExMjBBQ0Ex
MTNGOTk4NDYwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwICovLAogCQkJCUExMjBBQ0Ew
MTNGOTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuaCAqLywKIAkJCQkyRDkwNjYwNDBC
RTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovLApAQCAtMzM3NTEsNiArMzM3NTYs
NyBAQAogCQkJCTk3QUFCRDE4MTRGQTA5RDUwMDc0NTdBRSAvKiBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFERjZEODAwQjky
QTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzgz
REQxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5QkQxRjY4MjFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNj
b3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY1N0E2MEYwMTI1NkIwMDg5MUVCQiAvKiBU
aHJlYWRHbG9iYWxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE4NUJDRjI4MEYzMjc5Q0Uw
MDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0FBM0E2OTkx
OTRBNjRFNzAwMUNCRDI0IC8qIFRpbGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShy
ZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiSFRN
TExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZXRlckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgog
I2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtOTMsNiArOTQsNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMu
aCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCkBAIC0xMjkzLDYgKzEyOTUs
MjUgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50TgogI2VuZGlmCiB9
CiAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiB0ZXh0Q29udHJvbCwgY29u
c3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQpCit7Cisg
ICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKworICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKCZ0ZXh0Q29udHJvbCk7CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgaWYgKG9iamVjdCkgeworICAgICAgICBpZiAoZW5xdWV1ZVBhc3N3
b3JkVmFsdWVDaGFuZ2VOb3RpZmljYXRpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxlT2JqZWN0KCk7CisgICAgfQorCisg
ICAgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wo
b2JqZWN0LCBkZWxldGVkVGV4dCwgaW5zZXJ0ZWRUZXh0LCB0ZXh0Q29udHJvbCk7CisjZWxzZQor
ICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCB0ZXh0Q2hhbmdl
Rm9yRWRpdFR5cGUoZGVsZXRpb25UeXBlKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgZGVsZXRlZFRleHQpOworICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRp
b24ob2JqZWN0LCB0ZXh0Q2hhbmdlRm9yRWRpdFR5cGUoaW5zZXJ0aW9uVHlwZSksIHBvc2l0aW9u
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGluc2VydGVkVGV4dCk7CisjZW5kaWYKK30KKwog
Ym9vbCBBWE9iamVjdENhY2hlOjplbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlv
bihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgaWYgKCFpc1Bhc3N3b3JkRmll
bGRPckNvbnRhaW5lZEJ5UGFzc3dvcmRGaWVsZChvYmplY3QpKQpAQCAtMjA4Myw0NSArMjEwNCw3
NyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjphY2NlCiAgICAgcmV0dXJu
IHRoaXMtPmdldE9yQ3JlYXRlKGRvbU5vZGUpOwogfQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnRl
eHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2Vy
RGF0YSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQorc3RkOjpvcHRpb25hbDxU
ZXh0TWFya2VyRGF0YT4gQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogewotICAgIC8vIFRoaXMg
bWVtb3J5IG11c3QgYmUgYnplcm8nZCBzbyBpbnN0YW5jZXMgb2YgVGV4dE1hcmtlckRhdGEgY2Fu
IGJlIHRlc3RlZCBmb3IgYnl0ZS1lcXVpdmFsZW5jZS4KLSAgICAvLyBUaGlzIGFsc28gYWxsb3dz
IGNhbGxlcnMgdG8gY2hlY2sgZm9yIGZhaWx1cmUgYnkgbG9va2luZyBhdCB0ZXh0TWFya2VyRGF0
YSB1cG9uIHJldHVybi4KLSAgICBtZW1zZXQoJnRleHRNYXJrZXJEYXRhLCAwLCBzaXplb2YoVGV4
dE1hcmtlckRhdGEpKTsKLSAgICAKICAgICBpZiAodmlzaWJsZVBvcy5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCiAgICAgUG9z
aXRpb24gZGVlcFBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBk
b21Ob2RlID0gZGVlcFBvcy5kZXByZWNhdGVkTm9kZSgpOwogICAgIEFTU0VSVChkb21Ob2RlKTsK
ICAgICBpZiAoIWRvbU5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKwogICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PigqZG9tTm9kZSkg
JiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmRvbU5vZGUpLmlzUGFzc3dvcmRGaWVsZCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
ICAgICAvLyBJZiB0aGUgdmlzaWJsZSBwb3NpdGlvbiBoYXMgYW4gYW5jaG9yIHR5cGUgcmVmZXJy
aW5nIHRvIGEgbm9kZSBvdGhlciB0aGFuIHRoZSBhbmNob3JlZCBub2RlLCB3ZSBzaG91bGQKICAg
ICAvLyBzZXQgdGhlIHRleHQgbWFya2VyIGRhdGEgd2l0aCBDaGFyYWN0ZXJPZmZzZXQgc28gdGhh
dCB0aGUgb2Zmc2V0IHdpbGwgY29ycmVzcG9uZCB0byB0aGUgbm9kZS4KICAgICBDaGFyYWN0ZXJP
ZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0RnJvbVZpc2libGVQb3NpdGlv
bih2aXNpYmxlUG9zKTsKICAgICBpZiAoZGVlcFBvcy5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246
OlBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBkZWVwUG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlv
bjo6UG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW4pIHsKKyAgICAgICAgVGV4dE1hcmtlckRhdGEgdGV4
dE1hcmtlckRhdGE7CiAgICAgICAgIHRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KHRl
eHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJPZmZzZXQpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0ZXh0TWFya2VyRGF0YTsKICAgICB9Ci0gICAgCisKICAgICAvLyBmaW5kIG9yIGNy
ZWF0ZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCBmb3IgdGhpcyBub2RlCiAgICAgQVhPYmplY3RD
YWNoZSogY2FjaGUgPSBkb21Ob2RlLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKTsKICAgICBS
ZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gY2FjaGUtPmdldE9yQ3JlYXRlKGRvbU5v
ZGUpOwotICAgIAorCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CiAgICAgdGV4
dE1hcmtlckRhdGEuYXhJRCA9IG9iai5nZXQoKS0+YXhPYmplY3RJRCgpOwogICAgIHRleHRNYXJr
ZXJEYXRhLm5vZGUgPSBkb21Ob2RlOwogICAgIHRleHRNYXJrZXJEYXRhLm9mZnNldCA9IGRlZXBQ
b3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICB0ZXh0TWFya2VyRGF0YS5hZmZpbml0
eSA9IHZpc2libGVQb3MuYWZmaW5pdHkoKTsKLSAgICAKKwogICAgIHRleHRNYXJrZXJEYXRhLmNo
YXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldC5vZmZzZXQ7CiAgICAgdGV4dE1hcmtlckRh
dGEuY2hhcmFjdGVyU3RhcnRJbmRleCA9IGNoYXJhY3Rlck9mZnNldC5zdGFydEluZGV4OwotICAg
IAorCiAgICAgY2FjaGUtPnNldE5vZGVJblVzZShkb21Ob2RlKTsKKworICAgIHJldHVybiB0ZXh0
TWFya2VyRGF0YTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBleGl0cyBhcyBhIHBlcmZvcm1hbmNl
IG9wdGltaXphdGlvbiB0byBhdm9pZCBhIHN5bmNocm9ub3VzIGxheW91dC4KK3N0ZDo6b3B0aW9u
YWw8VGV4dE1hcmtlckRhdGE+IEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yRmlyc3RQ
b3NpdGlvbkluVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250
cm9sKQoreworICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0RWxlbWVu
dCA9IHRleHRDb250cm9sLmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBpZiAoIWlubmVyVGV4dEVs
ZW1lbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoaXM8SFRNTElu
cHV0RWxlbWVudD4odGV4dENvbnRyb2wpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHRl
eHRDb250cm9sKS5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIFBvc2l0aW9uIGZpcnN0UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKGlu
bmVyVGV4dEVsZW1lbnQpOworICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBpbm5lclRleHRFbGVtZW50
LT5maXJzdENoaWxkKCk7CisgICAgaWYgKCFmaXJzdENoaWxkKQorICAgICAgICBmaXJzdENoaWxk
ID0gaW5uZXJUZXh0RWxlbWVudDsKKyAgICBDb250YWluZXJOb2RlKiBlZGl0aW5nSG9zdCA9IGhp
Z2hlc3RFZGl0YWJsZVJvb3QoZmlyc3RQb3NpdGlvbik7CisKKyAgICBBWE9iamVjdENhY2hlKiBj
YWNoZSA9IHRleHRDb250cm9sLmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpOworICAgIFJlZlB0
cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBjYWNoZS0+Z2V0T3JDcmVhdGUoZWRpdGluZ0hv
c3QpOworCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CisgICAgdGV4dE1hcmtl
ckRhdGEuYXhJRCA9IG9iai5nZXQoKS0+YXhPYmplY3RJRCgpOworICAgIHRleHRNYXJrZXJEYXRh
Lm5vZGUgPSBmaXJzdENoaWxkOworICAgIHRleHRNYXJrZXJEYXRhLm9mZnNldCA9IDA7CisgICAg
dGV4dE1hcmtlckRhdGEuYWZmaW5pdHkgPSBET1dOU1RSRUFNOworICAgIHRleHRNYXJrZXJEYXRh
LmNoYXJhY3Rlck9mZnNldCA9IDA7CisgICAgdGV4dE1hcmtlckRhdGEuY2hhcmFjdGVyU3RhcnRJ
bmRleCA9IDA7CisKKyAgICBjYWNoZS0+c2V0Tm9kZUluVXNlKCZ0ZXh0Q29udHJvbCk7CisKKyAg
ICByZXR1cm4gdGV4dE1hcmtlckRhdGE7CiB9CiAKIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENh
Y2hlOjpuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVy
T2Zmc2V0LCBib29sIGlnbm9yZU5leHROb2RlU3RhcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEhUTUxBcmVhRWxlbWVudDsKK2NsYXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZW5kZXJCbG9jazsKQEAgLTUxLDEz
ICs1MiwxMyBAQCBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiBjbGFzcyBXaWRnZXQ7CiAKIHN0cnVj
dCBUZXh0TWFya2VyRGF0YSB7Ci0gICAgQVhJRCBheElEOwotICAgIE5vZGUqIG5vZGU7Ci0gICAg
aW50IG9mZnNldDsKLSAgICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleDsKLSAgICBpbnQgY2hhcmFj
dGVyT2Zmc2V0OwotICAgIGJvb2wgaWdub3JlZDsKLSAgICBFQWZmaW5pdHkgYWZmaW5pdHk7Cisg
ICAgQVhJRCBheElEIHsgMCB9OworICAgIE5vZGUqIG5vZGUgeyBudWxscHRyIH07CisgICAgaW50
IG9mZnNldCB7IDAgfTsKKyAgICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleCB7IDAgfTsKKyAgICBp
bnQgY2hhcmFjdGVyT2Zmc2V0IHsgMCB9OworICAgIGJvb2wgaWdub3JlZCB7IGZhbHNlIH07Cisg
ICAgRUFmZmluaXR5IGFmZmluaXR5IHsgRE9XTlNUUkVBTSB9OwogfTsKIAogc3RydWN0IENoYXJh
Y3Rlck9mZnNldCB7CkBAIC0yMTIsNyArMjEzLDggQEAgcHVibGljOgogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9iamVjdEZyb21BWElEKEFYSUQgaWQpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
cy5nZXQoaWQpOyB9CiAKICAgICAvLyBUZXh0IG1hcmtlciB1dGlsaXRpZXMuCi0gICAgdm9pZCB0
ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOworICAgIHN0ZDo6b3B0aW9uYWw8VGV4dE1hcmtlckRhdGE+IHRleHRN
YXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAg
IHN0ZDo6b3B0aW9uYWw8VGV4dE1hcmtlckRhdGE+IHRleHRNYXJrZXJEYXRhRm9yRmlyc3RQb3Np
dGlvbkluVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmKTsKICAgICB2b2lk
IHRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiwgY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZvck5leHRDaGFyYWN0
ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICB2
b2lkIHRleHRNYXJrZXJEYXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRh
dGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKQEAgLTMwMCw2ICszMDIsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oTm9kZSosIEFYVGV4
dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2
b2lkIHBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBl
IGRlbGV0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgQVhUZXh0RWRpdFR5cGUg
aW5zZXJ0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOworICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRl
eHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBkZWxl
dGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQpOwogICAgIHZvaWQgcG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRl
bnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJ
bnRlbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0TGl2ZVJlZ2lv
bkNoYW5nZU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CkBAIC0zMzcsNiArMzQw
LDcgQEAgcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcG9zdFRleHRT
dGF0ZUNoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBjb25z
dCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICAg
ICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmls
aXR5T2JqZWN0KiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOworICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0
aW9uRm9yVGV4dENvbnRyb2woQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IFN0cmluZyYgZGVs
ZXRlZFRleHQsIGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCYpOwogICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0
aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwg
QVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwog
I2Vsc2UKICAgICBzdGF0aWMgQVhUZXh0Q2hhbmdlIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRl
eHRFZGl0VHlwZSk7CkBAIC00OTksNiArNTAzLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6aGFuZGxlU2Nyb2xsZQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQm
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hl
Ojpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBB
WE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uKE5vZGUqLCBBWFRl
eHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIHsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxUZXh0Rm9y
bUNvbnRyb2wmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KIGlubGluZSB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIERv
Y3VtZW50KiwgQVhOb3RpZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGlu
ZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiwgQVhO
b3RpZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGluZSB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oTm9kZSosIEFYTm90aWZpY2F0aW9uLCBQb3N0VGFy
Z2V0LCBQb3N0VHlwZSkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9BWE9iamVjdENhY2hlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0JKHJldmlzaW9uIDIxODgyMikKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTExMyw2ICsxMTMsMTEgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4
dFJlcGxhY2VtZW50UAogICAgIHBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIEFYVmFs
dWVDaGFuZ2VkKTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50
UGxhdGZvcm1Ob3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50JikKK3sKKyAgICBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCBBWFZhbHVl
Q2hhbmdlZCk7Cit9CisKIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0
Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheEZyYW1lT2JqZWN0LCBBWExv
YWRpbmdFdmVudCBsb2FkaW5nRXZlbnQpCiB7CiAgICAgaWYgKCFheEZyYW1lT2JqZWN0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDIxODgy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwxMCBAQCAt
IChpZClpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgYWNjZXNzCiAKICsgKFdlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246KFZpc2libGVQ
b3NpdGlvbiYpdmlzaWJsZVBvcyBjYWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGUKIHsKLSAgICBU
ZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFG
b3JWaXNpYmxlUG9zaXRpb24odGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOwotICAgIAotICAg
IHJldHVybiBbW1tXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBhbGxvY10gaW5pdFdpdGhUZXh0
TWFya2VyOiZ0ZXh0TWFya2VyRGF0YSBjYWNoZTpjYWNoZV0gYXV0b3JlbGVhc2VdOworICAgIGF1
dG8gdGV4dE1hcmtlckRhdGEgPSBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRp
b24odGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOworICAgIGlmICghdGV4dE1hcmtlckRhdGEp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbW1dlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyIGFsbG9jXSBpbml0V2l0aFRleHRNYXJrZXI6JnRleHRNYXJrZXJEYXRhLnZhbHVlKCkg
Y2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNlXTsKIH0KIAogKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgKil0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0Jilj
aGFyYWN0ZXJPZmZzZXQgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0J
KHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FY
T2JqZWN0Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwNyw3ICs0MDcsMjIgQEAgdm9p
ZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlUAogICAgIFt1c2VySW5mbyByZWxl
YXNlXTsKIH0KIAotc3RhdGljIE5TRGljdGlvbmFyeSAqdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGlj
dGlvbmFyeShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIEFYVGV4dEVkaXRUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQor
c3RhdGljIHZvaWQgYWRkVGV4dE1hcmtlckZvcihOU011dGFibGVEaWN0aW9uYXJ5KiBjaGFuZ2Us
IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3Np
dGlvbikKK3sKKyAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKKyAgICAgICAgaWYgKGlk
IHRleHRNYXJrZXIgPSBbb2JqZWN0LndyYXBwZXIoKSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0
aW9uOnBvc2l0aW9uXSkKKyAgICAgICAgICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHRNYXJrZXIg
Zm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZVN0YXJ0TWFya2VyXTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIGFkZFRleHRNYXJrZXJGb3IoTlNNdXRhYmxlRGljdGlvbmFyeSog
Y2hhbmdlLCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QsIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50JiB0ZXh0Q29udHJvbCkKK3sKKyAgICBpZiAoaWQgdGV4dE1hcmtlciA9IFtvYmplY3Qu
d3JhcHBlcigpIHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbDp0ZXh0Q29u
dHJvbF0pCisgICAgICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHRNYXJrZXIgZm9yS2V5Ok5TQWNj
ZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZVN0YXJ0TWFya2VyXTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFRleHRNYXJrZXJUYXJnZXRUeXBlPgorc3RhdGljIE5TRGljdGlvbmFyeSAqdGV4dFJl
cGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeShBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QsIEFY
VGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBUZXh0TWFya2VyVGFyZ2V0
VHlwZSYgbWFya2VyVGFyZ2V0KQogewogICAgIE5TU3RyaW5nICp0ZXh0ID0gKE5TU3RyaW5nICop
c3RyaW5nOwogICAgIE5TVUludGVnZXIgbGVuZ3RoID0gW3RleHQgbGVuZ3RoXTsKQEAgLTQyMCwx
MCArNDM1LDcgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqdGV4dFJlcGxhY2VtZW50Q2hhbgogICAg
ICAgICB0ZXh0ID0gW3RleHQgc3Vic3RyaW5nVG9JbmRleDpBWFZhbHVlQ2hhbmdlVHJ1bmNhdGlv
bkxlbmd0aF07CiAgICAgfQogICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHQgZm9yS2V5Ok5TQWNj
ZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZV07Ci0gICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgp
KSB7Ci0gICAgICAgIGlmIChpZCB0ZXh0TWFya2VyID0gW29iamVjdC0+d3JhcHBlcigpIHRleHRN
YXJrZXJGb3JWaXNpYmxlUG9zaXRpb246cG9zaXRpb25dKQotICAgICAgICAgICAgW2NoYW5nZSBz
ZXRPYmplY3Q6dGV4dE1hcmtlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVl
U3RhcnRNYXJrZXJdOwotICAgIH0KKyAgICBhZGRUZXh0TWFya2VyRm9yKGNoYW5nZSwgb2JqZWN0
LCBtYXJrZXJUYXJnZXQpOwogICAgIHJldHVybiBbY2hhbmdlIGF1dG9yZWxlYXNlXTsKIH0KIApA
QCAtNDM1LDYgKzQ0NywyMyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VQCiAgICAgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKG9iamVjdCwg
QVhUZXh0RWRpdFR5cGVVbmtub3duLCBlbXB0eVN0cmluZygpLCB0eXBlLCB0ZXh0LCBwb3NpdGlv
bik7CiB9CiAKK3N0YXRpYyB2b2lkIHBvc3RVc2VySW5mb0ZvckNoYW5nZXMoQWNjZXNzaWJpbGl0
eU9iamVjdCYgcm9vdFdlYkFyZWEsIEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgTlNNdXRh
YmxlQXJyYXkqIGNoYW5nZXMpCit7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqdXNlckluZm8g
PSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6NF07CisgICAg
W3VzZXJJbmZvIHNldE9iamVjdDpAKHBsYXRmb3JtQ2hhbmdlVHlwZUZvcldlYkNvcmVDaGFuZ2VU
eXBlKEFYVGV4dFN0YXRlQ2hhbmdlVHlwZUVkaXQpKSBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4
dFN0YXRlQ2hhbmdlVHlwZUtleV07CisgICAgaWYgKGNoYW5nZXMuY291bnQpCisgICAgICAgIFt1
c2VySW5mbyBzZXRPYmplY3Q6Y2hhbmdlcyBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5n
ZVZhbHVlc107CisKKyAgICBpZiAoaWQgd3JhcHBlciA9IG9iamVjdC53cmFwcGVyKCkpCisgICAg
ICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6d3JhcHBlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4
dENoYW5nZUVsZW1lbnRdOworCisgICAgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKHJv
b3RXZWJBcmVhLndyYXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0
aW9uLCB1c2VySW5mbyk7CisgICAgaWYgKHJvb3RXZWJBcmVhLndyYXBwZXIoKSAhPSBvYmplY3Qu
d3JhcHBlcigpKQorICAgICAgICBBWFBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8ob2JqZWN0
LndyYXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0aW9uLCB1c2Vy
SW5mbyk7CisKKyAgICBbdXNlckluZm8gcmVsZWFzZV07Cit9CisKIHZvaWQgQVhPYmplY3RDYWNo
ZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iamVjdCwgQVhUZXh0RWRpdFR5cGUgZGVsZXRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGRlbGV0ZWRUZXh0LCBBWFRleHRFZGl0VHlwZSBpbnNlcnRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGluc2VydGVkVGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBp
ZiAoIW9iamVjdCkKQEAgLTQ0MywyNiArNDcyLDMwIEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9z
dFRleHRSZXBsYWNlbWVudFAKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqdXNlckluZm8gPSBbW05TTXV0YWJsZURpY3Rpb25hcnkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6NF07Ci0gICAgW3VzZXJJbmZvIHNldE9iamVjdDpAKHBs
YXRmb3JtQ2hhbmdlVHlwZUZvcldlYkNvcmVDaGFuZ2VUeXBlKEFYVGV4dFN0YXRlQ2hhbmdlVHlw
ZUVkaXQpKSBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dFN0YXRlQ2hhbmdlVHlwZUtleV07Ci0K
ICAgICBOU011dGFibGVBcnJheSAqY2hhbmdlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6Ml07Ci0gICAgaWYgKE5TRGljdGlvbmFyeSAqY2hhbmdlID0gdGV4dFJl
cGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeShvYmplY3QsIGRlbGV0aW9uVHlwZSwgZGVsZXRlZFRl
eHQsIHBvc2l0aW9uKSkKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFj
ZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KCpvYmplY3QsIGRlbGV0aW9uVHlwZSwgZGVsZXRlZFRleHQs
IHBvc2l0aW9uKSkKICAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07Ci0gICAgaWYg
KE5TRGljdGlvbmFyeSAqY2hhbmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeShv
YmplY3QsIGluc2VydGlvblR5cGUsIGluc2VydGVkVGV4dCwgcG9zaXRpb24pKQorICAgIGlmIChO
U0RpY3Rpb25hcnkgKmNoYW5nZSA9IHRleHRSZXBsYWNlbWVudENoYW5nZURpY3Rpb25hcnkoKm9i
amVjdCwgaW5zZXJ0aW9uVHlwZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbikpCiAgICAgICAgIFtj
aGFuZ2VzIGFkZE9iamVjdDpjaGFuZ2VdOwotICAgIGlmIChjaGFuZ2VzLmNvdW50KQotICAgICAg
ICBbdXNlckluZm8gc2V0T2JqZWN0OmNoYW5nZXMgZm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRD
aGFuZ2VWYWx1ZXNdOworICAgIHBvc3RVc2VySW5mb0ZvckNoYW5nZXMoKnJvb3RXZWJBcmVhKCks
ICpvYmplY3QsIGNoYW5nZXMpOwogICAgIFtjaGFuZ2VzIHJlbGVhc2VdOworfQogCi0gICAgaWYg
KGlkIHdyYXBwZXIgPSBvYmplY3QtPndyYXBwZXIoKSkKLSAgICAgICAgW3VzZXJJbmZvIHNldE9i
amVjdDp3cmFwcGVyIGZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlRWxlbWVudF07Cit2
b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlv
bkZvclRleHRDb250cm9sKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50JiB0ZXh0Q29udHJvbCkKK3sKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAg
b2JqZWN0ID0gcm9vdFdlYkFyZWEoKTsKIAotICAgIEFYUG9zdE5vdGlmaWNhdGlvbldpdGhVc2Vy
SW5mbyhyb290V2ViQXJlYSgpLT53cmFwcGVyKCksIE5TQWNjZXNzaWJpbGl0eVZhbHVlQ2hhbmdl
ZE5vdGlmaWNhdGlvbiwgdXNlckluZm8pOwotICAgIGlmIChyb290V2ViQXJlYSgpLT53cmFwcGVy
KCkgIT0gb2JqZWN0LT53cmFwcGVyKCkpCi0gICAgICAgIEFYUG9zdE5vdGlmaWNhdGlvbldpdGhV
c2VySW5mbyhvYmplY3QtPndyYXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90
aWZpY2F0aW9uLCB1c2VySW5mbyk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybjsK
IAotICAgIFt1c2VySW5mbyByZWxlYXNlXTsKKyAgICBOU011dGFibGVBcnJheSAqY2hhbmdlcyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Ml07CisgICAgaWYgKE5T
RGljdGlvbmFyeSAqY2hhbmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeSgqb2Jq
ZWN0LCBBWFRleHRFZGl0VHlwZURlbGV0ZSwgZGVsZXRlZFRleHQsIHRleHRDb250cm9sKSkKKyAg
ICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07CisgICAgaWYgKE5TRGljdGlvbmFyeSAq
Y2hhbmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeSgqb2JqZWN0LCBBWFRleHRF
ZGl0VHlwZUluc2VydCwgaW5zZXJ0ZWRUZXh0LCB0ZXh0Q29udHJvbCkpCisgICAgICAgIFtjaGFu
Z2VzIGFkZE9iamVjdDpjaGFuZ2VdOworICAgIHBvc3RVc2VySW5mb0ZvckNoYW5nZXMoKnJvb3RX
ZWJBcmVhKCksICpvYmplY3QsIGNoYW5nZXMpOworICAgIFtjaGFuZ2VzIHJlbGVhc2VdOwogfQog
CiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRp
b24oQWNjZXNzaWJpbGl0eU9iamVjdCogYXhGcmFtZU9iamVjdCwgQVhMb2FkaW5nRXZlbnQgbG9h
ZGluZ0V2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgJ
KHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBAIGNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7CiBzdHJ1Y3QgQWNjZXNzaWJpbGl0
eVNlYXJjaENyaXRlcmlhOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFz
cyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDsKIGNsYXNzIFBhdGg7CiBjbGFzcyBWaXNpYmxl
UG9zaXRpb247CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgJ
KHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDcgQEAgQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcgogCiAtIChp
ZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczooY29uc3QgV2ViQ29yZTo6Vmlz
aWJsZVBvc2l0aW9uJilzdGFydFBvc2l0aW9uIGVuZFBvc2l0aW9uOihjb25zdCBXZWJDb3JlOjpW
aXNpYmxlUG9zaXRpb24mKWVuZFBvc2l0aW9uOwogLSAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQ
b3NpdGlvbjooY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJil2aXNpYmxlUG9zOworLSAo
aWQpdGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOihXZWJDb3JlOjpIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCYpdGV4dENvbnRyb2w7CiAKIC8vIFdoZW4gYSBwbHVnaW4g
dXNlcyBhIFdlYktpdCBjb250cm9sIHRvIGFjdCBhcyBhIHN1cnJvZ2F0ZSB2aWV3IChlLmcuIFBE
RiB1c2UgV2ViS2l0IHRvIGNyZWF0ZSB0ZXh0IGZpZWxkcykuCiAtIChpZClhc3NvY2lhdGVkUGx1
Z2luUGFyZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0J
KHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02ODEs
MTMgKzY4MSwxMiBAQCAtIChDaGFyYWN0ZXJPZmZzZXQpY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4CiBz
dGF0aWMgaWQgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihBWE9iamVjdENhY2hlKiBjYWNo
ZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogewogICAgIEFTU0VSVChjYWNo
ZSk7Ci0gICAgCi0gICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0gICAgY2FjaGUt
PnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2aXNpYmxl
UG9zKTsKLSAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQpCisKKyAgICBhdXRvIHRleHRNYXJr
ZXJEYXRhID0gY2FjaGUtPnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQ
b3MpOworICAgIGlmICghdGV4dE1hcmtlckRhdGEpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
Ci0gICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKHdrQ3JlYXRlQVhUZXh0TWFya2VyKCZ0ZXh0
TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhKSkpOworCisgICAgcmV0dXJuIENGQnJp
ZGdpbmdSZWxlYXNlKHdrQ3JlYXRlQVhUZXh0TWFya2VyKCZ0ZXh0TWFya2VyRGF0YS52YWx1ZSgp
LCBzaXplb2YodGV4dE1hcmtlckRhdGEudmFsdWUoKSkpKTsKIH0KIAogLSAoaWQpdGV4dE1hcmtl
ckZvclZpc2libGVQb3NpdGlvbjooY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpdmlzaWJsZVBvcwpA
QCAtNjk1LDYgKzY5NCwxOCBAQCAtIChpZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihj
b25zCiAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKSwgdmlzaWJsZVBvcyk7CiB9CiAKKy0gKGlkKXRleHRNYXJrZXJGb3JGaXJz
dFBvc2l0aW9uSW5UZXh0Q29udHJvbDooSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgJil0ZXh0
Q29udHJvbAoreworICAgIGF1dG8gKmNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
KyAgICBBU1NFUlQoY2FjaGUpOworCisgICAgYXV0byB0ZXh0TWFya2VyRGF0YSA9IGNhY2hlLT50
ZXh0TWFya2VyRGF0YUZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sKHRleHRDb250cm9sKTsK
KyAgICBpZiAoIXRleHRNYXJrZXJEYXRhKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0
dXJuIENGQnJpZGdpbmdSZWxlYXNlKHdrQ3JlYXRlQVhUZXh0TWFya2VyKCZ0ZXh0TWFya2VyRGF0
YS52YWx1ZSgpLCBzaXplb2YodGV4dE1hcmtlckRhdGEudmFsdWUoKSkpKTsKK30KKwogc3RhdGlj
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlLCBDRlR5cGVSZWYgdGV4dE1hcmtlcikKIHsKICAgICBBU1NFUlQoY2FjaGUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDcg
QEAKICNpbmNsdWRlICJKU0xhenlFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRF
dmVudC5oIgogI2luY2x1ZGUgIkxhbmd1YWdlLmgiCisjaW5jbHVkZSAiTGF5b3V0RGlzYWxsb3dl
ZFNjb3BlLmgiCiAjaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCkBAIC0xOTE0LDYgKzE5MTUsNyBAQCB2b2lkIERv
Y3VtZW50Ojp1cGRhdGVTdHlsZUlmTmVlZGVkKCkKIAogdm9pZCBEb2N1bWVudDo6dXBkYXRlTGF5
b3V0KCkKIHsKKyAgICBBU1NFUlQoTGF5b3V0RGlzYWxsb3dlZFNjb3BlOjppc0xheW91dEFsbG93
ZWQoKSk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gdmlldygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRl
ICJMYXlvdXREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5o
IgpAQCAtNTQ5LDcgKzU1MCw4IEBAIHN0YXRpYyBTdHJpbmcgaW5uZXJUZXh0VmFsdWVGcm9tKFRl
eHRDb24KIAogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0SW5uZXJUZXh0VmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1l
bnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBMYXlvdXREaXNhbGxvd2Vk
U2NvcGUgbGF5b3V0RGlzYWxsb3dlZFNjb3BlKExheW91dERpc2FsbG93ZWRTY29wZTo6UmVhc29u
OjpQZXJmb3JtYW5jZU9wdGltaXphdGlvbik7CisgICAgUmVmUHRyPFRleHRDb250cm9sSW5uZXJU
ZXh0RWxlbWVudD4gaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgpOwogICAgIGlmICghaW5u
ZXJUZXh0KQogICAgICAgICByZXR1cm47CiAKQEAgLTU3Nyw3ICs1NzksNyBAQCB2b2lkIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lCiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKSAm
JiBQTEFURk9STShDT0NPQSkKICAgICAgICAgaWYgKHRleHRJc0NoYW5nZWQgJiYgcmVuZGVyZXIo
KSkgewogICAgICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5l
eGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgICAgICAgICBjYWNoZS0+cG9zdFRleHRS
ZXBsYWNlbWVudE5vdGlmaWNhdGlvbih0aGlzLCBBWFRleHRFZGl0VHlwZURlbGV0ZSwgcHJldmlv
dXNWYWx1ZSwgQVhUZXh0RWRpdFR5cGVJbnNlcnQsIHZhbHVlLCBWaXNpYmxlUG9zaXRpb24oUG9z
aXRpb24odGhpcywgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpKSk7CisgICAgICAg
ICAgICAgICAgY2FjaGUtPnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29u
dHJvbCgqdGhpcywgcHJldmlvdXNWYWx1ZSwgdmFsdWUpOwogICAgICAgICB9CiAjZW5kaWYKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0RGlzYWxsb3dlZFNjb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0RGlzYWxs
b3dlZFNjb3BlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dERpc2Fs
bG93ZWRTY29wZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisKK0xheW91dERpc2FsbG93ZWRTY29wZSogTGF5b3V0RGlzYWxsb3dlZFNjb3BlOjpzX2N1
cnJlbnRBc3NlcnRpb24gPSBudWxscHRyOworCisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xheW91dERpc2FsbG93ZWRTY29wZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2VkU2NvcGUuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisKK2NsYXNz
IExheW91dERpc2FsbG93ZWRTY29wZSB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBSZWFzb24g
eyBQZXJmb3JtYW5jZU9wdGltaXphdGlvbiB9OworICAgIExheW91dERpc2FsbG93ZWRTY29wZShS
ZWFzb24pCisgICAgICAgIDogbV9wcmV2aW91c0Fzc2VydGlvbihzX2N1cnJlbnRBc3NlcnRpb24p
CisgICAgeworICAgICAgICBzX2N1cnJlbnRBc3NlcnRpb24gPSB0aGlzOworICAgIH0KKworICAg
IH5MYXlvdXREaXNhbGxvd2VkU2NvcGUoKQorICAgIHsKKyAgICAgICAgc19jdXJyZW50QXNzZXJ0
aW9uID0gbV9wcmV2aW91c0Fzc2VydGlvbjsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0xh
eW91dEFsbG93ZWQoKSB7IHJldHVybiAhc19jdXJyZW50QXNzZXJ0aW9uOyB9CisKK3ByaXZhdGU6
CisgICAgTGF5b3V0RGlzYWxsb3dlZFNjb3BlKiBtX3ByZXZpb3VzQXNzZXJ0aW9uOworICAgIHN0
YXRpYyBMYXlvdXREaXNhbGxvd2VkU2NvcGUqIHNfY3VycmVudEFzc2VydGlvbjsKK307CisKKyNl
bHNlCisKK2NsYXNzIExheW91dERpc2FsbG93ZWRTY29wZSB7CitwdWJsaWM6CisgICAgZW51bSBj
bGFzcyBSZWFzb24geyBQZXJmb3JtYW5jZU9wdGltaXphdGlvbiB9OworICAgIExheW91dERpc2Fs
bG93ZWRTY29wZShSZWFzb24pIHsgfQorICAgIHN0YXRpYyBib29sIGlzTGF5b3V0QWxsb3dlZCgp
IHsgcmV0dXJuIHRydWU7IH0KK307CisKKyNlbmRpZgorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314070</attachid>
            <date>2017-06-28 16:56:36 -0700</date>
            <delta_ts>2017-06-28 17:33:46 -0700</delta_ts>
            <desc>Addressed Chris&apos;s comment</desc>
            <filename>bug-173912-20170628165636.patch</filename>
            <type>text/plain</type>
            <size>36136</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE3LTA2LTI4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNhZmFyaSdzIFNwZWVkb21ldGVy
IHNjb3JlIG1hc3NpdmVseSByZWdyZXNzZXMgd2hlbiBhY2Nlc3NpYmlsaXR5IGlzIGVuYWJsZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzkxMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBidWcg
d2FzIGNhdXNlZCBieSBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0SW5uZXJUZXh0VmFs
dWUgdHJpZ2dlcmluZyBhIHN5bmNocm9ub3VzIGxheW91dAorICAgICAgICB2aWEgY29uc3RydWN0
aW5nIFZpc2libGVQb3NpdGlvbiB3aGVuIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgaXMgcHJlc2Vu
dC4KKworICAgICAgICBBZGRlZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wgd2hpY2ggYXZvaWRzIHRoZSBjb25zdHJ1Y3Rpb24gb2YK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGFuZCBvdGhlciBtZWFucyBvZiB0cmlnZ2VyaW5nIGEg
c3luY2hyb25vdXMgbGF5b3V0LiBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSBzdWJ0bGUgYnVnCisg
ICAgICAgIHRoYXQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgd2FzIGNyZWF0aW5nIFRleHRN
YXJrZXJEYXRhIHdpdGggYXhJRCBzZXQgdG8gdGhhdCBvZiB0aGUgdGV4dCBjb250cm9sCisgICAg
ICAgIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IGluc2lkZSBp
dHMgc2hhZG93IHRyZWUgZXZlbiB0aG91Z2ggdGhlIHR5cGluZyBjb21tYW5kIHVzZXMKKyAgICAg
ICAgYXhJRCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50LiBXaGlsZSBJIGNvdWxkbid0IGZp
bmQgYW55IHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZSBmcm9tIHRoaXMKKyAgICAgICAg
Y29kZSBjaGFuZ2UsIG5ldyBjb2RlIGlzIG1vcmUgc2VsZi1jb25zaXN0ZW50LgorCisgICAgICAg
IEFsc28gYWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIHdoaWNoIGFzc2VydHMgdGhhdCBubyBz
eW5jaHJvbm91cyBsYXlvdXQgaGFwcGVucyBpbiBzZXRJbm5lclRleHRWYWx1ZQorICAgICAgICBz
byB0aGF0IHdlIGRvbid0IGludHJvZHVjZSBhIG5ldyBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGxp
a2UgdGhpcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3Rpbmcg
dGVzdHMgaW4gYWNjZXNzaWJpbGl0eSBkaXJlY3RvcnkgY292ZXJzIHRoaXMuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDogQWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcC4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJv
bCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRh
dGFGb3JWaXNpYmxlUG9zaXRpb24pOiBNb2Rlcm5pemVkLiBSZXR1cm5zIG9wdGlvbmFsPFRleHRN
YXJrZXJEYXRhPgorICAgICAgICBpbnN0ZWFkIG9mIHRha2luZyBUZXh0TWFya2VyRGF0YSBhcyBh
biBvdXQtYXJndW1lbnQsIGFuZCByZXR1cm5pbmcgd2l0aCBheElEIG9mIDAuCisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvckZpcnN0UG9zaXRpb25JblRl
eHRDb250cm9sKTogQWRkZWQuIFRoaXMgc3BlY2lhbGl6ZWQgdmVyc2lvbgorICAgICAgICBjb25z
dHJ1Y3RzIFRleHRNYXJrZXJEYXRhIGZvciB0aGUgZmlyc3QgcG9zaXRpb24gaW5zaWRlIHRoZSBl
ZGl0YWJsZSByZWdpb24gaW4gYSB0ZXh0IGNvbnRyb2wgd2l0aG91dAorICAgICAgICB0cmlnZ2Vy
aW5nIGEgc3luY2hyb25vdXMgbGF5b3V0LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFya2VyRGF0YSk6IEluaXRpYWxp
emUgZWFjaCBtZW1iZXIgYXV0b21hdGljYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbCk6CisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wpOiBBZGRlZC4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoK1tX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpj
YWNoZTpdKToKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjphZGRUZXh0TWFya2VyRm9yKTogRXh0cmFjdGVkIGZyb20g
dGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeS4gQWRkZWQgYSBuZXcgdmFyaWFudCB3aGlj
aAorICAgICAgICB0YWtlcyBhIHRleHQgZm9ybSBjb250cm9sIGluc3RlYWQuCisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KTogVGVtcGxhdGl6ZWQgdGhp
cyBmdW5jdGlvbiB0byBlaXRoZXIgdGFrZSBWaXNpYmxlUG9zaXRpb24KKyAgICAgICAgYW5kIGNh
bGwgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbiBvciB0YWtlIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50IGFuZCBjYWxsCisgICAgICAgIHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5U
ZXh0Q29udHJvbC4KKyAgICAgICAgKFdlYkNvcmU6OnBvc3RVc2VySW5mb0ZvckNoYW5nZXMpOiBF
eHRyYWN0ZWQgZnJvbSBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZv
cm1Ob3RpZmljYXRpb24pOiAKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RU
ZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKTogQWRkZWQu
CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5oOgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICh0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
dGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOl0pOiBBZGRlZC4KKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBk
YXRlTGF5b3V0KTogQXNzZXJ0IHRoYXQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIGlzIG5vdCBpbiB0
aGUgc3RhY2sgZnJhbWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZXRJbm5lclRleHRWYWx1ZSk6IENhbGwgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sCisgICAgICAgIHRvIGF2b2lkIHRyaWdnZXJpbmcgYSBzeW5jaHJvbm91cyBs
YXlvdXQuIEFsc28gY3JlYXRlIExheW91dERpc2FsbG93ZWRTY29wZSB0byBhdm9pZCBhIHNpbWls
YXIgcGVyZm9ybWFuY2UKKyAgICAgICAgcmVncmVzc2lvbiBmcm9tIGJlaW5nIGludHJvZHVjZWQg
aW4gdGhlIGZ1dHVyZSBpbiB0aGlzIGZ1bmN0aW9uLiBGaW5hbGx5LCBtYWRlIGlubmVyVGV4dCBh
IFJlZlB0ciBmb3IgZXh0cmEKKyAgICAgICAgc2FmZXR5IHNpbmNlIHdlJ3JlIHVzaW5nIGl0IGFm
dGVyIHVwZGF0aW5nIHRoZSBET00gdHJlZS4KKworICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRE
aXNhbGxvd2VkU2NvcGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0RGlz
YWxsb3dlZFNjb3BlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0RGlzYWxsb3dl
ZFNjb3BlOjpMYXlvdXREaXNhbGxvd2VkU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
RGlzYWxsb3dlZFNjb3BlOjp+TGF5b3V0RGlzYWxsb3dlZFNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dERpc2FsbG93ZWRTY29wZTo6aXNMYXlvdXRBbGxvd2VkKToKKwogMjAxNy0wNi0y
OCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnRM
b2FkZXIgc2hvdWxkIGFsd2F5cyBub3RpZnkgdGhlIGNsaWVudCBpZiB0aGVyZSBhcmUgcGVuZGlu
ZyBpY29uIGxvYWRzIHdoZW4gdGhlIGxvYWQgaXMgc3RvcHBlZC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMjUxMCw2ICsyNTEwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAogICAgIHJlbmRlcmluZy9JbmxpbmVJ
dGVyYXRvci5jcHAKICAgICByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKyAgICByZW5kZXJp
bmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBhaW50
ZXIuY3BwCiAgICAgcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAogICAgIHJlbmRlcmluZy9PcmRl
ckl0ZXJhdG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjM3
LDYgKzQyMzcsNyBAQAogCQk5QkM2QzIxQzEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUJDNkMyMUExM0NDQzk3QjAwOEUwMzM3IC8qIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcCAqLzsgfTsKIAkJOUJEMEJGOTMxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2
ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCRDBCRjkxMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmggKi87IH07CiAJ
CTlCRDBCRjk0MTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDBCRjkyMTJBNDJCRjUw
MDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLzsgfTsKKwkJOUJEMUY2ODIxRjA0NjMx
MDAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQxRjY4MTFGMDQ2MzEwMDAxQzlDREQgLyog
TGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTYxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQ0RTkxNDFDNDYyODcyMDA1MDY1QkMgLyogSlND
dXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTcxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZS5oICovOyB9OwogCQk5QkQ0RTkxQTFDNDYyQ0ZDMDA1MDY1QkMg
LyogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDRFOTE4MUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVt
ZW50UmVnaXN0cnkuY3BwICovOyB9OwpAQCAtMTI1MjEsNiArMTI1MjIsOCBAQAogCQk5QkM2QzIx
QTEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQwQkY5MTEyQTQyQkY1MDA3
MkZENDMgLyogU2NvcGVkRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY29wZWRFdmVudFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
RDBCRjkyMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjb3BlZEV2ZW50UXVldWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4MDFGMDQ2MkI4MDAxQzlDREQgLyogTGF5b3V0
RGlzYWxsb3dlZFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dERpc2FsbG93ZWRTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4
MTFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dERpc2FsbG93ZWRTY29wZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRDRFOTE0MUM0NjI4NzIwMDUwNjVCQyAvKiBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJENEU5MTgxQzQ2
MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzOTksNiArMjU0MDIsOCBAQAogCQkJCUJDRUE0ODFB
MDk3RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmNwcCAqLywKIAkJCQlCQ0VBNDgxQjA5
N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5oICovLAogCQkJCTU4MDM3MTYzMUE2NkYx
RDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggKi8sCisJCQkJOUJEMUY2ODExRjA0NjMxMDAw
MUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgKi8sCisJCQkJOUJEMUY2ODAxRjA0
NjJCODAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5oICovLAogCQkJCUExMjBBQ0Ex
MTNGOTk4NDYwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwICovLAogCQkJCUExMjBBQ0Ew
MTNGOTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuaCAqLywKIAkJCQkyRDkwNjYwNDBC
RTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovLApAQCAtMzM3NTEsNiArMzM3NTYs
NyBAQAogCQkJCTk3QUFCRDE4MTRGQTA5RDUwMDc0NTdBRSAvKiBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFERjZEODAwQjky
QTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzgz
REQxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5QkQxRjY4MjFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNj
b3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY1N0E2MEYwMTI1NkIwMDg5MUVCQiAvKiBU
aHJlYWRHbG9iYWxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE4NUJDRjI4MEYzMjc5Q0Uw
MDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0FBM0E2OTkx
OTRBNjRFNzAwMUNCRDI0IC8qIFRpbGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShy
ZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiSFRN
TExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZXRlckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgog
I2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtOTMsNiArOTQsNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMu
aCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCkBAIC0xMjkzLDYgKzEyOTUs
MjUgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50TgogI2VuZGlmCiB9
CiAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiB0ZXh0Q29udHJvbCwgY29u
c3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQpCit7Cisg
ICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKworICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKCZ0ZXh0Q29udHJvbCk7CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgaWYgKG9iamVjdCkgeworICAgICAgICBpZiAoZW5xdWV1ZVBhc3N3
b3JkVmFsdWVDaGFuZ2VOb3RpZmljYXRpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxlT2JqZWN0KCk7CisgICAgfQorCisg
ICAgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wo
b2JqZWN0LCBkZWxldGVkVGV4dCwgaW5zZXJ0ZWRUZXh0LCB0ZXh0Q29udHJvbCk7CisjZWxzZQor
ICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCB0ZXh0Q2hhbmdl
Rm9yRWRpdFR5cGUoZGVsZXRpb25UeXBlKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgZGVsZXRlZFRleHQpOworICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRp
b24ob2JqZWN0LCB0ZXh0Q2hhbmdlRm9yRWRpdFR5cGUoaW5zZXJ0aW9uVHlwZSksIHBvc2l0aW9u
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGluc2VydGVkVGV4dCk7CisjZW5kaWYKK30KKwog
Ym9vbCBBWE9iamVjdENhY2hlOjplbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlv
bihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgaWYgKCFpc1Bhc3N3b3JkRmll
bGRPckNvbnRhaW5lZEJ5UGFzc3dvcmRGaWVsZChvYmplY3QpKQpAQCAtMjA4Myw0NSArMjEwNCw3
NyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjphY2NlCiAgICAgcmV0dXJu
IHRoaXMtPmdldE9yQ3JlYXRlKGRvbU5vZGUpOwogfQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnRl
eHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2Vy
RGF0YSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQorc3RkOjpvcHRpb25hbDxU
ZXh0TWFya2VyRGF0YT4gQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogewotICAgIC8vIFRoaXMg
bWVtb3J5IG11c3QgYmUgYnplcm8nZCBzbyBpbnN0YW5jZXMgb2YgVGV4dE1hcmtlckRhdGEgY2Fu
IGJlIHRlc3RlZCBmb3IgYnl0ZS1lcXVpdmFsZW5jZS4KLSAgICAvLyBUaGlzIGFsc28gYWxsb3dz
IGNhbGxlcnMgdG8gY2hlY2sgZm9yIGZhaWx1cmUgYnkgbG9va2luZyBhdCB0ZXh0TWFya2VyRGF0
YSB1cG9uIHJldHVybi4KLSAgICBtZW1zZXQoJnRleHRNYXJrZXJEYXRhLCAwLCBzaXplb2YoVGV4
dE1hcmtlckRhdGEpKTsKLSAgICAKICAgICBpZiAodmlzaWJsZVBvcy5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCiAgICAgUG9z
aXRpb24gZGVlcFBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBk
b21Ob2RlID0gZGVlcFBvcy5kZXByZWNhdGVkTm9kZSgpOwogICAgIEFTU0VSVChkb21Ob2RlKTsK
ICAgICBpZiAoIWRvbU5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKwogICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PigqZG9tTm9kZSkg
JiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmRvbU5vZGUpLmlzUGFzc3dvcmRGaWVsZCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
ICAgICAvLyBJZiB0aGUgdmlzaWJsZSBwb3NpdGlvbiBoYXMgYW4gYW5jaG9yIHR5cGUgcmVmZXJy
aW5nIHRvIGEgbm9kZSBvdGhlciB0aGFuIHRoZSBhbmNob3JlZCBub2RlLCB3ZSBzaG91bGQKICAg
ICAvLyBzZXQgdGhlIHRleHQgbWFya2VyIGRhdGEgd2l0aCBDaGFyYWN0ZXJPZmZzZXQgc28gdGhh
dCB0aGUgb2Zmc2V0IHdpbGwgY29ycmVzcG9uZCB0byB0aGUgbm9kZS4KICAgICBDaGFyYWN0ZXJP
ZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0RnJvbVZpc2libGVQb3NpdGlv
bih2aXNpYmxlUG9zKTsKICAgICBpZiAoZGVlcFBvcy5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246
OlBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBkZWVwUG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlv
bjo6UG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW4pIHsKKyAgICAgICAgVGV4dE1hcmtlckRhdGEgdGV4
dE1hcmtlckRhdGE7CiAgICAgICAgIHRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KHRl
eHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJPZmZzZXQpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0ZXh0TWFya2VyRGF0YTsKICAgICB9Ci0gICAgCisKICAgICAvLyBmaW5kIG9yIGNy
ZWF0ZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCBmb3IgdGhpcyBub2RlCiAgICAgQVhPYmplY3RD
YWNoZSogY2FjaGUgPSBkb21Ob2RlLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKTsKICAgICBS
ZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gY2FjaGUtPmdldE9yQ3JlYXRlKGRvbU5v
ZGUpOwotICAgIAorCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CiAgICAgdGV4
dE1hcmtlckRhdGEuYXhJRCA9IG9iai5nZXQoKS0+YXhPYmplY3RJRCgpOwogICAgIHRleHRNYXJr
ZXJEYXRhLm5vZGUgPSBkb21Ob2RlOwogICAgIHRleHRNYXJrZXJEYXRhLm9mZnNldCA9IGRlZXBQ
b3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICB0ZXh0TWFya2VyRGF0YS5hZmZpbml0
eSA9IHZpc2libGVQb3MuYWZmaW5pdHkoKTsKLSAgICAKKwogICAgIHRleHRNYXJrZXJEYXRhLmNo
YXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldC5vZmZzZXQ7CiAgICAgdGV4dE1hcmtlckRh
dGEuY2hhcmFjdGVyU3RhcnRJbmRleCA9IGNoYXJhY3Rlck9mZnNldC5zdGFydEluZGV4OwotICAg
IAorCiAgICAgY2FjaGUtPnNldE5vZGVJblVzZShkb21Ob2RlKTsKKworICAgIHJldHVybiB0ZXh0
TWFya2VyRGF0YTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBleGl0cyBhcyBhIHBlcmZvcm1hbmNl
IG9wdGltaXphdGlvbiB0byBhdm9pZCBhIHN5bmNocm9ub3VzIGxheW91dC4KK3N0ZDo6b3B0aW9u
YWw8VGV4dE1hcmtlckRhdGE+IEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yRmlyc3RQ
b3NpdGlvbkluVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250
cm9sKQoreworICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0RWxlbWVu
dCA9IHRleHRDb250cm9sLmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBpZiAoIWlubmVyVGV4dEVs
ZW1lbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoaXM8SFRNTElu
cHV0RWxlbWVudD4odGV4dENvbnRyb2wpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHRl
eHRDb250cm9sKS5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIFBvc2l0aW9uIGZpcnN0UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKGlu
bmVyVGV4dEVsZW1lbnQpOworICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBpbm5lclRleHRFbGVtZW50
LT5maXJzdENoaWxkKCk7CisgICAgaWYgKCFmaXJzdENoaWxkKQorICAgICAgICBmaXJzdENoaWxk
ID0gaW5uZXJUZXh0RWxlbWVudDsKKyAgICBDb250YWluZXJOb2RlKiBlZGl0aW5nSG9zdCA9IGhp
Z2hlc3RFZGl0YWJsZVJvb3QoZmlyc3RQb3NpdGlvbik7CisKKyAgICBBWE9iamVjdENhY2hlKiBj
YWNoZSA9IHRleHRDb250cm9sLmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpOworICAgIFJlZlB0
cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBjYWNoZS0+Z2V0T3JDcmVhdGUoZWRpdGluZ0hv
c3QpOworCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CisgICAgdGV4dE1hcmtl
ckRhdGEuYXhJRCA9IG9iai5nZXQoKS0+YXhPYmplY3RJRCgpOworICAgIHRleHRNYXJrZXJEYXRh
Lm5vZGUgPSBmaXJzdENoaWxkOworICAgIHRleHRNYXJrZXJEYXRhLm9mZnNldCA9IDA7CisgICAg
dGV4dE1hcmtlckRhdGEuYWZmaW5pdHkgPSBET1dOU1RSRUFNOworICAgIHRleHRNYXJrZXJEYXRh
LmNoYXJhY3Rlck9mZnNldCA9IDA7CisgICAgdGV4dE1hcmtlckRhdGEuY2hhcmFjdGVyU3RhcnRJ
bmRleCA9IDA7CisKKyAgICBjYWNoZS0+c2V0Tm9kZUluVXNlKCZ0ZXh0Q29udHJvbCk7CisKKyAg
ICByZXR1cm4gdGV4dE1hcmtlckRhdGE7CiB9CiAKIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENh
Y2hlOjpuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVy
T2Zmc2V0LCBib29sIGlnbm9yZU5leHROb2RlU3RhcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEhUTUxBcmVhRWxlbWVudDsKK2NsYXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZW5kZXJCbG9jazsKQEAgLTUxLDEz
ICs1MiwxMyBAQCBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiBjbGFzcyBXaWRnZXQ7CiAKIHN0cnVj
dCBUZXh0TWFya2VyRGF0YSB7Ci0gICAgQVhJRCBheElEOwotICAgIE5vZGUqIG5vZGU7Ci0gICAg
aW50IG9mZnNldDsKLSAgICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleDsKLSAgICBpbnQgY2hhcmFj
dGVyT2Zmc2V0OwotICAgIGJvb2wgaWdub3JlZDsKLSAgICBFQWZmaW5pdHkgYWZmaW5pdHk7Cisg
ICAgQVhJRCBheElEIHsgMCB9OworICAgIE5vZGUqIG5vZGUgeyBudWxscHRyIH07CisgICAgaW50
IG9mZnNldCB7IDAgfTsKKyAgICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleCB7IDAgfTsKKyAgICBp
bnQgY2hhcmFjdGVyT2Zmc2V0IHsgMCB9OworICAgIGJvb2wgaWdub3JlZCB7IGZhbHNlIH07Cisg
ICAgRUFmZmluaXR5IGFmZmluaXR5IHsgRE9XTlNUUkVBTSB9OwogfTsKIAogc3RydWN0IENoYXJh
Y3Rlck9mZnNldCB7CkBAIC0yMTIsNyArMjEzLDggQEAgcHVibGljOgogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9iamVjdEZyb21BWElEKEFYSUQgaWQpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
cy5nZXQoaWQpOyB9CiAKICAgICAvLyBUZXh0IG1hcmtlciB1dGlsaXRpZXMuCi0gICAgdm9pZCB0
ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOworICAgIHN0ZDo6b3B0aW9uYWw8VGV4dE1hcmtlckRhdGE+IHRleHRN
YXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAg
IHN0ZDo6b3B0aW9uYWw8VGV4dE1hcmtlckRhdGE+IHRleHRNYXJrZXJEYXRhRm9yRmlyc3RQb3Np
dGlvbkluVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmKTsKICAgICB2b2lk
IHRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiwgY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZvck5leHRDaGFyYWN0
ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICB2
b2lkIHRleHRNYXJrZXJEYXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRh
dGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKQEAgLTMwMCw2ICszMDIsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oTm9kZSosIEFYVGV4
dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2
b2lkIHBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBl
IGRlbGV0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgQVhUZXh0RWRpdFR5cGUg
aW5zZXJ0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOworICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRl
eHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBkZWxl
dGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQpOwogICAgIHZvaWQgcG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRl
bnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJ
bnRlbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0TGl2ZVJlZ2lv
bkNoYW5nZU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CkBAIC0zMzcsNiArMzQw
LDcgQEAgcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcG9zdFRleHRT
dGF0ZUNoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBjb25z
dCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICAg
ICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmls
aXR5T2JqZWN0KiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOworICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0
aW9uRm9yVGV4dENvbnRyb2woQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IFN0cmluZyYgZGVs
ZXRlZFRleHQsIGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCYpOwogICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0
aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwg
QVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwog
I2Vsc2UKICAgICBzdGF0aWMgQVhUZXh0Q2hhbmdlIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRl
eHRFZGl0VHlwZSk7CkBAIC00OTksNiArNTAzLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6aGFuZGxlU2Nyb2xsZQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQm
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hl
Ojpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBB
WE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uKE5vZGUqLCBBWFRl
eHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIHsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxUZXh0Rm9y
bUNvbnRyb2wmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KIGlubGluZSB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIERv
Y3VtZW50KiwgQVhOb3RpZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGlu
ZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiwgQVhO
b3RpZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGluZSB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oTm9kZSosIEFYTm90aWZpY2F0aW9uLCBQb3N0VGFy
Z2V0LCBQb3N0VHlwZSkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9BWE9iamVjdENhY2hlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0JKHJldmlzaW9uIDIxODgyMikKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTExMyw2ICsxMTMsMTEgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4
dFJlcGxhY2VtZW50UAogICAgIHBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIEFYVmFs
dWVDaGFuZ2VkKTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50
UGxhdGZvcm1Ob3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50JikKK3sKKyAgICBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCBBWFZhbHVl
Q2hhbmdlZCk7Cit9CisKIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0
Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheEZyYW1lT2JqZWN0LCBBWExv
YWRpbmdFdmVudCBsb2FkaW5nRXZlbnQpCiB7CiAgICAgaWYgKCFheEZyYW1lT2JqZWN0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDIxODgy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwxMCBAQCAt
IChpZClpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgYWNjZXNzCiAKICsgKFdlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246KFZpc2libGVQ
b3NpdGlvbiYpdmlzaWJsZVBvcyBjYWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGUKIHsKLSAgICBU
ZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFG
b3JWaXNpYmxlUG9zaXRpb24odGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOwotICAgIAotICAg
IHJldHVybiBbW1tXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBhbGxvY10gaW5pdFdpdGhUZXh0
TWFya2VyOiZ0ZXh0TWFya2VyRGF0YSBjYWNoZTpjYWNoZV0gYXV0b3JlbGVhc2VdOworICAgIGF1
dG8gdGV4dE1hcmtlckRhdGEgPSBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRp
b24odGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOworICAgIGlmICghdGV4dE1hcmtlckRhdGEp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbW1dlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyIGFsbG9jXSBpbml0V2l0aFRleHRNYXJrZXI6JnRleHRNYXJrZXJEYXRhLnZhbHVlKCkg
Y2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNlXTsKIH0KIAogKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgKil0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0Jilj
aGFyYWN0ZXJPZmZzZXQgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0J
KHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FY
T2JqZWN0Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwNyw3ICs0MDcsMjIgQEAgdm9p
ZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlUAogICAgIFt1c2VySW5mbyByZWxl
YXNlXTsKIH0KIAotc3RhdGljIE5TRGljdGlvbmFyeSAqdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGlj
dGlvbmFyeShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIEFYVGV4dEVkaXRUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQor
c3RhdGljIHZvaWQgYWRkVGV4dE1hcmtlckZvcihOU011dGFibGVEaWN0aW9uYXJ5KiBjaGFuZ2Us
IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3Np
dGlvbikKK3sKKyAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKKyAgICAgICAgaWYgKGlk
IHRleHRNYXJrZXIgPSBbb2JqZWN0LndyYXBwZXIoKSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0
aW9uOnBvc2l0aW9uXSkKKyAgICAgICAgICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHRNYXJrZXIg
Zm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZVN0YXJ0TWFya2VyXTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIGFkZFRleHRNYXJrZXJGb3IoTlNNdXRhYmxlRGljdGlvbmFyeSog
Y2hhbmdlLCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QsIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50JiB0ZXh0Q29udHJvbCkKK3sKKyAgICBpZiAoaWQgdGV4dE1hcmtlciA9IFtvYmplY3Qu
d3JhcHBlcigpIHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbDp0ZXh0Q29u
dHJvbF0pCisgICAgICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHRNYXJrZXIgZm9yS2V5Ok5TQWNj
ZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZVN0YXJ0TWFya2VyXTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFRleHRNYXJrZXJUYXJnZXRUeXBlPgorc3RhdGljIE5TRGljdGlvbmFyeSAqdGV4dFJl
cGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeShBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QsIEFY
VGV4dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBUZXh0TWFya2VyVGFyZ2V0
VHlwZSYgbWFya2VyVGFyZ2V0KQogewogICAgIE5TU3RyaW5nICp0ZXh0ID0gKE5TU3RyaW5nICop
c3RyaW5nOwogICAgIE5TVUludGVnZXIgbGVuZ3RoID0gW3RleHQgbGVuZ3RoXTsKQEAgLTQyMCwx
MCArNDM1LDcgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqdGV4dFJlcGxhY2VtZW50Q2hhbgogICAg
ICAgICB0ZXh0ID0gW3RleHQgc3Vic3RyaW5nVG9JbmRleDpBWFZhbHVlQ2hhbmdlVHJ1bmNhdGlv
bkxlbmd0aF07CiAgICAgfQogICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHQgZm9yS2V5Ok5TQWNj
ZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZV07Ci0gICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgp
KSB7Ci0gICAgICAgIGlmIChpZCB0ZXh0TWFya2VyID0gW29iamVjdC0+d3JhcHBlcigpIHRleHRN
YXJrZXJGb3JWaXNpYmxlUG9zaXRpb246cG9zaXRpb25dKQotICAgICAgICAgICAgW2NoYW5nZSBz
ZXRPYmplY3Q6dGV4dE1hcmtlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVl
U3RhcnRNYXJrZXJdOwotICAgIH0KKyAgICBhZGRUZXh0TWFya2VyRm9yKGNoYW5nZSwgb2JqZWN0
LCBtYXJrZXJUYXJnZXQpOwogICAgIHJldHVybiBbY2hhbmdlIGF1dG9yZWxlYXNlXTsKIH0KIApA
QCAtNDM1LDYgKzQ0NywyMyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VQCiAgICAgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKG9iamVjdCwg
QVhUZXh0RWRpdFR5cGVVbmtub3duLCBlbXB0eVN0cmluZygpLCB0eXBlLCB0ZXh0LCBwb3NpdGlv
bik7CiB9CiAKK3N0YXRpYyB2b2lkIHBvc3RVc2VySW5mb0ZvckNoYW5nZXMoQWNjZXNzaWJpbGl0
eU9iamVjdCYgcm9vdFdlYkFyZWEsIEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgTlNNdXRh
YmxlQXJyYXkqIGNoYW5nZXMpCit7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqdXNlckluZm8g
PSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6NF07CisgICAg
W3VzZXJJbmZvIHNldE9iamVjdDpAKHBsYXRmb3JtQ2hhbmdlVHlwZUZvcldlYkNvcmVDaGFuZ2VU
eXBlKEFYVGV4dFN0YXRlQ2hhbmdlVHlwZUVkaXQpKSBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4
dFN0YXRlQ2hhbmdlVHlwZUtleV07CisgICAgaWYgKGNoYW5nZXMuY291bnQpCisgICAgICAgIFt1
c2VySW5mbyBzZXRPYmplY3Q6Y2hhbmdlcyBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5n
ZVZhbHVlc107CisKKyAgICBpZiAoaWQgd3JhcHBlciA9IG9iamVjdC53cmFwcGVyKCkpCisgICAg
ICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6d3JhcHBlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4
dENoYW5nZUVsZW1lbnRdOworCisgICAgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKHJv
b3RXZWJBcmVhLndyYXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0
aW9uLCB1c2VySW5mbyk7CisgICAgaWYgKHJvb3RXZWJBcmVhLndyYXBwZXIoKSAhPSBvYmplY3Qu
d3JhcHBlcigpKQorICAgICAgICBBWFBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8ob2JqZWN0
LndyYXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0aW9uLCB1c2Vy
SW5mbyk7CisKKyAgICBbdXNlckluZm8gcmVsZWFzZV07Cit9CisKIHZvaWQgQVhPYmplY3RDYWNo
ZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iamVjdCwgQVhUZXh0RWRpdFR5cGUgZGVsZXRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGRlbGV0ZWRUZXh0LCBBWFRleHRFZGl0VHlwZSBpbnNlcnRpb25UeXBlLCBjb25zdCBTdHJpbmcm
IGluc2VydGVkVGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBp
ZiAoIW9iamVjdCkKQEAgLTQ0MywyNiArNDcyLDMwIEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9z
dFRleHRSZXBsYWNlbWVudFAKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqdXNlckluZm8gPSBbW05TTXV0YWJsZURpY3Rpb25hcnkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6NF07Ci0gICAgW3VzZXJJbmZvIHNldE9iamVjdDpAKHBs
YXRmb3JtQ2hhbmdlVHlwZUZvcldlYkNvcmVDaGFuZ2VUeXBlKEFYVGV4dFN0YXRlQ2hhbmdlVHlw
ZUVkaXQpKSBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dFN0YXRlQ2hhbmdlVHlwZUtleV07Ci0K
ICAgICBOU011dGFibGVBcnJheSAqY2hhbmdlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6Ml07Ci0gICAgaWYgKE5TRGljdGlvbmFyeSAqY2hhbmdlID0gdGV4dFJl
cGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeShvYmplY3QsIGRlbGV0aW9uVHlwZSwgZGVsZXRlZFRl
eHQsIHBvc2l0aW9uKSkKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFj
ZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KCpvYmplY3QsIGRlbGV0aW9uVHlwZSwgZGVsZXRlZFRleHQs
IHBvc2l0aW9uKSkKICAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07Ci0gICAgaWYg
KE5TRGljdGlvbmFyeSAqY2hhbmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeShv
YmplY3QsIGluc2VydGlvblR5cGUsIGluc2VydGVkVGV4dCwgcG9zaXRpb24pKQorICAgIGlmIChO
U0RpY3Rpb25hcnkgKmNoYW5nZSA9IHRleHRSZXBsYWNlbWVudENoYW5nZURpY3Rpb25hcnkoKm9i
amVjdCwgaW5zZXJ0aW9uVHlwZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbikpCiAgICAgICAgIFtj
aGFuZ2VzIGFkZE9iamVjdDpjaGFuZ2VdOwotICAgIGlmIChjaGFuZ2VzLmNvdW50KQotICAgICAg
ICBbdXNlckluZm8gc2V0T2JqZWN0OmNoYW5nZXMgZm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRD
aGFuZ2VWYWx1ZXNdOworICAgIHBvc3RVc2VySW5mb0ZvckNoYW5nZXMoKnJvb3RXZWJBcmVhKCks
ICpvYmplY3QsIGNoYW5nZXMpOwogICAgIFtjaGFuZ2VzIHJlbGVhc2VdOworfQogCi0gICAgaWYg
KGlkIHdyYXBwZXIgPSBvYmplY3QtPndyYXBwZXIoKSkKLSAgICAgICAgW3VzZXJJbmZvIHNldE9i
amVjdDp3cmFwcGVyIGZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlRWxlbWVudF07Cit2
b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlv
bkZvclRleHRDb250cm9sKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50JiB0ZXh0Q29udHJvbCkKK3sKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAg
b2JqZWN0ID0gcm9vdFdlYkFyZWEoKTsKIAotICAgIEFYUG9zdE5vdGlmaWNhdGlvbldpdGhVc2Vy
SW5mbyhyb290V2ViQXJlYSgpLT53cmFwcGVyKCksIE5TQWNjZXNzaWJpbGl0eVZhbHVlQ2hhbmdl
ZE5vdGlmaWNhdGlvbiwgdXNlckluZm8pOwotICAgIGlmIChyb290V2ViQXJlYSgpLT53cmFwcGVy
KCkgIT0gb2JqZWN0LT53cmFwcGVyKCkpCi0gICAgICAgIEFYUG9zdE5vdGlmaWNhdGlvbldpdGhV
c2VySW5mbyhvYmplY3QtPndyYXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90
aWZpY2F0aW9uLCB1c2VySW5mbyk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybjsK
IAotICAgIFt1c2VySW5mbyByZWxlYXNlXTsKKyAgICBOU011dGFibGVBcnJheSAqY2hhbmdlcyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Ml07CisgICAgaWYgKE5T
RGljdGlvbmFyeSAqY2hhbmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeSgqb2Jq
ZWN0LCBBWFRleHRFZGl0VHlwZURlbGV0ZSwgZGVsZXRlZFRleHQsIHRleHRDb250cm9sKSkKKyAg
ICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07CisgICAgaWYgKE5TRGljdGlvbmFyeSAq
Y2hhbmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeSgqb2JqZWN0LCBBWFRleHRF
ZGl0VHlwZUluc2VydCwgaW5zZXJ0ZWRUZXh0LCB0ZXh0Q29udHJvbCkpCisgICAgICAgIFtjaGFu
Z2VzIGFkZE9iamVjdDpjaGFuZ2VdOworICAgIHBvc3RVc2VySW5mb0ZvckNoYW5nZXMoKnJvb3RX
ZWJBcmVhKCksICpvYmplY3QsIGNoYW5nZXMpOworICAgIFtjaGFuZ2VzIHJlbGVhc2VdOwogfQog
CiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRp
b24oQWNjZXNzaWJpbGl0eU9iamVjdCogYXhGcmFtZU9iamVjdCwgQVhMb2FkaW5nRXZlbnQgbG9h
ZGluZ0V2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgJ
KHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBAIGNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7CiBzdHJ1Y3QgQWNjZXNzaWJpbGl0
eVNlYXJjaENyaXRlcmlhOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFz
cyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDsKIGNsYXNzIFBhdGg7CiBjbGFzcyBWaXNpYmxl
UG9zaXRpb247CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgJ
KHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDcgQEAgQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcgogCiAtIChp
ZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczooY29uc3QgV2ViQ29yZTo6Vmlz
aWJsZVBvc2l0aW9uJilzdGFydFBvc2l0aW9uIGVuZFBvc2l0aW9uOihjb25zdCBXZWJDb3JlOjpW
aXNpYmxlUG9zaXRpb24mKWVuZFBvc2l0aW9uOwogLSAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQ
b3NpdGlvbjooY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJil2aXNpYmxlUG9zOworLSAo
aWQpdGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOihXZWJDb3JlOjpIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCYpdGV4dENvbnRyb2w7CiAKIC8vIFdoZW4gYSBwbHVnaW4g
dXNlcyBhIFdlYktpdCBjb250cm9sIHRvIGFjdCBhcyBhIHN1cnJvZ2F0ZSB2aWV3IChlLmcuIFBE
RiB1c2UgV2ViS2l0IHRvIGNyZWF0ZSB0ZXh0IGZpZWxkcykuCiAtIChpZClhc3NvY2lhdGVkUGx1
Z2luUGFyZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0J
KHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02ODEs
MTMgKzY4MSwxMiBAQCAtIChDaGFyYWN0ZXJPZmZzZXQpY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4CiBz
dGF0aWMgaWQgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihBWE9iamVjdENhY2hlKiBjYWNo
ZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogewogICAgIEFTU0VSVChjYWNo
ZSk7Ci0gICAgCi0gICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0gICAgY2FjaGUt
PnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2aXNpYmxl
UG9zKTsKLSAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQpCisKKyAgICBhdXRvIHRleHRNYXJr
ZXJEYXRhID0gY2FjaGUtPnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQ
b3MpOworICAgIGlmICghdGV4dE1hcmtlckRhdGEpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
Ci0gICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKHdrQ3JlYXRlQVhUZXh0TWFya2VyKCZ0ZXh0
TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhKSkpOworCisgICAgcmV0dXJuIENGQnJp
ZGdpbmdSZWxlYXNlKHdrQ3JlYXRlQVhUZXh0TWFya2VyKCZ0ZXh0TWFya2VyRGF0YS52YWx1ZSgp
LCBzaXplb2YodGV4dE1hcmtlckRhdGEudmFsdWUoKSkpKTsKIH0KIAogLSAoaWQpdGV4dE1hcmtl
ckZvclZpc2libGVQb3NpdGlvbjooY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpdmlzaWJsZVBvcwpA
QCAtNjk1LDYgKzY5NCwxOSBAQCAtIChpZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihj
b25zCiAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKSwgdmlzaWJsZVBvcyk7CiB9CiAKKy0gKGlkKXRleHRNYXJrZXJGb3JGaXJz
dFBvc2l0aW9uSW5UZXh0Q29udHJvbDooSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgJil0ZXh0
Q29udHJvbAoreworICAgIGF1dG8gKmNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsK
KyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgYXV0byB0ZXh0TWFy
a2VyRGF0YSA9IGNhY2hlLT50ZXh0TWFya2VyRGF0YUZvckZpcnN0UG9zaXRpb25JblRleHRDb250
cm9sKHRleHRDb250cm9sKTsKKyAgICBpZiAoIXRleHRNYXJrZXJEYXRhKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKHdrQ3JlYXRlQVhUZXh0TWFy
a2VyKCZ0ZXh0TWFya2VyRGF0YS52YWx1ZSgpLCBzaXplb2YodGV4dE1hcmtlckRhdGEudmFsdWUo
KSkpKTsKK30KKwogc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0
TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBDRlR5cGVSZWYgdGV4dE1hcmtlcikKIHsKICAg
ICBBU1NFUlQoY2FjaGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAy
MTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDcsNiArMTA3LDcgQEAKICNpbmNsdWRlICJKU0xhenlFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkxhbmd1YWdlLmgiCisjaW5jbHVk
ZSAiTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCkBAIC0xOTE0LDYg
KzE5MTUsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVTdHlsZUlmTmVlZGVkKCkKIAogdm9pZCBE
b2N1bWVudDo6dXBkYXRlTGF5b3V0KCkKIHsKKyAgICBBU1NFUlQoTGF5b3V0RGlzYWxsb3dlZFNj
b3BlOjppc0xheW91dEFsbG93ZWQoKSk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAog
ICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdmlldygpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDIx
ODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKKyNpbmNsdWRlICJMYXlvdXREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCiAjaW5jbHVk
ZSAiTm9kZVRyYXZlcnNhbC5oIgpAQCAtNTQ5LDcgKzU1MCw4IEBAIHN0YXRpYyBTdHJpbmcgaW5u
ZXJUZXh0VmFsdWVGcm9tKFRleHRDb24KIAogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6c2V0SW5uZXJUZXh0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBUZXh0Q29u
dHJvbElubmVyVGV4dEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKKyAg
ICBMYXlvdXREaXNhbGxvd2VkU2NvcGUgbGF5b3V0RGlzYWxsb3dlZFNjb3BlKExheW91dERpc2Fs
bG93ZWRTY29wZTo6UmVhc29uOjpQZXJmb3JtYW5jZU9wdGltaXphdGlvbik7CisgICAgUmVmUHRy
PFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudD4gaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVu
dCgpOwogICAgIGlmICghaW5uZXJUZXh0KQogICAgICAgICByZXR1cm47CiAKQEAgLTU3Nyw3ICs1
NzksNyBAQCB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lCiAjaWYgSEFW
RShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShDT0NPQSkKICAgICAgICAgaWYgKHRleHRJc0No
YW5nZWQgJiYgcmVuZGVyZXIoKSkgewogICAgICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNh
Y2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgICAgICAg
ICBjYWNoZS0+cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbih0aGlzLCBBWFRleHRFZGl0
VHlwZURlbGV0ZSwgcHJldmlvdXNWYWx1ZSwgQVhUZXh0RWRpdFR5cGVJbnNlcnQsIHZhbHVlLCBW
aXNpYmxlUG9zaXRpb24oUG9zaXRpb24odGhpcywgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVB
bmNob3IpKSk7CisgICAgICAgICAgICAgICAgY2FjaGUtPnBvc3RUZXh0UmVwbGFjZW1lbnROb3Rp
ZmljYXRpb25Gb3JUZXh0Q29udHJvbCgqdGhpcywgcHJldmlvdXNWYWx1ZSwgdmFsdWUpOwogICAg
ICAgICB9CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkxheW91dERpc2FsbG93ZWRTY29wZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisKK0xheW91dERpc2FsbG93ZWRTY29wZSogTGF5b3V0RGlz
YWxsb3dlZFNjb3BlOjpzX2N1cnJlbnRBc3NlcnRpb24gPSBudWxscHRyOworCisjZW5kaWYKKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dERpc2FsbG93ZWRTY29wZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2Vk
U2NvcGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
RGlzYWxsb3dlZFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisKK2NsYXNzIExheW91dERpc2FsbG93ZWRTY29wZSB7CitwdWJsaWM6CisgICAg
ZW51bSBjbGFzcyBSZWFzb24geyBQZXJmb3JtYW5jZU9wdGltaXphdGlvbiB9OworICAgIExheW91
dERpc2FsbG93ZWRTY29wZShSZWFzb24pCisgICAgICAgIDogbV9wcmV2aW91c0Fzc2VydGlvbihz
X2N1cnJlbnRBc3NlcnRpb24pCisgICAgeworICAgICAgICBzX2N1cnJlbnRBc3NlcnRpb24gPSB0
aGlzOworICAgIH0KKworICAgIH5MYXlvdXREaXNhbGxvd2VkU2NvcGUoKQorICAgIHsKKyAgICAg
ICAgc19jdXJyZW50QXNzZXJ0aW9uID0gbV9wcmV2aW91c0Fzc2VydGlvbjsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc0xheW91dEFsbG93ZWQoKSB7IHJldHVybiAhc19jdXJyZW50QXNzZXJ0
aW9uOyB9CisKK3ByaXZhdGU6CisgICAgTGF5b3V0RGlzYWxsb3dlZFNjb3BlKiBtX3ByZXZpb3Vz
QXNzZXJ0aW9uOworICAgIHN0YXRpYyBMYXlvdXREaXNhbGxvd2VkU2NvcGUqIHNfY3VycmVudEFz
c2VydGlvbjsKK307CisKKyNlbHNlCisKK2NsYXNzIExheW91dERpc2FsbG93ZWRTY29wZSB7Citw
dWJsaWM6CisgICAgZW51bSBjbGFzcyBSZWFzb24geyBQZXJmb3JtYW5jZU9wdGltaXphdGlvbiB9
OworICAgIExheW91dERpc2FsbG93ZWRTY29wZShSZWFzb24pIHsgfQorICAgIHN0YXRpYyBib29s
IGlzTGF5b3V0QWxsb3dlZCgpIHsgcmV0dXJuIHRydWU7IH0KK307CisKKyNlbmRpZgorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314074</attachid>
            <date>2017-06-28 17:33:48 -0700</date>
            <delta_ts>2017-06-28 17:53:25 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-173912-20170628173348.patch</filename>
            <type>text/plain</type>
            <size>36444</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE3LTA2LTI4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNhZmFyaSdzIFNwZWVkb21ldGVy
IHNjb3JlIG1hc3NpdmVseSByZWdyZXNzZXMgd2hlbiBhY2Nlc3NpYmlsaXR5IGlzIGVuYWJsZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzkxMgor
CisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgorCisgICAgICAgIFRoZSBidWcg
d2FzIGNhdXNlZCBieSBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0SW5uZXJUZXh0VmFs
dWUgdHJpZ2dlcmluZyBhIHN5bmNocm9ub3VzIGxheW91dAorICAgICAgICB2aWEgY29uc3RydWN0
aW5nIFZpc2libGVQb3NpdGlvbiB3aGVuIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgaXMgcHJlc2Vu
dC4KKworICAgICAgICBBZGRlZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wgd2hpY2ggYXZvaWRzIHRoZSBjb25zdHJ1Y3Rpb24gb2YK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGFuZCBvdGhlciBtZWFucyBvZiB0cmlnZ2VyaW5nIGEg
c3luY2hyb25vdXMgbGF5b3V0LiBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSBzdWJ0bGUgYnVnCisg
ICAgICAgIHRoYXQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgd2FzIGNyZWF0aW5nIFRleHRN
YXJrZXJEYXRhIHdpdGggYXhJRCBzZXQgdG8gdGhhdCBvZiB0aGUgdGV4dCBjb250cm9sCisgICAg
ICAgIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IGluc2lkZSBp
dHMgc2hhZG93IHRyZWUgZXZlbiB0aG91Z2ggdGhlIHR5cGluZyBjb21tYW5kIHVzZXMKKyAgICAg
ICAgYXhJRCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50LiBXaGlsZSBJIGNvdWxkbid0IGZp
bmQgYW55IHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZSBmcm9tIHRoaXMKKyAgICAgICAg
Y29kZSBjaGFuZ2UsIG5ldyBjb2RlIGlzIG1vcmUgc2VsZi1jb25zaXN0ZW50LgorCisgICAgICAg
IEFsc28gYWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIHdoaWNoIGFzc2VydHMgdGhhdCBubyBz
eW5jaHJvbm91cyBsYXlvdXQgaGFwcGVucyBpbiBzZXRJbm5lclRleHRWYWx1ZQorICAgICAgICBz
byB0aGF0IHdlIGRvbid0IGludHJvZHVjZSBhIG5ldyBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGxp
a2UgdGhpcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3Rpbmcg
dGVzdHMgaW4gYWNjZXNzaWJpbGl0eSBkaXJlY3RvcnkgY292ZXJzIHRoaXMuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDogQWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcC4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJv
bCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRh
dGFGb3JWaXNpYmxlUG9zaXRpb24pOiBNb2Rlcm5pemVkLiBSZXR1cm5zIG9wdGlvbmFsPFRleHRN
YXJrZXJEYXRhPgorICAgICAgICBpbnN0ZWFkIG9mIHRha2luZyBUZXh0TWFya2VyRGF0YSBhcyBh
biBvdXQtYXJndW1lbnQsIGFuZCByZXR1cm5pbmcgd2l0aCBheElEIG9mIDAuCisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvckZpcnN0UG9zaXRpb25JblRl
eHRDb250cm9sKTogQWRkZWQuIFRoaXMgc3BlY2lhbGl6ZWQgdmVyc2lvbgorICAgICAgICBjb25z
dHJ1Y3RzIFRleHRNYXJrZXJEYXRhIGZvciB0aGUgZmlyc3QgcG9zaXRpb24gaW5zaWRlIHRoZSBl
ZGl0YWJsZSByZWdpb24gaW4gYSB0ZXh0IGNvbnRyb2wgd2l0aG91dAorICAgICAgICB0cmlnZ2Vy
aW5nIGEgc3luY2hyb25vdXMgbGF5b3V0LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFya2VyRGF0YSk6IEluaXRpYWxp
emUgZWFjaCBtZW1iZXIgYXV0b21hdGljYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbCk6CisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wpOiBBZGRlZC4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoK1tX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpj
YWNoZTpdKToKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjphZGRUZXh0TWFya2VyRm9yKTogRXh0cmFjdGVkIGZyb20g
dGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeS4gQWRkZWQgYSBuZXcgdmFyaWFudCB3aGlj
aAorICAgICAgICB0YWtlcyBhIHRleHQgZm9ybSBjb250cm9sIGluc3RlYWQuCisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KTogVGVtcGxhdGl6ZWQgdGhp
cyBmdW5jdGlvbiB0byBlaXRoZXIgdGFrZSBWaXNpYmxlUG9zaXRpb24KKyAgICAgICAgYW5kIGNh
bGwgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbiBvciB0YWtlIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50IGFuZCBjYWxsCisgICAgICAgIHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5U
ZXh0Q29udHJvbC4KKyAgICAgICAgKFdlYkNvcmU6OnBvc3RVc2VySW5mb0ZvckNoYW5nZXMpOiBF
eHRyYWN0ZWQgZnJvbSBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZv
cm1Ob3RpZmljYXRpb24pOiAKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RU
ZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKTogQWRkZWQu
CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5oOgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICh0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
dGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOl0pOiBBZGRlZC4KKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBk
YXRlTGF5b3V0KTogQXNzZXJ0IHRoYXQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIGlzIG5vdCBpbiB0
aGUgc3RhY2sgZnJhbWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZXRJbm5lclRleHRWYWx1ZSk6IENhbGwgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sCisgICAgICAgIHRvIGF2b2lkIHRyaWdnZXJpbmcgYSBzeW5jaHJvbm91cyBs
YXlvdXQuIEFsc28gY3JlYXRlIExheW91dERpc2FsbG93ZWRTY29wZSB0byBhdm9pZCBhIHNpbWls
YXIgcGVyZm9ybWFuY2UKKyAgICAgICAgcmVncmVzc2lvbiBmcm9tIGJlaW5nIGludHJvZHVjZWQg
aW4gdGhlIGZ1dHVyZSBpbiB0aGlzIGZ1bmN0aW9uLiBGaW5hbGx5LCBtYWRlIGlubmVyVGV4dCBh
IFJlZlB0ciBmb3IgZXh0cmEKKyAgICAgICAgc2FmZXR5IHNpbmNlIHdlJ3JlIHVzaW5nIGl0IGFm
dGVyIHVwZGF0aW5nIHRoZSBET00gdHJlZS4KKworICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRE
aXNhbGxvd2VkU2NvcGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0RGlz
YWxsb3dlZFNjb3BlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0RGlzYWxsb3dl
ZFNjb3BlOjpMYXlvdXREaXNhbGxvd2VkU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
RGlzYWxsb3dlZFNjb3BlOjp+TGF5b3V0RGlzYWxsb3dlZFNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dERpc2FsbG93ZWRTY29wZTo6aXNMYXlvdXRBbGxvd2VkKToKKwogMjAxNy0wNi0y
OCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnRM
b2FkZXIgc2hvdWxkIGFsd2F5cyBub3RpZnkgdGhlIGNsaWVudCBpZiB0aGVyZSBhcmUgcGVuZGlu
ZyBpY29uIGxvYWRzIHdoZW4gdGhlIGxvYWQgaXMgc3RvcHBlZC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMjUxMCw2ICsyNTEwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAogICAgIHJlbmRlcmluZy9JbmxpbmVJ
dGVyYXRvci5jcHAKICAgICByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKyAgICByZW5kZXJp
bmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBhaW50
ZXIuY3BwCiAgICAgcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAogICAgIHJlbmRlcmluZy9PcmRl
ckl0ZXJhdG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjM3
LDYgKzQyMzcsNyBAQAogCQk5QkM2QzIxQzEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUJDNkMyMUExM0NDQzk3QjAwOEUwMzM3IC8qIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcCAqLzsgfTsKIAkJOUJEMEJGOTMxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2
ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCRDBCRjkxMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmggKi87IH07CiAJ
CTlCRDBCRjk0MTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDBCRjkyMTJBNDJCRjUw
MDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLzsgfTsKKwkJOUJEMUY2ODIxRjA0NjMx
MDAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQxRjY4MTFGMDQ2MzEwMDAxQzlDREQgLyog
TGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTYxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQ0RTkxNDFDNDYyODcyMDA1MDY1QkMgLyogSlND
dXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTcxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZS5oICovOyB9OwogCQk5QkQ0RTkxQTFDNDYyQ0ZDMDA1MDY1QkMg
LyogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDRFOTE4MUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVt
ZW50UmVnaXN0cnkuY3BwICovOyB9OwpAQCAtMTI1MjEsNiArMTI1MjIsOCBAQAogCQk5QkM2QzIx
QTEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQwQkY5MTEyQTQyQkY1MDA3
MkZENDMgLyogU2NvcGVkRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY29wZWRFdmVudFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
RDBCRjkyMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjb3BlZEV2ZW50UXVldWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4MDFGMDQ2MkI4MDAxQzlDREQgLyogTGF5b3V0
RGlzYWxsb3dlZFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dERpc2FsbG93ZWRTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4
MTFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dERpc2FsbG93ZWRTY29wZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRDRFOTE0MUM0NjI4NzIwMDUwNjVCQyAvKiBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJENEU5MTgxQzQ2
MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzOTksNiArMjU0MDIsOCBAQAogCQkJCUJDRUE0ODFB
MDk3RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmNwcCAqLywKIAkJCQlCQ0VBNDgxQjA5
N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5oICovLAogCQkJCTU4MDM3MTYzMUE2NkYx
RDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggKi8sCisJCQkJOUJEMUY2ODExRjA0NjMxMDAw
MUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgKi8sCisJCQkJOUJEMUY2ODAxRjA0
NjJCODAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5oICovLAogCQkJCUExMjBBQ0Ex
MTNGOTk4NDYwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwICovLAogCQkJCUExMjBBQ0Ew
MTNGOTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuaCAqLywKIAkJCQkyRDkwNjYwNDBC
RTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovLApAQCAtMzM3NTEsNiArMzM3NTYs
NyBAQAogCQkJCTk3QUFCRDE4MTRGQTA5RDUwMDc0NTdBRSAvKiBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFERjZEODAwQjky
QTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzgz
REQxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5QkQxRjY4MjFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNj
b3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY1N0E2MEYwMTI1NkIwMDg5MUVCQiAvKiBU
aHJlYWRHbG9iYWxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE4NUJDRjI4MEYzMjc5Q0Uw
MDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0FBM0E2OTkx
OTRBNjRFNzAwMUNCRDI0IC8qIFRpbGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShy
ZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiSFRN
TExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZXRlckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgog
I2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtOTMsNiArOTQsNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMu
aCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCkBAIC0xMjg4LDggKzEyOTAs
MjcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50TgogCiAgICAgcG9z
dFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKG9iamVjdCwgZGVsZXRpb25UeXBl
LCBkZWxldGVkVGV4dCwgaW5zZXJ0aW9uVHlwZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbik7CiAj
ZWxzZQotICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCB0ZXh0
Q2hhbmdlRm9yRWRpdFR5cGUoZGVsZXRpb25UeXBlKSwgcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBkZWxldGVkVGV4dCk7Ci0gICAgbm9kZVRleHRD
aGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShp
bnNlcnRpb25UeXBlKSwgcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpLCBpbnNlcnRlZFRleHQpOworICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3Rp
ZmljYXRpb24ob2JqZWN0LCB0ZXh0Q2hhbmdlRm9yRWRpdFR5cGUoZGVsZXRpb25UeXBlKSwgMCwg
ZGVsZXRlZFRleHQpOworICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2Jq
ZWN0LCB0ZXh0Q2hhbmdlRm9yRWRpdFR5cGUoaW5zZXJ0aW9uVHlwZSksIDAsIGluc2VydGVkVGV4
dCk7CisjZW5kaWYKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50
Tm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRl
eHRDb250cm9sLCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGluc2Vy
dGVkVGV4dCkKK3sKKyAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOwor
CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gZ2V0T3JDcmVhdGUoJnRleHRDb250
cm9sKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBpZiAob2JqZWN0KSB7CisgICAgICAgIGlm
IChlbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlvbihvYmplY3QpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBvYmplY3QgPSBvYmplY3QtPm9ic2VydmFibGVPYmplY3Qo
KTsKKyAgICB9CisKKyAgICBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb25G
b3JUZXh0Q29udHJvbChvYmplY3QsIGRlbGV0ZWRUZXh0LCBpbnNlcnRlZFRleHQsIHRleHRDb250
cm9sKTsKKyNlbHNlCisgICAgbm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmpl
Y3QsIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShkZWxldGlvblR5cGUpLCBwb3NpdGlvbi5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBkZWxldGVkVGV4dCk7CisgICAgbm9kZVRleHRDaGFuZ2VQbGF0
Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShpbnNlcnRpb25U
eXBlKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgaW5zZXJ0ZWRUZXh0KTsK
ICNlbmRpZgogfQogCkBAIC0yMDgzLDQ1ICsyMTA0LDczIEBAIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IEFYT2JqZWN0Q2FjaGU6OmFjY2UKICAgICByZXR1cm4gdGhpcy0+Z2V0T3JDcmVhdGUoZG9tTm9k
ZSk7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9z
aXRpb24oVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJEYXRhLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3MpCitzdGQ6Om9wdGlvbmFsPFRleHRNYXJrZXJEYXRhPiBBWE9iamVjdENh
Y2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3MpCiB7Ci0gICAgLy8gVGhpcyBtZW1vcnkgbXVzdCBiZSBiemVybydkIHNv
IGluc3RhbmNlcyBvZiBUZXh0TWFya2VyRGF0YSBjYW4gYmUgdGVzdGVkIGZvciBieXRlLWVxdWl2
YWxlbmNlLgotICAgIC8vIFRoaXMgYWxzbyBhbGxvd3MgY2FsbGVycyB0byBjaGVjayBmb3IgZmFp
bHVyZSBieSBsb29raW5nIGF0IHRleHRNYXJrZXJEYXRhIHVwb24gcmV0dXJuLgotICAgIG1lbXNl
dCgmdGV4dE1hcmtlckRhdGEsIDAsIHNpemVvZihUZXh0TWFya2VyRGF0YSkpOwotICAgIAogICAg
IGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKICAgICBQb3NpdGlvbiBkZWVwUG9zID0gdmlzaWJsZVBv
cy5kZWVwRXF1aXZhbGVudCgpOwogICAgIE5vZGUqIGRvbU5vZGUgPSBkZWVwUG9zLmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgQVNTRVJUKGRvbU5vZGUpOwogICAgIGlmICghZG9tTm9kZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCiAgICAgaWYg
KGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpkb21Ob2RlKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PigqZG9tTm9kZSkuaXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwogICAgIC8vIElmIHRoZSB2aXNpYmxlIHBv
c2l0aW9uIGhhcyBhbiBhbmNob3IgdHlwZSByZWZlcnJpbmcgdG8gYSBub2RlIG90aGVyIHRoYW4g
dGhlIGFuY2hvcmVkIG5vZGUsIHdlIHNob3VsZAogICAgIC8vIHNldCB0aGUgdGV4dCBtYXJrZXIg
ZGF0YSB3aXRoIENoYXJhY3Rlck9mZnNldCBzbyB0aGF0IHRoZSBvZmZzZXQgd2lsbCBjb3JyZXNw
b25kIHRvIHRoZSBub2RlLgogICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBj
aGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3MpOwogICAgIGlmIChk
ZWVwUG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yIHx8
IGRlZXBQb3MuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJDaGlsZHJl
bikgeworICAgICAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKICAgICAgICAgdGV4
dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEsIGNoYXJhY3Rlck9m
ZnNldCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJEYXRhOwog
ICAgIH0KLSAgICAKKwogICAgIC8vIGZpbmQgb3IgY3JlYXRlIGFuIGFjY2Vzc2liaWxpdHkgb2Jq
ZWN0IGZvciB0aGlzIG5vZGUKICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvbU5vZGUtPmRv
Y3VtZW50KCkuYXhPYmplY3RDYWNoZSgpOwogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0
PiBvYmogPSBjYWNoZS0+Z2V0T3JDcmVhdGUoZG9tTm9kZSk7Ci0gICAgCisKKyAgICBUZXh0TWFy
a2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKICAgICB0ZXh0TWFya2VyRGF0YS5heElEID0gb2JqLmdl
dCgpLT5heE9iamVjdElEKCk7CiAgICAgdGV4dE1hcmtlckRhdGEubm9kZSA9IGRvbU5vZGU7CiAg
ICAgdGV4dE1hcmtlckRhdGEub2Zmc2V0ID0gZGVlcFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpOwogICAgIHRleHRNYXJrZXJEYXRhLmFmZmluaXR5ID0gdmlzaWJsZVBvcy5hZmZpbml0eSgp
OwotICAgIAorCiAgICAgdGV4dE1hcmtlckRhdGEuY2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFjdGVy
T2Zmc2V0Lm9mZnNldDsKICAgICB0ZXh0TWFya2VyRGF0YS5jaGFyYWN0ZXJTdGFydEluZGV4ID0g
Y2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXg7Ci0gICAgCisKICAgICBjYWNoZS0+c2V0Tm9kZUlu
VXNlKGRvbU5vZGUpOworCisgICAgcmV0dXJuIHRleHRNYXJrZXJEYXRhOworfQorCisvLyBUaGlz
IGZ1bmN0aW9uIGV4aXRzIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRvIGF2b2lkIGEg
c3luY2hyb25vdXMgbGF5b3V0Lgorc3RkOjpvcHRpb25hbDxUZXh0TWFya2VyRGF0YT4gQVhPYmpl
Y3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbChIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCYgdGV4dENvbnRyb2wpCit7CisgICAgVGV4dENvbnRyb2xJ
bm5lclRleHRFbGVtZW50KiBpbm5lclRleHRFbGVtZW50ID0gdGV4dENvbnRyb2wuaW5uZXJUZXh0
RWxlbWVudCgpOworICAgIGlmICghaW5uZXJUZXh0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pih0ZXh0Q29udHJvbCkg
JiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4odGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVs
ZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgUG9zaXRpb24gZmlyc3RQ
b3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk5vZGUoaW5uZXJUZXh0RWxlbWVudCk7CisgICAgTm9k
ZSogZmlyc3RDaGlsZCA9IGlubmVyVGV4dEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICBpZiAo
IWZpcnN0Q2hpbGQpCisgICAgICAgIGZpcnN0Q2hpbGQgPSBpbm5lclRleHRFbGVtZW50OworICAg
IENvbnRhaW5lck5vZGUqIGVkaXRpbmdIb3N0ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChmaXJzdFBv
c2l0aW9uKTsKKworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gdGV4dENvbnRyb2wuZG9jdW1l
bnQoKS5heE9iamVjdENhY2hlKCk7CisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9i
aiA9IGNhY2hlLT5nZXRPckNyZWF0ZShlZGl0aW5nSG9zdCk7CisKKyAgICBUZXh0TWFya2VyRGF0
YSB0ZXh0TWFya2VyRGF0YTsKKyAgICB0ZXh0TWFya2VyRGF0YS5heElEID0gb2JqLmdldCgpLT5h
eE9iamVjdElEKCk7CisgICAgdGV4dE1hcmtlckRhdGEubm9kZSA9IGZpcnN0Q2hpbGQ7CisKKyAg
ICBjYWNoZS0+c2V0Tm9kZUluVXNlKCZ0ZXh0Q29udHJvbCk7CisKKyAgICByZXR1cm4gdGV4dE1h
cmtlckRhdGE7CiB9CiAKIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0Q2hhcmFj
dGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0LCBib29sIGln
bm9yZU5leHROb2RlU3RhcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxBcmVh
RWxlbWVudDsKK2NsYXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OwogY2xhc3MgTm9kZTsK
IGNsYXNzIFBhZ2U7CiBjbGFzcyBSZW5kZXJCbG9jazsKQEAgLTUxLDEzICs1MiwxMyBAQCBjbGFz
cyBWaXNpYmxlUG9zaXRpb247CiBjbGFzcyBXaWRnZXQ7CiAKIHN0cnVjdCBUZXh0TWFya2VyRGF0
YSB7Ci0gICAgQVhJRCBheElEOwotICAgIE5vZGUqIG5vZGU7Ci0gICAgaW50IG9mZnNldDsKLSAg
ICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleDsKLSAgICBpbnQgY2hhcmFjdGVyT2Zmc2V0OwotICAg
IGJvb2wgaWdub3JlZDsKLSAgICBFQWZmaW5pdHkgYWZmaW5pdHk7CisgICAgQVhJRCBheElEIHsg
MCB9OworICAgIE5vZGUqIG5vZGUgeyBudWxscHRyIH07CisgICAgaW50IG9mZnNldCB7IDAgfTsK
KyAgICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleCB7IDAgfTsKKyAgICBpbnQgY2hhcmFjdGVyT2Zm
c2V0IHsgMCB9OworICAgIGJvb2wgaWdub3JlZCB7IGZhbHNlIH07CisgICAgRUFmZmluaXR5IGFm
ZmluaXR5IHsgRE9XTlNUUkVBTSB9OwogfTsKIAogc3RydWN0IENoYXJhY3Rlck9mZnNldCB7CkBA
IC0yMTIsNyArMjEzLDggQEAgcHVibGljOgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVj
dEZyb21BWElEKEFYSUQgaWQpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0cy5nZXQoaWQpOyB9CiAK
ICAgICAvLyBUZXh0IG1hcmtlciB1dGlsaXRpZXMuCi0gICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZv
clZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OworICAgIHN0ZDo6b3B0aW9uYWw8VGV4dE1hcmtlckRhdGE+IHRleHRNYXJrZXJEYXRhRm9yVmlz
aWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAgIHN0ZDo6b3B0aW9uYWw8
VGV4dE1hcmtlckRhdGE+IHRleHRNYXJrZXJEYXRhRm9yRmlyc3RQb3NpdGlvbkluVGV4dENvbnRy
b2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmKTsKICAgICB2b2lkIHRleHRNYXJrZXJEYXRh
Rm9yQ2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0
Jik7CiAgICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZvck5leHRDaGFyYWN0ZXJPZmZzZXQoVGV4dE1h
cmtlckRhdGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICB2b2lkIHRleHRNYXJrZXJE
YXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmLCBjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmKTsKQEAgLTMwMCw2ICszMDIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBv
c3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBlLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2b2lkIHBvc3RUZXh0UmVw
bGFjZW1lbnROb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBlIGRlbGV0aW9uVHlwZSwg
Y29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgQVhUZXh0RWRpdFR5cGUgaW5zZXJ0aW9uVHlwZSwg
Y29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAg
IHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3Qg
U3RyaW5nJiBpbnNlcnRlZFRleHQpOwogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlm
aWNhdGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0TGl2ZVJlZ2lvbkNoYW5nZU5vdGlmaWNh
dGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CkBAIC0zMzcsNiArMzQwLDcgQEAgcHJvdGVjdGVk
OgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZVBsYXRm
b3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBjb25zdCBBWFRleHRTdGF0ZUNo
YW5nZUludGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICAgICB2b2lkIHBvc3RUZXh0
U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhU
ZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAg
IHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRy
b2woQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIGNvbnN0
IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYpOwogICAg
IHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxp
dHlPYmplY3QqLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwgQVhUZXh0RWRpdFR5cGUs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogI2Vsc2UKICAgICBzdGF0
aWMgQVhUZXh0Q2hhbmdlIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRleHRFZGl0VHlwZSk7CkBA
IC00OTksNiArNTAzLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xs
ZQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNh
dGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpw
b3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSwgY29u
c3QgU3RyaW5nJiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpIHsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNl
bWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2wmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
OnBvc3ROb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIERvY3VtZW50KiwgQVhOb3Rp
ZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0
Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiwgQVhOb3RpZmljYXRpb24sIFBv
c3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RO
b3RpZmljYXRpb24oTm9kZSosIEFYTm90aWZpY2F0aW9uLCBQb3N0VGFyZ2V0LCBQb3N0VHlwZSkg
eyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hl
SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FY
T2JqZWN0Q2FjaGVJT1MubW0JKHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEx
Myw2ICsxMTMsMTEgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UAog
ICAgIHBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIEFYVmFsdWVDaGFuZ2VkKTsKIH0K
IAordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmlj
YXRpb25Gb3JUZXh0Q29udHJvbChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JikKK3sKKyAg
ICBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCBBWFZhbHVlQ2hhbmdlZCk7Cit9CisK
IHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlv
bihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheEZyYW1lT2JqZWN0LCBBWExvYWRpbmdFdmVudCBsb2Fk
aW5nRXZlbnQpCiB7CiAgICAgaWYgKCFheEZyYW1lT2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwxMCBAQCAtIChpZClpbml0V2l0aERh
dGE6KE5TRGF0YSAqKWRhdGEgYWNjZXNzCiAKICsgKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
ICopdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246KFZpc2libGVQb3NpdGlvbiYpdmlzaWJs
ZVBvcyBjYWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGUKIHsKLSAgICBUZXh0TWFya2VyRGF0YSB0
ZXh0TWFya2VyRGF0YTsKLSAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRp
b24odGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOwotICAgIAotICAgIHJldHVybiBbW1tXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBhbGxvY10gaW5pdFdpdGhUZXh0TWFya2VyOiZ0ZXh0TWFy
a2VyRGF0YSBjYWNoZTpjYWNoZV0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8gdGV4dE1hcmtlckRh
dGEgPSBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcyk7
CisgICAgaWYgKCF0ZXh0TWFya2VyRGF0YSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1
cm4gW1tbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxsb2NdIGluaXRXaXRoVGV4dE1hcmtl
cjomdGV4dE1hcmtlckRhdGEudmFsdWUoKSBjYWNoZTpjYWNoZV0gYXV0b3JlbGVhc2VdOwogfQog
CiArIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrZXJXaXRoQ2hhcmFjdGVy
T2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldCBjYWNoZTooQVhPYmplY3RD
YWNoZSopY2FjaGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2Jq
ZWN0Q2FjaGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDA3LDcgKzQwNywyMiBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVD
aGFuZ2VQCiAgICAgW3VzZXJJbmZvIHJlbGVhc2VdOwogfQogCi1zdGF0aWMgTlNEaWN0aW9uYXJ5
ICp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCwgQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgcG9zaXRpb24pCitzdGF0aWMgdm9pZCBhZGRUZXh0TWFya2VyRm9yKE5T
TXV0YWJsZURpY3Rpb25hcnkqIGNoYW5nZSwgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0LCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIGlmIChwb3NpdGlvbi5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpZCB0ZXh0TWFya2VyID0gW29iamVjdC53
cmFwcGVyKCkgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpwb3NpdGlvbl0pCisgICAgICAg
IFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHRNYXJrZXIgZm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRD
aGFuZ2VWYWx1ZVN0YXJ0TWFya2VyXTsKK30KKworc3RhdGljIHZvaWQgYWRkVGV4dE1hcmtlckZv
cihOU011dGFibGVEaWN0aW9uYXJ5KiBjaGFuZ2UsIEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVj
dCwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250cm9sKQoreworICAgIGlmIChp
ZCB0ZXh0TWFya2VyID0gW29iamVjdC53cmFwcGVyKCkgdGV4dE1hcmtlckZvckZpcnN0UG9zaXRp
b25JblRleHRDb250cm9sOnRleHRDb250cm9sXSkKKyAgICAgICAgW2NoYW5nZSBzZXRPYmplY3Q6
dGV4dE1hcmtlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVlU3RhcnRNYXJr
ZXJdOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dE1hcmtlclRhcmdldFR5cGU+CitzdGF0
aWMgTlNEaWN0aW9uYXJ5ICp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KEFjY2Vzc2li
aWxpdHlPYmplY3QmIG9iamVjdCwgQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIFRleHRNYXJrZXJUYXJnZXRUeXBlJiBtYXJrZXJUYXJnZXQpCiB7CiAgICAgTlNTdHJp
bmcgKnRleHQgPSAoTlNTdHJpbmcgKilzdHJpbmc7CiAgICAgTlNVSW50ZWdlciBsZW5ndGggPSBb
dGV4dCBsZW5ndGhdOwpAQCAtNDIwLDEwICs0MzUsNyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICp0
ZXh0UmVwbGFjZW1lbnRDaGFuCiAgICAgICAgIHRleHQgPSBbdGV4dCBzdWJzdHJpbmdUb0luZGV4
OkFYVmFsdWVDaGFuZ2VUcnVuY2F0aW9uTGVuZ3RoXTsKICAgICB9CiAgICAgW2NoYW5nZSBzZXRP
YmplY3Q6dGV4dCBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVlXTsKLSAgICBp
ZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgaWYgKGlkIHRleHRNYXJrZXIgPSBb
b2JqZWN0LT53cmFwcGVyKCkgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpwb3NpdGlvbl0p
Ci0gICAgICAgICAgICBbY2hhbmdlIHNldE9iamVjdDp0ZXh0TWFya2VyIGZvcktleTpOU0FjY2Vz
c2liaWxpdHlUZXh0Q2hhbmdlVmFsdWVTdGFydE1hcmtlcl07Ci0gICAgfQorICAgIGFkZFRleHRN
YXJrZXJGb3IoY2hhbmdlLCBvYmplY3QsIG1hcmtlclRhcmdldCk7CiAgICAgcmV0dXJuIFtjaGFu
Z2UgYXV0b3JlbGVhc2VdOwogfQogCkBAIC00MzUsNiArNDQ3LDIzIEBAIHZvaWQgQVhPYmplY3RD
YWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZVAKICAgICBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZv
cm1Ob3RpZmljYXRpb24ob2JqZWN0LCBBWFRleHRFZGl0VHlwZVVua25vd24sIGVtcHR5U3RyaW5n
KCksIHR5cGUsIHRleHQsIHBvc2l0aW9uKTsKIH0KIAorc3RhdGljIHZvaWQgcG9zdFVzZXJJbmZv
Rm9yQ2hhbmdlcyhBY2Nlc3NpYmlsaXR5T2JqZWN0JiByb290V2ViQXJlYSwgQWNjZXNzaWJpbGl0
eU9iamVjdCYgb2JqZWN0LCBOU011dGFibGVBcnJheSogY2hhbmdlcykKK3sKKyAgICBOU011dGFi
bGVEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eTo0XTsKKyAgICBbdXNlckluZm8gc2V0T2JqZWN0OkAocGxhdGZvcm1DaGFu
Z2VUeXBlRm9yV2ViQ29yZUNoYW5nZVR5cGUoQVhUZXh0U3RhdGVDaGFuZ2VUeXBlRWRpdCkpIGZv
cktleTpOU0FjY2Vzc2liaWxpdHlUZXh0U3RhdGVDaGFuZ2VUeXBlS2V5XTsKKyAgICBpZiAoY2hh
bmdlcy5jb3VudCkKKyAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpjaGFuZ2VzIGZvcktleTpO
U0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlVmFsdWVzXTsKKworICAgIGlmIChpZCB3cmFwcGVyID0g
b2JqZWN0LndyYXBwZXIoKSkKKyAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDp3cmFwcGVyIGZv
cktleTpOU0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlRWxlbWVudF07CisKKyAgICBBWFBvc3ROb3Rp
ZmljYXRpb25XaXRoVXNlckluZm8ocm9vdFdlYkFyZWEud3JhcHBlcigpLCBOU0FjY2Vzc2liaWxp
dHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb24sIHVzZXJJbmZvKTsKKyAgICBpZiAocm9vdFdlYkFy
ZWEud3JhcHBlcigpICE9IG9iamVjdC53cmFwcGVyKCkpCisgICAgICAgIEFYUG9zdE5vdGlmaWNh
dGlvbldpdGhVc2VySW5mbyhvYmplY3Qud3JhcHBlcigpLCBOU0FjY2Vzc2liaWxpdHlWYWx1ZUNo
YW5nZWROb3RpZmljYXRpb24sIHVzZXJJbmZvKTsKKworICAgIFt1c2VySW5mbyByZWxlYXNlXTsK
K30KKwogdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3Rp
ZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBBWFRleHRFZGl0VHlwZSBkZWxl
dGlvblR5cGUsIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIEFYVGV4dEVkaXRUeXBlIGluc2Vy
dGlvblR5cGUsIGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHBvc2l0aW9uKQogewogICAgIGlmICghb2JqZWN0KQpAQCAtNDQzLDI2ICs0NzIsMzAgQEAg
dm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UAogICAgIGlmICghb2JqZWN0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5ICp1c2VySW5mbyA9
IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTo0XTsKLSAgICBb
dXNlckluZm8gc2V0T2JqZWN0OkAocGxhdGZvcm1DaGFuZ2VUeXBlRm9yV2ViQ29yZUNoYW5nZVR5
cGUoQVhUZXh0U3RhdGVDaGFuZ2VUeXBlRWRpdCkpIGZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0
U3RhdGVDaGFuZ2VUeXBlS2V5XTsKLQogICAgIE5TTXV0YWJsZUFycmF5ICpjaGFuZ2VzID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eToyXTsKLSAgICBpZiAoTlNEaWN0
aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KG9iamVjdCwg
ZGVsZXRpb25UeXBlLCBkZWxldGVkVGV4dCwgcG9zaXRpb24pKQorICAgIGlmIChOU0RpY3Rpb25h
cnkgKmNoYW5nZSA9IHRleHRSZXBsYWNlbWVudENoYW5nZURpY3Rpb25hcnkoKm9iamVjdCwgZGVs
ZXRpb25UeXBlLCBkZWxldGVkVGV4dCwgcG9zaXRpb24pKQogICAgICAgICBbY2hhbmdlcyBhZGRP
YmplY3Q6Y2hhbmdlXTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFj
ZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KG9iamVjdCwgaW5zZXJ0aW9uVHlwZSwgaW5zZXJ0ZWRUZXh0
LCBwb3NpdGlvbikpCisgICAgaWYgKE5TRGljdGlvbmFyeSAqY2hhbmdlID0gdGV4dFJlcGxhY2Vt
ZW50Q2hhbmdlRGljdGlvbmFyeSgqb2JqZWN0LCBpbnNlcnRpb25UeXBlLCBpbnNlcnRlZFRleHQs
IHBvc2l0aW9uKSkKICAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07Ci0gICAgaWYg
KGNoYW5nZXMuY291bnQpCi0gICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6Y2hhbmdlcyBmb3JL
ZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVlc107CisgICAgcG9zdFVzZXJJbmZvRm9y
Q2hhbmdlcygqcm9vdFdlYkFyZWEoKSwgKm9iamVjdCwgY2hhbmdlcyk7CiAgICAgW2NoYW5nZXMg
cmVsZWFzZV07Cit9CiAKLSAgICBpZiAoaWQgd3JhcHBlciA9IG9iamVjdC0+d3JhcHBlcigpKQot
ICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OndyYXBwZXIgZm9yS2V5Ok5TQWNjZXNzaWJpbGl0
eVRleHRDaGFuZ2VFbGVtZW50XTsKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNl
bWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGluc2Vy
dGVkVGV4dCwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250cm9sKQoreworICAg
IGlmICghb2JqZWN0KQorICAgICAgICBvYmplY3QgPSByb290V2ViQXJlYSgpOwogCi0gICAgQVhQ
b3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKHJvb3RXZWJBcmVhKCktPndyYXBwZXIoKSwgTlNB
Y2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0aW9uLCB1c2VySW5mbyk7Ci0gICAgaWYg
KHJvb3RXZWJBcmVhKCktPndyYXBwZXIoKSAhPSBvYmplY3QtPndyYXBwZXIoKSkKLSAgICAgICAg
QVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKG9iamVjdC0+d3JhcHBlcigpLCBOU0FjY2Vz
c2liaWxpdHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb24sIHVzZXJJbmZvKTsKKyAgICBpZiAoIW9i
amVjdCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgW3VzZXJJbmZvIHJlbGVhc2VdOworICAgIE5T
TXV0YWJsZUFycmF5ICpjaGFuZ2VzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eToyXTsKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1l
bnRDaGFuZ2VEaWN0aW9uYXJ5KCpvYmplY3QsIEFYVGV4dEVkaXRUeXBlRGVsZXRlLCBkZWxldGVk
VGV4dCwgdGV4dENvbnRyb2wpKQorICAgICAgICBbY2hhbmdlcyBhZGRPYmplY3Q6Y2hhbmdlXTsK
KyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0
aW9uYXJ5KCpvYmplY3QsIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCBpbnNlcnRlZFRleHQsIHRleHRD
b250cm9sKSkKKyAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07CisgICAgcG9zdFVz
ZXJJbmZvRm9yQ2hhbmdlcygqcm9vdFdlYkFyZWEoKSwgKm9iamVjdCwgY2hhbmdlcyk7CisgICAg
W2NoYW5nZXMgcmVsZWFzZV07CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5n
RXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheEZyYW1lT2Jq
ZWN0LCBBWExvYWRpbmdFdmVudCBsb2FkaW5nRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2UuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVj
dDsKIHN0cnVjdCBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWE7CiBjbGFzcyBJbnRSZWN0Owog
Y2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OwogY2xh
c3MgUGF0aDsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBAaW50ZXJmYWNlIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyCiAKIC0gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRp
b25zOihjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mKXN0YXJ0UG9zaXRpb24gZW5kUG9z
aXRpb246KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYpZW5kUG9zaXRpb247CiAtIChp
ZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9z
aXRpb24mKXZpc2libGVQb3M7CistIChpZCl0ZXh0TWFya2VyRm9yRmlyc3RQb3NpdGlvbkluVGV4
dENvbnRyb2w6KFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Jil0ZXh0Q29udHJv
bDsKIAogLy8gV2hlbiBhIHBsdWdpbiB1c2VzIGEgV2ViS2l0IGNvbnRyb2wgdG8gYWN0IGFzIGEg
c3Vycm9nYXRlIHZpZXcgKGUuZy4gUERGIHVzZSBXZWJLaXQgdG8gY3JlYXRlIHRleHQgZmllbGRz
KS4KIC0gKGlkKWFzc29jaWF0ZWRQbHVnaW5QYXJlbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTY4MSwxMyArNjgxLDEyIEBAIC0gKENoYXJhY3Rlck9mZnNldClj
aGFyYWN0ZXJPZmZzZXRGb3JUZXgKIHN0YXRpYyBpZCB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0
aW9uKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3MpCiB7CiAgICAgQVNTRVJUKGNhY2hlKTsKLSAgICAKLSAgICBUZXh0TWFya2VyRGF0YSB0ZXh0
TWFya2VyRGF0YTsKLSAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24o
dGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOwotICAgIGlmICghdGV4dE1hcmtlckRhdGEuYXhJ
RCkKKworICAgIGF1dG8gdGV4dE1hcmtlckRhdGEgPSBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JW
aXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcyk7CisgICAgaWYgKCF0ZXh0TWFya2VyRGF0YSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2Uod2tD
cmVhdGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEp
KSk7CisKKyAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2Uod2tDcmVhdGVBWFRleHRNYXJrZXIo
JnRleHRNYXJrZXJEYXRhLnZhbHVlKCksIHNpemVvZih0ZXh0TWFya2VyRGF0YS52YWx1ZSgpKSkp
OwogfQogCiAtIChpZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihjb25zdCBWaXNpYmxl
UG9zaXRpb24gJil2aXNpYmxlUG9zCkBAIC02OTUsNiArNjk0LDE5IEBAIC0gKGlkKXRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnMKICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2li
bGVQb3NpdGlvbihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB2aXNpYmxlUG9zKTsKIH0KIAor
LSAoaWQpdGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOihIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudCAmKXRleHRDb250cm9sCit7CisgICAgYXV0byAqY2FjaGUgPSBtX29i
amVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBhdXRvIHRleHRNYXJrZXJEYXRhID0gY2FjaGUtPnRleHRNYXJrZXJEYXRhRm9y
Rmlyc3RQb3NpdGlvbkluVGV4dENvbnRyb2wodGV4dENvbnRyb2wpOworICAgIGlmICghdGV4dE1h
cmtlckRhdGEpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gQ0ZCcmlkZ2luZ1Jl
bGVhc2Uod2tDcmVhdGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJEYXRhLnZhbHVlKCksIHNpemVv
Zih0ZXh0TWFya2VyRGF0YS52YWx1ZSgpKSkpOworfQorCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIENGVHlw
ZVJlZiB0ZXh0TWFya2VyKQogewogICAgIEFTU0VSVChjYWNoZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsNyBAQAogI2luY2x1ZGUgIkpT
TGF6eUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVk
ZSAiTGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJMYXlvdXREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNs
dWRlICJMb2FkZXJTdHJhdGVneS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJN
YWluRnJhbWUuaCIKQEAgLTE5MTQsNiArMTkxNSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVN0
eWxlSWZOZWVkZWQoKQogCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlvdXQoKQogeworICAgIEFT
U0VSVChMYXlvdXREaXNhbGxvd2VkU2NvcGU6OmlzTGF5b3V0QWxsb3dlZCgpKTsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB2aWV3KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIkxheW91dERpc2FsbG93
ZWRTY29wZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb0V2ZW50RGlzcGF0
Y2hBc3NlcnRpb24uaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCkBAIC01NDksNyArNTUw
LDggQEAgc3RhdGljIFN0cmluZyBpbm5lclRleHRWYWx1ZUZyb20oVGV4dENvbgogCiB2b2lkIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogewotICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0ID0g
aW5uZXJUZXh0RWxlbWVudCgpOworICAgIExheW91dERpc2FsbG93ZWRTY29wZSBsYXlvdXREaXNh
bGxvd2VkU2NvcGUoTGF5b3V0RGlzYWxsb3dlZFNjb3BlOjpSZWFzb246OlBlcmZvcm1hbmNlT3B0
aW1pemF0aW9uKTsKKyAgICBSZWZQdHI8VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50PiBpbm5l
clRleHQgPSBpbm5lclRleHRFbGVtZW50KCk7CiAgICAgaWYgKCFpbm5lclRleHQpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNTc3LDcgKzU3OSw3IEBAIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnNldElubmUKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKENPQ09B
KQogICAgICAgICBpZiAodGV4dElzQ2hhbmdlZCAmJiByZW5kZXJlcigpKSB7CiAgICAgICAgICAg
ICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RD
YWNoZSgpKQotICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZp
Y2F0aW9uKHRoaXMsIEFYVGV4dEVkaXRUeXBlRGVsZXRlLCBwcmV2aW91c1ZhbHVlLCBBWFRleHRF
ZGl0VHlwZUluc2VydCwgdmFsdWUsIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbih0aGlzLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcikpKTsKKyAgICAgICAgICAgICAgICBjYWNoZS0+
cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKCp0aGlzLCBwcmV2
aW91c1ZhbHVlLCB2YWx1ZSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2VkU2NvcGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2VkU2NvcGUuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2Vk
U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKworTGF5b3V0RGlz
YWxsb3dlZFNjb3BlKiBMYXlvdXREaXNhbGxvd2VkU2NvcGU6OnNfY3VycmVudEFzc2VydGlvbiA9
IG51bGxwdHI7CisKKyNlbmRpZgorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0RGlzYWxsb3dlZFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xheW91dERpc2FsbG93ZWRTY29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2VkU2NvcGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKworY2xhc3MgTGF5b3V0RGlzYWxsb3dl
ZFNjb3BlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFJlYXNvbiB7IFBlcmZvcm1hbmNlT3B0
aW1pemF0aW9uIH07CisgICAgTGF5b3V0RGlzYWxsb3dlZFNjb3BlKFJlYXNvbikKKyAgICAgICAg
OiBtX3ByZXZpb3VzQXNzZXJ0aW9uKHNfY3VycmVudEFzc2VydGlvbikKKyAgICB7CisgICAgICAg
IHNfY3VycmVudEFzc2VydGlvbiA9IHRoaXM7CisgICAgfQorCisgICAgfkxheW91dERpc2FsbG93
ZWRTY29wZSgpCisgICAgeworICAgICAgICBzX2N1cnJlbnRBc3NlcnRpb24gPSBtX3ByZXZpb3Vz
QXNzZXJ0aW9uOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzTGF5b3V0QWxsb3dlZCgpIHsg
cmV0dXJuICFzX2N1cnJlbnRBc3NlcnRpb247IH0KKworcHJpdmF0ZToKKyAgICBMYXlvdXREaXNh
bGxvd2VkU2NvcGUqIG1fcHJldmlvdXNBc3NlcnRpb247CisgICAgc3RhdGljIExheW91dERpc2Fs
bG93ZWRTY29wZSogc19jdXJyZW50QXNzZXJ0aW9uOworfTsKKworI2Vsc2UKKworY2xhc3MgTGF5
b3V0RGlzYWxsb3dlZFNjb3BlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFJlYXNvbiB7IFBl
cmZvcm1hbmNlT3B0aW1pemF0aW9uIH07CisgICAgTGF5b3V0RGlzYWxsb3dlZFNjb3BlKFJlYXNv
bikgeyB9CisgICAgc3RhdGljIGJvb2wgaXNMYXlvdXRBbGxvd2VkKCkgeyByZXR1cm4gdHJ1ZTsg
fQorfTsKKworI2VuZGlmCisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314075</attachid>
            <date>2017-06-28 17:53:28 -0700</date>
            <delta_ts>2017-06-28 18:49:14 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-173912-20170628175327.patch</filename>
            <type>text/plain</type>
            <size>36444</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE3LTA2LTI4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNhZmFyaSdzIFNwZWVkb21ldGVy
IHNjb3JlIG1hc3NpdmVseSByZWdyZXNzZXMgd2hlbiBhY2Nlc3NpYmlsaXR5IGlzIGVuYWJsZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzkxMgor
CisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgorCisgICAgICAgIFRoZSBidWcg
d2FzIGNhdXNlZCBieSBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0SW5uZXJUZXh0VmFs
dWUgdHJpZ2dlcmluZyBhIHN5bmNocm9ub3VzIGxheW91dAorICAgICAgICB2aWEgY29uc3RydWN0
aW5nIFZpc2libGVQb3NpdGlvbiB3aGVuIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgaXMgcHJlc2Vu
dC4KKworICAgICAgICBBZGRlZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wgd2hpY2ggYXZvaWRzIHRoZSBjb25zdHJ1Y3Rpb24gb2YK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGFuZCBvdGhlciBtZWFucyBvZiB0cmlnZ2VyaW5nIGEg
c3luY2hyb25vdXMgbGF5b3V0LiBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSBzdWJ0bGUgYnVnCisg
ICAgICAgIHRoYXQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgd2FzIGNyZWF0aW5nIFRleHRN
YXJrZXJEYXRhIHdpdGggYXhJRCBzZXQgdG8gdGhhdCBvZiB0aGUgdGV4dCBjb250cm9sCisgICAg
ICAgIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IGluc2lkZSBp
dHMgc2hhZG93IHRyZWUgZXZlbiB0aG91Z2ggdGhlIHR5cGluZyBjb21tYW5kIHVzZXMKKyAgICAg
ICAgYXhJRCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50LiBXaGlsZSBJIGNvdWxkbid0IGZp
bmQgYW55IHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZSBmcm9tIHRoaXMKKyAgICAgICAg
Y29kZSBjaGFuZ2UsIG5ldyBjb2RlIGlzIG1vcmUgc2VsZi1jb25zaXN0ZW50LgorCisgICAgICAg
IEFsc28gYWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIHdoaWNoIGFzc2VydHMgdGhhdCBubyBz
eW5jaHJvbm91cyBsYXlvdXQgaGFwcGVucyBpbiBzZXRJbm5lclRleHRWYWx1ZQorICAgICAgICBz
byB0aGF0IHdlIGRvbid0IGludHJvZHVjZSBhIG5ldyBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGxp
a2UgdGhpcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3Rpbmcg
dGVzdHMgaW4gYWNjZXNzaWJpbGl0eSBkaXJlY3RvcnkgY292ZXJzIHRoaXMuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDogQWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcC4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJv
bCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRh
dGFGb3JWaXNpYmxlUG9zaXRpb24pOiBNb2Rlcm5pemVkLiBSZXR1cm5zIG9wdGlvbmFsPFRleHRN
YXJrZXJEYXRhPgorICAgICAgICBpbnN0ZWFkIG9mIHRha2luZyBUZXh0TWFya2VyRGF0YSBhcyBh
biBvdXQtYXJndW1lbnQsIGFuZCByZXR1cm5pbmcgd2l0aCBheElEIG9mIDAuCisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvckZpcnN0UG9zaXRpb25JblRl
eHRDb250cm9sKTogQWRkZWQuIFRoaXMgc3BlY2lhbGl6ZWQgdmVyc2lvbgorICAgICAgICBjb25z
dHJ1Y3RzIFRleHRNYXJrZXJEYXRhIGZvciB0aGUgZmlyc3QgcG9zaXRpb24gaW5zaWRlIHRoZSBl
ZGl0YWJsZSByZWdpb24gaW4gYSB0ZXh0IGNvbnRyb2wgd2l0aG91dAorICAgICAgICB0cmlnZ2Vy
aW5nIGEgc3luY2hyb25vdXMgbGF5b3V0LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFya2VyRGF0YSk6IEluaXRpYWxp
emUgZWFjaCBtZW1iZXIgYXV0b21hdGljYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbCk6CisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wpOiBBZGRlZC4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoK1tX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpj
YWNoZTpdKToKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjphZGRUZXh0TWFya2VyRm9yKTogRXh0cmFjdGVkIGZyb20g
dGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeS4gQWRkZWQgYSBuZXcgdmFyaWFudCB3aGlj
aAorICAgICAgICB0YWtlcyBhIHRleHQgZm9ybSBjb250cm9sIGluc3RlYWQuCisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KTogVGVtcGxhdGl6ZWQgdGhp
cyBmdW5jdGlvbiB0byBlaXRoZXIgdGFrZSBWaXNpYmxlUG9zaXRpb24KKyAgICAgICAgYW5kIGNh
bGwgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbiBvciB0YWtlIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50IGFuZCBjYWxsCisgICAgICAgIHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5U
ZXh0Q29udHJvbC4KKyAgICAgICAgKFdlYkNvcmU6OnBvc3RVc2VySW5mb0ZvckNoYW5nZXMpOiBF
eHRyYWN0ZWQgZnJvbSBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZv
cm1Ob3RpZmljYXRpb24pOiAKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RU
ZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKTogQWRkZWQu
CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5oOgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICh0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
dGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOl0pOiBBZGRlZC4KKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBk
YXRlTGF5b3V0KTogQXNzZXJ0IHRoYXQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIGlzIG5vdCBpbiB0
aGUgc3RhY2sgZnJhbWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZXRJbm5lclRleHRWYWx1ZSk6IENhbGwgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sCisgICAgICAgIHRvIGF2b2lkIHRyaWdnZXJpbmcgYSBzeW5jaHJvbm91cyBs
YXlvdXQuIEFsc28gY3JlYXRlIExheW91dERpc2FsbG93ZWRTY29wZSB0byBhdm9pZCBhIHNpbWls
YXIgcGVyZm9ybWFuY2UKKyAgICAgICAgcmVncmVzc2lvbiBmcm9tIGJlaW5nIGludHJvZHVjZWQg
aW4gdGhlIGZ1dHVyZSBpbiB0aGlzIGZ1bmN0aW9uLiBGaW5hbGx5LCBtYWRlIGlubmVyVGV4dCBh
IFJlZlB0ciBmb3IgZXh0cmEKKyAgICAgICAgc2FmZXR5IHNpbmNlIHdlJ3JlIHVzaW5nIGl0IGFm
dGVyIHVwZGF0aW5nIHRoZSBET00gdHJlZS4KKworICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRE
aXNhbGxvd2VkU2NvcGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0RGlz
YWxsb3dlZFNjb3BlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0RGlzYWxsb3dl
ZFNjb3BlOjpMYXlvdXREaXNhbGxvd2VkU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
RGlzYWxsb3dlZFNjb3BlOjp+TGF5b3V0RGlzYWxsb3dlZFNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dERpc2FsbG93ZWRTY29wZTo6aXNMYXlvdXRBbGxvd2VkKToKKwogMjAxNy0wNi0y
OCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnRM
b2FkZXIgc2hvdWxkIGFsd2F5cyBub3RpZnkgdGhlIGNsaWVudCBpZiB0aGVyZSBhcmUgcGVuZGlu
ZyBpY29uIGxvYWRzIHdoZW4gdGhlIGxvYWQgaXMgc3RvcHBlZC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMjUxMCw2ICsyNTEwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAogICAgIHJlbmRlcmluZy9JbmxpbmVJ
dGVyYXRvci5jcHAKICAgICByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKyAgICByZW5kZXJp
bmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBhaW50
ZXIuY3BwCiAgICAgcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAogICAgIHJlbmRlcmluZy9PcmRl
ckl0ZXJhdG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjM3
LDYgKzQyMzcsNyBAQAogCQk5QkM2QzIxQzEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUJDNkMyMUExM0NDQzk3QjAwOEUwMzM3IC8qIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcCAqLzsgfTsKIAkJOUJEMEJGOTMxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2
ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCRDBCRjkxMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmggKi87IH07CiAJ
CTlCRDBCRjk0MTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDBCRjkyMTJBNDJCRjUw
MDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLzsgfTsKKwkJOUJEMUY2ODIxRjA0NjMx
MDAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQxRjY4MTFGMDQ2MzEwMDAxQzlDREQgLyog
TGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTYxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQ0RTkxNDFDNDYyODcyMDA1MDY1QkMgLyogSlND
dXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTcxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZS5oICovOyB9OwogCQk5QkQ0RTkxQTFDNDYyQ0ZDMDA1MDY1QkMg
LyogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDRFOTE4MUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVt
ZW50UmVnaXN0cnkuY3BwICovOyB9OwpAQCAtMTI1MjEsNiArMTI1MjIsOCBAQAogCQk5QkM2QzIx
QTEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQwQkY5MTEyQTQyQkY1MDA3
MkZENDMgLyogU2NvcGVkRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY29wZWRFdmVudFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
RDBCRjkyMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjb3BlZEV2ZW50UXVldWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4MDFGMDQ2MkI4MDAxQzlDREQgLyogTGF5b3V0
RGlzYWxsb3dlZFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dERpc2FsbG93ZWRTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4
MTFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dERpc2FsbG93ZWRTY29wZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRDRFOTE0MUM0NjI4NzIwMDUwNjVCQyAvKiBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJENEU5MTgxQzQ2
MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzOTksNiArMjU0MDIsOCBAQAogCQkJCUJDRUE0ODFB
MDk3RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmNwcCAqLywKIAkJCQlCQ0VBNDgxQjA5
N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5oICovLAogCQkJCTU4MDM3MTYzMUE2NkYx
RDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggKi8sCisJCQkJOUJEMUY2ODExRjA0NjMxMDAw
MUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgKi8sCisJCQkJOUJEMUY2ODAxRjA0
NjJCODAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5oICovLAogCQkJCUExMjBBQ0Ex
MTNGOTk4NDYwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwICovLAogCQkJCUExMjBBQ0Ew
MTNGOTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuaCAqLywKIAkJCQkyRDkwNjYwNDBC
RTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovLApAQCAtMzM3NTEsNiArMzM3NTYs
NyBAQAogCQkJCTk3QUFCRDE4MTRGQTA5RDUwMDc0NTdBRSAvKiBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFERjZEODAwQjky
QTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzgz
REQxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5QkQxRjY4MjFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNj
b3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY1N0E2MEYwMTI1NkIwMDg5MUVCQiAvKiBU
aHJlYWRHbG9iYWxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE4NUJDRjI4MEYzMjc5Q0Uw
MDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0FBM0E2OTkx
OTRBNjRFNzAwMUNCRDI0IC8qIFRpbGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShy
ZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiSFRN
TExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZXRlckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgog
I2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtOTMsNiArOTQsNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMu
aCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCkBAIC0xMjg4LDggKzEyOTAs
MjcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50TgogCiAgICAgcG9z
dFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKG9iamVjdCwgZGVsZXRpb25UeXBl
LCBkZWxldGVkVGV4dCwgaW5zZXJ0aW9uVHlwZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbik7CiAj
ZWxzZQotICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCB0ZXh0
Q2hhbmdlRm9yRWRpdFR5cGUoZGVsZXRpb25UeXBlKSwgcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBkZWxldGVkVGV4dCk7Ci0gICAgbm9kZVRleHRD
aGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShp
bnNlcnRpb25UeXBlKSwgcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpLCBpbnNlcnRlZFRleHQpOworICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3Rp
ZmljYXRpb24ob2JqZWN0LCB0ZXh0Q2hhbmdlRm9yRWRpdFR5cGUoZGVsZXRpb25UeXBlKSwgcG9z
aXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZGVsZXRlZFRleHQpOworICAgIG5vZGVU
ZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCB0ZXh0Q2hhbmdlRm9yRWRpdFR5
cGUoaW5zZXJ0aW9uVHlwZSksIHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGlu
c2VydGVkVGV4dCk7CisjZW5kaWYKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJl
cGxhY2VtZW50Tm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQmIHRleHRDb250cm9sLCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBjb25zdCBTdHJp
bmcmIGluc2VydGVkVGV4dCkKK3sKKyAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmli
dXRlcygpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gZ2V0T3JDcmVhdGUo
JnRleHRDb250cm9sKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBpZiAob2JqZWN0KSB7Cisg
ICAgICAgIGlmIChlbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlvbihvYmplY3Qp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBvYmplY3QgPSBvYmplY3QtPm9ic2VydmFi
bGVPYmplY3QoKTsKKyAgICB9CisKKyAgICBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3Rp
ZmljYXRpb25Gb3JUZXh0Q29udHJvbChvYmplY3QsIGRlbGV0ZWRUZXh0LCBpbnNlcnRlZFRleHQs
IHRleHRDb250cm9sKTsKKyNlbHNlCisgICAgbm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNh
dGlvbihvYmplY3QsIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShkZWxldGlvblR5cGUpLCAwLCBkZWxl
dGVkVGV4dCk7CisgICAgbm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3Qs
IHRleHRDaGFuZ2VGb3JFZGl0VHlwZShpbnNlcnRpb25UeXBlKSwgMCwgaW5zZXJ0ZWRUZXh0KTsK
ICNlbmRpZgogfQogCkBAIC0yMDgzLDQ1ICsyMTA0LDczIEBAIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IEFYT2JqZWN0Q2FjaGU6OmFjY2UKICAgICByZXR1cm4gdGhpcy0+Z2V0T3JDcmVhdGUoZG9tTm9k
ZSk7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9z
aXRpb24oVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJEYXRhLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3MpCitzdGQ6Om9wdGlvbmFsPFRleHRNYXJrZXJEYXRhPiBBWE9iamVjdENh
Y2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3MpCiB7Ci0gICAgLy8gVGhpcyBtZW1vcnkgbXVzdCBiZSBiemVybydkIHNv
IGluc3RhbmNlcyBvZiBUZXh0TWFya2VyRGF0YSBjYW4gYmUgdGVzdGVkIGZvciBieXRlLWVxdWl2
YWxlbmNlLgotICAgIC8vIFRoaXMgYWxzbyBhbGxvd3MgY2FsbGVycyB0byBjaGVjayBmb3IgZmFp
bHVyZSBieSBsb29raW5nIGF0IHRleHRNYXJrZXJEYXRhIHVwb24gcmV0dXJuLgotICAgIG1lbXNl
dCgmdGV4dE1hcmtlckRhdGEsIDAsIHNpemVvZihUZXh0TWFya2VyRGF0YSkpOwotICAgIAogICAg
IGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKICAgICBQb3NpdGlvbiBkZWVwUG9zID0gdmlzaWJsZVBv
cy5kZWVwRXF1aXZhbGVudCgpOwogICAgIE5vZGUqIGRvbU5vZGUgPSBkZWVwUG9zLmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgQVNTRVJUKGRvbU5vZGUpOwogICAgIGlmICghZG9tTm9kZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCiAgICAgaWYg
KGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpkb21Ob2RlKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PigqZG9tTm9kZSkuaXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwogICAgIC8vIElmIHRoZSB2aXNpYmxlIHBv
c2l0aW9uIGhhcyBhbiBhbmNob3IgdHlwZSByZWZlcnJpbmcgdG8gYSBub2RlIG90aGVyIHRoYW4g
dGhlIGFuY2hvcmVkIG5vZGUsIHdlIHNob3VsZAogICAgIC8vIHNldCB0aGUgdGV4dCBtYXJrZXIg
ZGF0YSB3aXRoIENoYXJhY3Rlck9mZnNldCBzbyB0aGF0IHRoZSBvZmZzZXQgd2lsbCBjb3JyZXNw
b25kIHRvIHRoZSBub2RlLgogICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBj
aGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3MpOwogICAgIGlmIChk
ZWVwUG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yIHx8
IGRlZXBQb3MuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJDaGlsZHJl
bikgeworICAgICAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKICAgICAgICAgdGV4
dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEsIGNoYXJhY3Rlck9m
ZnNldCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJEYXRhOwog
ICAgIH0KLSAgICAKKwogICAgIC8vIGZpbmQgb3IgY3JlYXRlIGFuIGFjY2Vzc2liaWxpdHkgb2Jq
ZWN0IGZvciB0aGlzIG5vZGUKICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvbU5vZGUtPmRv
Y3VtZW50KCkuYXhPYmplY3RDYWNoZSgpOwogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0
PiBvYmogPSBjYWNoZS0+Z2V0T3JDcmVhdGUoZG9tTm9kZSk7Ci0gICAgCisKKyAgICBUZXh0TWFy
a2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKICAgICB0ZXh0TWFya2VyRGF0YS5heElEID0gb2JqLmdl
dCgpLT5heE9iamVjdElEKCk7CiAgICAgdGV4dE1hcmtlckRhdGEubm9kZSA9IGRvbU5vZGU7CiAg
ICAgdGV4dE1hcmtlckRhdGEub2Zmc2V0ID0gZGVlcFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpOwogICAgIHRleHRNYXJrZXJEYXRhLmFmZmluaXR5ID0gdmlzaWJsZVBvcy5hZmZpbml0eSgp
OwotICAgIAorCiAgICAgdGV4dE1hcmtlckRhdGEuY2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFjdGVy
T2Zmc2V0Lm9mZnNldDsKICAgICB0ZXh0TWFya2VyRGF0YS5jaGFyYWN0ZXJTdGFydEluZGV4ID0g
Y2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXg7Ci0gICAgCisKICAgICBjYWNoZS0+c2V0Tm9kZUlu
VXNlKGRvbU5vZGUpOworCisgICAgcmV0dXJuIHRleHRNYXJrZXJEYXRhOworfQorCisvLyBUaGlz
IGZ1bmN0aW9uIGV4aXRzIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRvIGF2b2lkIGEg
c3luY2hyb25vdXMgbGF5b3V0Lgorc3RkOjpvcHRpb25hbDxUZXh0TWFya2VyRGF0YT4gQVhPYmpl
Y3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbChIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCYgdGV4dENvbnRyb2wpCit7CisgICAgVGV4dENvbnRyb2xJ
bm5lclRleHRFbGVtZW50KiBpbm5lclRleHRFbGVtZW50ID0gdGV4dENvbnRyb2wuaW5uZXJUZXh0
RWxlbWVudCgpOworICAgIGlmICghaW5uZXJUZXh0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pih0ZXh0Q29udHJvbCkg
JiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4odGV4dENvbnRyb2wpLmlzUGFzc3dvcmRGaWVs
ZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgUG9zaXRpb24gZmlyc3RQ
b3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk5vZGUoaW5uZXJUZXh0RWxlbWVudCk7CisgICAgTm9k
ZSogZmlyc3RDaGlsZCA9IGlubmVyVGV4dEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICBpZiAo
IWZpcnN0Q2hpbGQpCisgICAgICAgIGZpcnN0Q2hpbGQgPSBpbm5lclRleHRFbGVtZW50OworICAg
IENvbnRhaW5lck5vZGUqIGVkaXRpbmdIb3N0ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChmaXJzdFBv
c2l0aW9uKTsKKworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gdGV4dENvbnRyb2wuZG9jdW1l
bnQoKS5heE9iamVjdENhY2hlKCk7CisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9i
aiA9IGNhY2hlLT5nZXRPckNyZWF0ZShlZGl0aW5nSG9zdCk7CisKKyAgICBUZXh0TWFya2VyRGF0
YSB0ZXh0TWFya2VyRGF0YTsKKyAgICB0ZXh0TWFya2VyRGF0YS5heElEID0gb2JqLmdldCgpLT5h
eE9iamVjdElEKCk7CisgICAgdGV4dE1hcmtlckRhdGEubm9kZSA9IGZpcnN0Q2hpbGQ7CisKKyAg
ICBjYWNoZS0+c2V0Tm9kZUluVXNlKCZ0ZXh0Q29udHJvbCk7CisKKyAgICByZXR1cm4gdGV4dE1h
cmtlckRhdGE7CiB9CiAKIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0Q2hhcmFj
dGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0LCBib29sIGln
bm9yZU5leHROb2RlU3RhcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxBcmVh
RWxlbWVudDsKK2NsYXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OwogY2xhc3MgTm9kZTsK
IGNsYXNzIFBhZ2U7CiBjbGFzcyBSZW5kZXJCbG9jazsKQEAgLTUxLDEzICs1MiwxMyBAQCBjbGFz
cyBWaXNpYmxlUG9zaXRpb247CiBjbGFzcyBXaWRnZXQ7CiAKIHN0cnVjdCBUZXh0TWFya2VyRGF0
YSB7Ci0gICAgQVhJRCBheElEOwotICAgIE5vZGUqIG5vZGU7Ci0gICAgaW50IG9mZnNldDsKLSAg
ICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleDsKLSAgICBpbnQgY2hhcmFjdGVyT2Zmc2V0OwotICAg
IGJvb2wgaWdub3JlZDsKLSAgICBFQWZmaW5pdHkgYWZmaW5pdHk7CisgICAgQVhJRCBheElEIHsg
MCB9OworICAgIE5vZGUqIG5vZGUgeyBudWxscHRyIH07CisgICAgaW50IG9mZnNldCB7IDAgfTsK
KyAgICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleCB7IDAgfTsKKyAgICBpbnQgY2hhcmFjdGVyT2Zm
c2V0IHsgMCB9OworICAgIGJvb2wgaWdub3JlZCB7IGZhbHNlIH07CisgICAgRUFmZmluaXR5IGFm
ZmluaXR5IHsgRE9XTlNUUkVBTSB9OwogfTsKIAogc3RydWN0IENoYXJhY3Rlck9mZnNldCB7CkBA
IC0yMTIsNyArMjEzLDggQEAgcHVibGljOgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVj
dEZyb21BWElEKEFYSUQgaWQpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0cy5nZXQoaWQpOyB9CiAK
ICAgICAvLyBUZXh0IG1hcmtlciB1dGlsaXRpZXMuCi0gICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZv
clZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OworICAgIHN0ZDo6b3B0aW9uYWw8VGV4dE1hcmtlckRhdGE+IHRleHRNYXJrZXJEYXRhRm9yVmlz
aWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAgIHN0ZDo6b3B0aW9uYWw8
VGV4dE1hcmtlckRhdGE+IHRleHRNYXJrZXJEYXRhRm9yRmlyc3RQb3NpdGlvbkluVGV4dENvbnRy
b2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmKTsKICAgICB2b2lkIHRleHRNYXJrZXJEYXRh
Rm9yQ2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0
Jik7CiAgICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZvck5leHRDaGFyYWN0ZXJPZmZzZXQoVGV4dE1h
cmtlckRhdGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICB2b2lkIHRleHRNYXJrZXJE
YXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmLCBjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmKTsKQEAgLTMwMCw2ICszMDIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBv
c3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBlLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2b2lkIHBvc3RUZXh0UmVw
bGFjZW1lbnROb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBlIGRlbGV0aW9uVHlwZSwg
Y29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgQVhUZXh0RWRpdFR5cGUgaW5zZXJ0aW9uVHlwZSwg
Y29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAg
IHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3Qg
U3RyaW5nJiBpbnNlcnRlZFRleHQpOwogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlm
aWNhdGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9u
KGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0TGl2ZVJlZ2lvbkNoYW5nZU5vdGlmaWNh
dGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CkBAIC0zMzcsNiArMzQwLDcgQEAgcHJvdGVjdGVk
OgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZVBsYXRm
b3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBjb25zdCBBWFRleHRTdGF0ZUNo
YW5nZUludGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICAgICB2b2lkIHBvc3RUZXh0
U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhU
ZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAg
IHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRy
b2woQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIGNvbnN0
IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYpOwogICAg
IHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxp
dHlPYmplY3QqLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwgQVhUZXh0RWRpdFR5cGUs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogI2Vsc2UKICAgICBzdGF0
aWMgQVhUZXh0Q2hhbmdlIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRleHRFZGl0VHlwZSk7CkBA
IC00OTksNiArNTAzLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xs
ZQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNh
dGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpw
b3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSwgY29u
c3QgU3RyaW5nJiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpIHsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNl
bWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2wmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
OnBvc3ROb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIERvY3VtZW50KiwgQVhOb3Rp
ZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0
Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiwgQVhOb3RpZmljYXRpb24sIFBv
c3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RO
b3RpZmljYXRpb24oTm9kZSosIEFYTm90aWZpY2F0aW9uLCBQb3N0VGFyZ2V0LCBQb3N0VHlwZSkg
eyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hl
SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FY
T2JqZWN0Q2FjaGVJT1MubW0JKHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEx
Myw2ICsxMTMsMTEgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UAog
ICAgIHBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIEFYVmFsdWVDaGFuZ2VkKTsKIH0K
IAordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmlj
YXRpb25Gb3JUZXh0Q29udHJvbChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JikKK3sKKyAg
ICBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCBBWFZhbHVlQ2hhbmdlZCk7Cit9CisK
IHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlv
bihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheEZyYW1lT2JqZWN0LCBBWExvYWRpbmdFdmVudCBsb2Fk
aW5nRXZlbnQpCiB7CiAgICAgaWYgKCFheEZyYW1lT2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwxMCBAQCAtIChpZClpbml0V2l0aERh
dGE6KE5TRGF0YSAqKWRhdGEgYWNjZXNzCiAKICsgKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
ICopdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246KFZpc2libGVQb3NpdGlvbiYpdmlzaWJs
ZVBvcyBjYWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGUKIHsKLSAgICBUZXh0TWFya2VyRGF0YSB0
ZXh0TWFya2VyRGF0YTsKLSAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRp
b24odGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOwotICAgIAotICAgIHJldHVybiBbW1tXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBhbGxvY10gaW5pdFdpdGhUZXh0TWFya2VyOiZ0ZXh0TWFy
a2VyRGF0YSBjYWNoZTpjYWNoZV0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8gdGV4dE1hcmtlckRh
dGEgPSBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcyk7
CisgICAgaWYgKCF0ZXh0TWFya2VyRGF0YSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1
cm4gW1tbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxsb2NdIGluaXRXaXRoVGV4dE1hcmtl
cjomdGV4dE1hcmtlckRhdGEudmFsdWUoKSBjYWNoZTpjYWNoZV0gYXV0b3JlbGVhc2VdOwogfQog
CiArIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrZXJXaXRoQ2hhcmFjdGVy
T2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldCBjYWNoZTooQVhPYmplY3RD
YWNoZSopY2FjaGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2Jq
ZWN0Q2FjaGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDA3LDcgKzQwNywyMiBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVD
aGFuZ2VQCiAgICAgW3VzZXJJbmZvIHJlbGVhc2VdOwogfQogCi1zdGF0aWMgTlNEaWN0aW9uYXJ5
ICp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCwgQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgcG9zaXRpb24pCitzdGF0aWMgdm9pZCBhZGRUZXh0TWFya2VyRm9yKE5T
TXV0YWJsZURpY3Rpb25hcnkqIGNoYW5nZSwgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0LCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIGlmIChwb3NpdGlvbi5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpZCB0ZXh0TWFya2VyID0gW29iamVjdC53
cmFwcGVyKCkgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpwb3NpdGlvbl0pCisgICAgICAg
IFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHRNYXJrZXIgZm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRD
aGFuZ2VWYWx1ZVN0YXJ0TWFya2VyXTsKK30KKworc3RhdGljIHZvaWQgYWRkVGV4dE1hcmtlckZv
cihOU011dGFibGVEaWN0aW9uYXJ5KiBjaGFuZ2UsIEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVj
dCwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250cm9sKQoreworICAgIGlmIChp
ZCB0ZXh0TWFya2VyID0gW29iamVjdC53cmFwcGVyKCkgdGV4dE1hcmtlckZvckZpcnN0UG9zaXRp
b25JblRleHRDb250cm9sOnRleHRDb250cm9sXSkKKyAgICAgICAgW2NoYW5nZSBzZXRPYmplY3Q6
dGV4dE1hcmtlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVlU3RhcnRNYXJr
ZXJdOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dE1hcmtlclRhcmdldFR5cGU+CitzdGF0
aWMgTlNEaWN0aW9uYXJ5ICp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KEFjY2Vzc2li
aWxpdHlPYmplY3QmIG9iamVjdCwgQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIFRleHRNYXJrZXJUYXJnZXRUeXBlJiBtYXJrZXJUYXJnZXQpCiB7CiAgICAgTlNTdHJp
bmcgKnRleHQgPSAoTlNTdHJpbmcgKilzdHJpbmc7CiAgICAgTlNVSW50ZWdlciBsZW5ndGggPSBb
dGV4dCBsZW5ndGhdOwpAQCAtNDIwLDEwICs0MzUsNyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICp0
ZXh0UmVwbGFjZW1lbnRDaGFuCiAgICAgICAgIHRleHQgPSBbdGV4dCBzdWJzdHJpbmdUb0luZGV4
OkFYVmFsdWVDaGFuZ2VUcnVuY2F0aW9uTGVuZ3RoXTsKICAgICB9CiAgICAgW2NoYW5nZSBzZXRP
YmplY3Q6dGV4dCBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVlXTsKLSAgICBp
ZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgaWYgKGlkIHRleHRNYXJrZXIgPSBb
b2JqZWN0LT53cmFwcGVyKCkgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpwb3NpdGlvbl0p
Ci0gICAgICAgICAgICBbY2hhbmdlIHNldE9iamVjdDp0ZXh0TWFya2VyIGZvcktleTpOU0FjY2Vz
c2liaWxpdHlUZXh0Q2hhbmdlVmFsdWVTdGFydE1hcmtlcl07Ci0gICAgfQorICAgIGFkZFRleHRN
YXJrZXJGb3IoY2hhbmdlLCBvYmplY3QsIG1hcmtlclRhcmdldCk7CiAgICAgcmV0dXJuIFtjaGFu
Z2UgYXV0b3JlbGVhc2VdOwogfQogCkBAIC00MzUsNiArNDQ3LDIzIEBAIHZvaWQgQVhPYmplY3RD
YWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZVAKICAgICBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZv
cm1Ob3RpZmljYXRpb24ob2JqZWN0LCBBWFRleHRFZGl0VHlwZVVua25vd24sIGVtcHR5U3RyaW5n
KCksIHR5cGUsIHRleHQsIHBvc2l0aW9uKTsKIH0KIAorc3RhdGljIHZvaWQgcG9zdFVzZXJJbmZv
Rm9yQ2hhbmdlcyhBY2Nlc3NpYmlsaXR5T2JqZWN0JiByb290V2ViQXJlYSwgQWNjZXNzaWJpbGl0
eU9iamVjdCYgb2JqZWN0LCBOU011dGFibGVBcnJheSogY2hhbmdlcykKK3sKKyAgICBOU011dGFi
bGVEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eTo0XTsKKyAgICBbdXNlckluZm8gc2V0T2JqZWN0OkAocGxhdGZvcm1DaGFu
Z2VUeXBlRm9yV2ViQ29yZUNoYW5nZVR5cGUoQVhUZXh0U3RhdGVDaGFuZ2VUeXBlRWRpdCkpIGZv
cktleTpOU0FjY2Vzc2liaWxpdHlUZXh0U3RhdGVDaGFuZ2VUeXBlS2V5XTsKKyAgICBpZiAoY2hh
bmdlcy5jb3VudCkKKyAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpjaGFuZ2VzIGZvcktleTpO
U0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlVmFsdWVzXTsKKworICAgIGlmIChpZCB3cmFwcGVyID0g
b2JqZWN0LndyYXBwZXIoKSkKKyAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDp3cmFwcGVyIGZv
cktleTpOU0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlRWxlbWVudF07CisKKyAgICBBWFBvc3ROb3Rp
ZmljYXRpb25XaXRoVXNlckluZm8ocm9vdFdlYkFyZWEud3JhcHBlcigpLCBOU0FjY2Vzc2liaWxp
dHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb24sIHVzZXJJbmZvKTsKKyAgICBpZiAocm9vdFdlYkFy
ZWEud3JhcHBlcigpICE9IG9iamVjdC53cmFwcGVyKCkpCisgICAgICAgIEFYUG9zdE5vdGlmaWNh
dGlvbldpdGhVc2VySW5mbyhvYmplY3Qud3JhcHBlcigpLCBOU0FjY2Vzc2liaWxpdHlWYWx1ZUNo
YW5nZWROb3RpZmljYXRpb24sIHVzZXJJbmZvKTsKKworICAgIFt1c2VySW5mbyByZWxlYXNlXTsK
K30KKwogdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3Rp
ZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBBWFRleHRFZGl0VHlwZSBkZWxl
dGlvblR5cGUsIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIEFYVGV4dEVkaXRUeXBlIGluc2Vy
dGlvblR5cGUsIGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHBvc2l0aW9uKQogewogICAgIGlmICghb2JqZWN0KQpAQCAtNDQzLDI2ICs0NzIsMzAgQEAg
dm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UAogICAgIGlmICghb2JqZWN0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5ICp1c2VySW5mbyA9
IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTo0XTsKLSAgICBb
dXNlckluZm8gc2V0T2JqZWN0OkAocGxhdGZvcm1DaGFuZ2VUeXBlRm9yV2ViQ29yZUNoYW5nZVR5
cGUoQVhUZXh0U3RhdGVDaGFuZ2VUeXBlRWRpdCkpIGZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0
U3RhdGVDaGFuZ2VUeXBlS2V5XTsKLQogICAgIE5TTXV0YWJsZUFycmF5ICpjaGFuZ2VzID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eToyXTsKLSAgICBpZiAoTlNEaWN0
aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KG9iamVjdCwg
ZGVsZXRpb25UeXBlLCBkZWxldGVkVGV4dCwgcG9zaXRpb24pKQorICAgIGlmIChOU0RpY3Rpb25h
cnkgKmNoYW5nZSA9IHRleHRSZXBsYWNlbWVudENoYW5nZURpY3Rpb25hcnkoKm9iamVjdCwgZGVs
ZXRpb25UeXBlLCBkZWxldGVkVGV4dCwgcG9zaXRpb24pKQogICAgICAgICBbY2hhbmdlcyBhZGRP
YmplY3Q6Y2hhbmdlXTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFj
ZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KG9iamVjdCwgaW5zZXJ0aW9uVHlwZSwgaW5zZXJ0ZWRUZXh0
LCBwb3NpdGlvbikpCisgICAgaWYgKE5TRGljdGlvbmFyeSAqY2hhbmdlID0gdGV4dFJlcGxhY2Vt
ZW50Q2hhbmdlRGljdGlvbmFyeSgqb2JqZWN0LCBpbnNlcnRpb25UeXBlLCBpbnNlcnRlZFRleHQs
IHBvc2l0aW9uKSkKICAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07Ci0gICAgaWYg
KGNoYW5nZXMuY291bnQpCi0gICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6Y2hhbmdlcyBmb3JL
ZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVlc107CisgICAgcG9zdFVzZXJJbmZvRm9y
Q2hhbmdlcygqcm9vdFdlYkFyZWEoKSwgKm9iamVjdCwgY2hhbmdlcyk7CiAgICAgW2NoYW5nZXMg
cmVsZWFzZV07Cit9CiAKLSAgICBpZiAoaWQgd3JhcHBlciA9IG9iamVjdC0+d3JhcHBlcigpKQot
ICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OndyYXBwZXIgZm9yS2V5Ok5TQWNjZXNzaWJpbGl0
eVRleHRDaGFuZ2VFbGVtZW50XTsKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNl
bWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGluc2Vy
dGVkVGV4dCwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250cm9sKQoreworICAg
IGlmICghb2JqZWN0KQorICAgICAgICBvYmplY3QgPSByb290V2ViQXJlYSgpOwogCi0gICAgQVhQ
b3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKHJvb3RXZWJBcmVhKCktPndyYXBwZXIoKSwgTlNB
Y2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0aW9uLCB1c2VySW5mbyk7Ci0gICAgaWYg
KHJvb3RXZWJBcmVhKCktPndyYXBwZXIoKSAhPSBvYmplY3QtPndyYXBwZXIoKSkKLSAgICAgICAg
QVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKG9iamVjdC0+d3JhcHBlcigpLCBOU0FjY2Vz
c2liaWxpdHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb24sIHVzZXJJbmZvKTsKKyAgICBpZiAoIW9i
amVjdCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgW3VzZXJJbmZvIHJlbGVhc2VdOworICAgIE5T
TXV0YWJsZUFycmF5ICpjaGFuZ2VzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eToyXTsKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1l
bnRDaGFuZ2VEaWN0aW9uYXJ5KCpvYmplY3QsIEFYVGV4dEVkaXRUeXBlRGVsZXRlLCBkZWxldGVk
VGV4dCwgdGV4dENvbnRyb2wpKQorICAgICAgICBbY2hhbmdlcyBhZGRPYmplY3Q6Y2hhbmdlXTsK
KyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0
aW9uYXJ5KCpvYmplY3QsIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCBpbnNlcnRlZFRleHQsIHRleHRD
b250cm9sKSkKKyAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07CisgICAgcG9zdFVz
ZXJJbmZvRm9yQ2hhbmdlcygqcm9vdFdlYkFyZWEoKSwgKm9iamVjdCwgY2hhbmdlcyk7CisgICAg
W2NoYW5nZXMgcmVsZWFzZV07CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5n
RXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheEZyYW1lT2Jq
ZWN0LCBBWExvYWRpbmdFdmVudCBsb2FkaW5nRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2UuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVj
dDsKIHN0cnVjdCBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWE7CiBjbGFzcyBJbnRSZWN0Owog
Y2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OwogY2xh
c3MgUGF0aDsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBAaW50ZXJmYWNlIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyCiAKIC0gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRp
b25zOihjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mKXN0YXJ0UG9zaXRpb24gZW5kUG9z
aXRpb246KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYpZW5kUG9zaXRpb247CiAtIChp
ZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9z
aXRpb24mKXZpc2libGVQb3M7CistIChpZCl0ZXh0TWFya2VyRm9yRmlyc3RQb3NpdGlvbkluVGV4
dENvbnRyb2w6KFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Jil0ZXh0Q29udHJv
bDsKIAogLy8gV2hlbiBhIHBsdWdpbiB1c2VzIGEgV2ViS2l0IGNvbnRyb2wgdG8gYWN0IGFzIGEg
c3Vycm9nYXRlIHZpZXcgKGUuZy4gUERGIHVzZSBXZWJLaXQgdG8gY3JlYXRlIHRleHQgZmllbGRz
KS4KIC0gKGlkKWFzc29jaWF0ZWRQbHVnaW5QYXJlbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTY4MSwxMyArNjgxLDEyIEBAIC0gKENoYXJhY3Rlck9mZnNldClj
aGFyYWN0ZXJPZmZzZXRGb3JUZXgKIHN0YXRpYyBpZCB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0
aW9uKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3MpCiB7CiAgICAgQVNTRVJUKGNhY2hlKTsKLSAgICAKLSAgICBUZXh0TWFya2VyRGF0YSB0ZXh0
TWFya2VyRGF0YTsKLSAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24o
dGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOwotICAgIGlmICghdGV4dE1hcmtlckRhdGEuYXhJ
RCkKKworICAgIGF1dG8gdGV4dE1hcmtlckRhdGEgPSBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JW
aXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcyk7CisgICAgaWYgKCF0ZXh0TWFya2VyRGF0YSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2Uod2tD
cmVhdGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEp
KSk7CisKKyAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2Uod2tDcmVhdGVBWFRleHRNYXJrZXIo
JnRleHRNYXJrZXJEYXRhLnZhbHVlKCksIHNpemVvZih0ZXh0TWFya2VyRGF0YS52YWx1ZSgpKSkp
OwogfQogCiAtIChpZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihjb25zdCBWaXNpYmxl
UG9zaXRpb24gJil2aXNpYmxlUG9zCkBAIC02OTUsNiArNjk0LDE5IEBAIC0gKGlkKXRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnMKICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2li
bGVQb3NpdGlvbihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB2aXNpYmxlUG9zKTsKIH0KIAor
LSAoaWQpdGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOihIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudCAmKXRleHRDb250cm9sCit7CisgICAgYXV0byAqY2FjaGUgPSBtX29i
amVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBhdXRvIHRleHRNYXJrZXJEYXRhID0gY2FjaGUtPnRleHRNYXJrZXJEYXRhRm9y
Rmlyc3RQb3NpdGlvbkluVGV4dENvbnRyb2wodGV4dENvbnRyb2wpOworICAgIGlmICghdGV4dE1h
cmtlckRhdGEpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gQ0ZCcmlkZ2luZ1Jl
bGVhc2Uod2tDcmVhdGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJEYXRhLnZhbHVlKCksIHNpemVv
Zih0ZXh0TWFya2VyRGF0YS52YWx1ZSgpKSkpOworfQorCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIENGVHlw
ZVJlZiB0ZXh0TWFya2VyKQogewogICAgIEFTU0VSVChjYWNoZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsNyBAQAogI2luY2x1ZGUgIkpT
TGF6eUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVk
ZSAiTGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJMYXlvdXREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNs
dWRlICJMb2FkZXJTdHJhdGVneS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJN
YWluRnJhbWUuaCIKQEAgLTE5MTQsNiArMTkxNSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVN0
eWxlSWZOZWVkZWQoKQogCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlvdXQoKQogeworICAgIEFT
U0VSVChMYXlvdXREaXNhbGxvd2VkU2NvcGU6OmlzTGF5b3V0QWxsb3dlZCgpKTsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB2aWV3KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIkxheW91dERpc2FsbG93
ZWRTY29wZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb0V2ZW50RGlzcGF0
Y2hBc3NlcnRpb24uaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCkBAIC01NDksNyArNTUw
LDggQEAgc3RhdGljIFN0cmluZyBpbm5lclRleHRWYWx1ZUZyb20oVGV4dENvbgogCiB2b2lkIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogewotICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0ID0g
aW5uZXJUZXh0RWxlbWVudCgpOworICAgIExheW91dERpc2FsbG93ZWRTY29wZSBsYXlvdXREaXNh
bGxvd2VkU2NvcGUoTGF5b3V0RGlzYWxsb3dlZFNjb3BlOjpSZWFzb246OlBlcmZvcm1hbmNlT3B0
aW1pemF0aW9uKTsKKyAgICBSZWZQdHI8VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50PiBpbm5l
clRleHQgPSBpbm5lclRleHRFbGVtZW50KCk7CiAgICAgaWYgKCFpbm5lclRleHQpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNTc3LDcgKzU3OSw3IEBAIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnNldElubmUKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKENPQ09B
KQogICAgICAgICBpZiAodGV4dElzQ2hhbmdlZCAmJiByZW5kZXJlcigpKSB7CiAgICAgICAgICAg
ICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RD
YWNoZSgpKQotICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZp
Y2F0aW9uKHRoaXMsIEFYVGV4dEVkaXRUeXBlRGVsZXRlLCBwcmV2aW91c1ZhbHVlLCBBWFRleHRF
ZGl0VHlwZUluc2VydCwgdmFsdWUsIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbih0aGlzLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcikpKTsKKyAgICAgICAgICAgICAgICBjYWNoZS0+
cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKCp0aGlzLCBwcmV2
aW91c1ZhbHVlLCB2YWx1ZSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2VkU2NvcGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2VkU2NvcGUuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2Vk
U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKworTGF5b3V0RGlz
YWxsb3dlZFNjb3BlKiBMYXlvdXREaXNhbGxvd2VkU2NvcGU6OnNfY3VycmVudEFzc2VydGlvbiA9
IG51bGxwdHI7CisKKyNlbmRpZgorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0RGlzYWxsb3dlZFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xheW91dERpc2FsbG93ZWRTY29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2VkU2NvcGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKworY2xhc3MgTGF5b3V0RGlzYWxsb3dl
ZFNjb3BlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFJlYXNvbiB7IFBlcmZvcm1hbmNlT3B0
aW1pemF0aW9uIH07CisgICAgTGF5b3V0RGlzYWxsb3dlZFNjb3BlKFJlYXNvbikKKyAgICAgICAg
OiBtX3ByZXZpb3VzQXNzZXJ0aW9uKHNfY3VycmVudEFzc2VydGlvbikKKyAgICB7CisgICAgICAg
IHNfY3VycmVudEFzc2VydGlvbiA9IHRoaXM7CisgICAgfQorCisgICAgfkxheW91dERpc2FsbG93
ZWRTY29wZSgpCisgICAgeworICAgICAgICBzX2N1cnJlbnRBc3NlcnRpb24gPSBtX3ByZXZpb3Vz
QXNzZXJ0aW9uOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzTGF5b3V0QWxsb3dlZCgpIHsg
cmV0dXJuICFzX2N1cnJlbnRBc3NlcnRpb247IH0KKworcHJpdmF0ZToKKyAgICBMYXlvdXREaXNh
bGxvd2VkU2NvcGUqIG1fcHJldmlvdXNBc3NlcnRpb247CisgICAgc3RhdGljIExheW91dERpc2Fs
bG93ZWRTY29wZSogc19jdXJyZW50QXNzZXJ0aW9uOworfTsKKworI2Vsc2UKKworY2xhc3MgTGF5
b3V0RGlzYWxsb3dlZFNjb3BlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFJlYXNvbiB7IFBl
cmZvcm1hbmNlT3B0aW1pemF0aW9uIH07CisgICAgTGF5b3V0RGlzYWxsb3dlZFNjb3BlKFJlYXNv
bikgeyB9CisgICAgc3RhdGljIGJvb2wgaXNMYXlvdXRBbGxvd2VkKCkgeyByZXR1cm4gdHJ1ZTsg
fQorfTsKKworI2VuZGlmCisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314085</attachid>
            <date>2017-06-28 18:49:15 -0700</date>
            <delta_ts>2017-06-28 19:00:22 -0700</delta_ts>
            <desc>Another GTK+/WPE build fix</desc>
            <filename>bug-173912-20170628184915.patch</filename>
            <type>text/plain</type>
            <size>36459</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE3LTA2LTI4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNhZmFyaSdzIFNwZWVkb21ldGVy
IHNjb3JlIG1hc3NpdmVseSByZWdyZXNzZXMgd2hlbiBhY2Nlc3NpYmlsaXR5IGlzIGVuYWJsZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzkxMgor
CisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgorCisgICAgICAgIFRoZSBidWcg
d2FzIGNhdXNlZCBieSBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0SW5uZXJUZXh0VmFs
dWUgdHJpZ2dlcmluZyBhIHN5bmNocm9ub3VzIGxheW91dAorICAgICAgICB2aWEgY29uc3RydWN0
aW5nIFZpc2libGVQb3NpdGlvbiB3aGVuIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgaXMgcHJlc2Vu
dC4KKworICAgICAgICBBZGRlZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wgd2hpY2ggYXZvaWRzIHRoZSBjb25zdHJ1Y3Rpb24gb2YK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGFuZCBvdGhlciBtZWFucyBvZiB0cmlnZ2VyaW5nIGEg
c3luY2hyb25vdXMgbGF5b3V0LiBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSBzdWJ0bGUgYnVnCisg
ICAgICAgIHRoYXQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgd2FzIGNyZWF0aW5nIFRleHRN
YXJrZXJEYXRhIHdpdGggYXhJRCBzZXQgdG8gdGhhdCBvZiB0aGUgdGV4dCBjb250cm9sCisgICAg
ICAgIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IGluc2lkZSBp
dHMgc2hhZG93IHRyZWUgZXZlbiB0aG91Z2ggdGhlIHR5cGluZyBjb21tYW5kIHVzZXMKKyAgICAg
ICAgYXhJRCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50LiBXaGlsZSBJIGNvdWxkbid0IGZp
bmQgYW55IHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZSBmcm9tIHRoaXMKKyAgICAgICAg
Y29kZSBjaGFuZ2UsIG5ldyBjb2RlIGlzIG1vcmUgc2VsZi1jb25zaXN0ZW50LgorCisgICAgICAg
IEFsc28gYWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIHdoaWNoIGFzc2VydHMgdGhhdCBubyBz
eW5jaHJvbm91cyBsYXlvdXQgaGFwcGVucyBpbiBzZXRJbm5lclRleHRWYWx1ZQorICAgICAgICBz
byB0aGF0IHdlIGRvbid0IGludHJvZHVjZSBhIG5ldyBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGxp
a2UgdGhpcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3Rpbmcg
dGVzdHMgaW4gYWNjZXNzaWJpbGl0eSBkaXJlY3RvcnkgY292ZXJzIHRoaXMuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDogQWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcC4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJv
bCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRh
dGFGb3JWaXNpYmxlUG9zaXRpb24pOiBNb2Rlcm5pemVkLiBSZXR1cm5zIG9wdGlvbmFsPFRleHRN
YXJrZXJEYXRhPgorICAgICAgICBpbnN0ZWFkIG9mIHRha2luZyBUZXh0TWFya2VyRGF0YSBhcyBh
biBvdXQtYXJndW1lbnQsIGFuZCByZXR1cm5pbmcgd2l0aCBheElEIG9mIDAuCisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvckZpcnN0UG9zaXRpb25JblRl
eHRDb250cm9sKTogQWRkZWQuIFRoaXMgc3BlY2lhbGl6ZWQgdmVyc2lvbgorICAgICAgICBjb25z
dHJ1Y3RzIFRleHRNYXJrZXJEYXRhIGZvciB0aGUgZmlyc3QgcG9zaXRpb24gaW5zaWRlIHRoZSBl
ZGl0YWJsZSByZWdpb24gaW4gYSB0ZXh0IGNvbnRyb2wgd2l0aG91dAorICAgICAgICB0cmlnZ2Vy
aW5nIGEgc3luY2hyb25vdXMgbGF5b3V0LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFya2VyRGF0YSk6IEluaXRpYWxp
emUgZWFjaCBtZW1iZXIgYXV0b21hdGljYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbCk6CisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wpOiBBZGRlZC4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoK1tX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpj
YWNoZTpdKToKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjphZGRUZXh0TWFya2VyRm9yKTogRXh0cmFjdGVkIGZyb20g
dGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeS4gQWRkZWQgYSBuZXcgdmFyaWFudCB3aGlj
aAorICAgICAgICB0YWtlcyBhIHRleHQgZm9ybSBjb250cm9sIGluc3RlYWQuCisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KTogVGVtcGxhdGl6ZWQgdGhp
cyBmdW5jdGlvbiB0byBlaXRoZXIgdGFrZSBWaXNpYmxlUG9zaXRpb24KKyAgICAgICAgYW5kIGNh
bGwgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbiBvciB0YWtlIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50IGFuZCBjYWxsCisgICAgICAgIHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5U
ZXh0Q29udHJvbC4KKyAgICAgICAgKFdlYkNvcmU6OnBvc3RVc2VySW5mb0ZvckNoYW5nZXMpOiBF
eHRyYWN0ZWQgZnJvbSBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZv
cm1Ob3RpZmljYXRpb24pOiAKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RU
ZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKTogQWRkZWQu
CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5oOgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICh0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
dGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOl0pOiBBZGRlZC4KKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBk
YXRlTGF5b3V0KTogQXNzZXJ0IHRoYXQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIGlzIG5vdCBpbiB0
aGUgc3RhY2sgZnJhbWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZXRJbm5lclRleHRWYWx1ZSk6IENhbGwgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sCisgICAgICAgIHRvIGF2b2lkIHRyaWdnZXJpbmcgYSBzeW5jaHJvbm91cyBs
YXlvdXQuIEFsc28gY3JlYXRlIExheW91dERpc2FsbG93ZWRTY29wZSB0byBhdm9pZCBhIHNpbWls
YXIgcGVyZm9ybWFuY2UKKyAgICAgICAgcmVncmVzc2lvbiBmcm9tIGJlaW5nIGludHJvZHVjZWQg
aW4gdGhlIGZ1dHVyZSBpbiB0aGlzIGZ1bmN0aW9uLiBGaW5hbGx5LCBtYWRlIGlubmVyVGV4dCBh
IFJlZlB0ciBmb3IgZXh0cmEKKyAgICAgICAgc2FmZXR5IHNpbmNlIHdlJ3JlIHVzaW5nIGl0IGFm
dGVyIHVwZGF0aW5nIHRoZSBET00gdHJlZS4KKworICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRE
aXNhbGxvd2VkU2NvcGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0RGlz
YWxsb3dlZFNjb3BlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0RGlzYWxsb3dl
ZFNjb3BlOjpMYXlvdXREaXNhbGxvd2VkU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
RGlzYWxsb3dlZFNjb3BlOjp+TGF5b3V0RGlzYWxsb3dlZFNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dERpc2FsbG93ZWRTY29wZTo6aXNMYXlvdXRBbGxvd2VkKToKKwogMjAxNy0wNi0y
OCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnRM
b2FkZXIgc2hvdWxkIGFsd2F5cyBub3RpZnkgdGhlIGNsaWVudCBpZiB0aGVyZSBhcmUgcGVuZGlu
ZyBpY29uIGxvYWRzIHdoZW4gdGhlIGxvYWQgaXMgc3RvcHBlZC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMjUxMCw2ICsyNTEwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAogICAgIHJlbmRlcmluZy9JbmxpbmVJ
dGVyYXRvci5jcHAKICAgICByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKyAgICByZW5kZXJp
bmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBhaW50
ZXIuY3BwCiAgICAgcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAogICAgIHJlbmRlcmluZy9PcmRl
ckl0ZXJhdG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjM3
LDYgKzQyMzcsNyBAQAogCQk5QkM2QzIxQzEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUJDNkMyMUExM0NDQzk3QjAwOEUwMzM3IC8qIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcCAqLzsgfTsKIAkJOUJEMEJGOTMxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2
ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCRDBCRjkxMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmggKi87IH07CiAJ
CTlCRDBCRjk0MTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDBCRjkyMTJBNDJCRjUw
MDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLzsgfTsKKwkJOUJEMUY2ODIxRjA0NjMx
MDAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQxRjY4MTFGMDQ2MzEwMDAxQzlDREQgLyog
TGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTYxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQ0RTkxNDFDNDYyODcyMDA1MDY1QkMgLyogSlND
dXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTcxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZS5oICovOyB9OwogCQk5QkQ0RTkxQTFDNDYyQ0ZDMDA1MDY1QkMg
LyogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDRFOTE4MUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVt
ZW50UmVnaXN0cnkuY3BwICovOyB9OwpAQCAtMTI1MjEsNiArMTI1MjIsOCBAQAogCQk5QkM2QzIx
QTEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQwQkY5MTEyQTQyQkY1MDA3
MkZENDMgLyogU2NvcGVkRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY29wZWRFdmVudFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
RDBCRjkyMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjb3BlZEV2ZW50UXVldWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4MDFGMDQ2MkI4MDAxQzlDREQgLyogTGF5b3V0
RGlzYWxsb3dlZFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dERpc2FsbG93ZWRTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4
MTFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dERpc2FsbG93ZWRTY29wZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRDRFOTE0MUM0NjI4NzIwMDUwNjVCQyAvKiBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJENEU5MTgxQzQ2
MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzOTksNiArMjU0MDIsOCBAQAogCQkJCUJDRUE0ODFB
MDk3RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmNwcCAqLywKIAkJCQlCQ0VBNDgxQjA5
N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5oICovLAogCQkJCTU4MDM3MTYzMUE2NkYx
RDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggKi8sCisJCQkJOUJEMUY2ODExRjA0NjMxMDAw
MUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgKi8sCisJCQkJOUJEMUY2ODAxRjA0
NjJCODAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5oICovLAogCQkJCUExMjBBQ0Ex
MTNGOTk4NDYwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwICovLAogCQkJCUExMjBBQ0Ew
MTNGOTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuaCAqLywKIAkJCQkyRDkwNjYwNDBC
RTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovLApAQCAtMzM3NTEsNiArMzM3NTYs
NyBAQAogCQkJCTk3QUFCRDE4MTRGQTA5RDUwMDc0NTdBRSAvKiBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFERjZEODAwQjky
QTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzgz
REQxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5QkQxRjY4MjFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNj
b3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY1N0E2MEYwMTI1NkIwMDg5MUVCQiAvKiBU
aHJlYWRHbG9iYWxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE4NUJDRjI4MEYzMjc5Q0Uw
MDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0FBM0E2OTkx
OTRBNjRFNzAwMUNCRDI0IC8qIFRpbGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShy
ZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiSFRN
TExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZXRlckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgog
I2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtOTMsNiArOTQsNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMu
aCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCkBAIC0xMjg4LDggKzEyOTAs
MjcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50TgogCiAgICAgcG9z
dFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKG9iamVjdCwgZGVsZXRpb25UeXBl
LCBkZWxldGVkVGV4dCwgaW5zZXJ0aW9uVHlwZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbik7CiAj
ZWxzZQotICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCB0ZXh0
Q2hhbmdlRm9yRWRpdFR5cGUoZGVsZXRpb25UeXBlKSwgcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBkZWxldGVkVGV4dCk7Ci0gICAgbm9kZVRleHRD
aGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShp
bnNlcnRpb25UeXBlKSwgcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpLCBpbnNlcnRlZFRleHQpOworICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3Rp
ZmljYXRpb24ob2JqZWN0LCB0ZXh0Q2hhbmdlRm9yRWRpdFR5cGUoZGVsZXRpb25UeXBlKSwgcG9z
aXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZGVsZXRlZFRleHQpOworICAgIG5vZGVU
ZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCB0ZXh0Q2hhbmdlRm9yRWRpdFR5
cGUoaW5zZXJ0aW9uVHlwZSksIHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGlu
c2VydGVkVGV4dCk7CisjZW5kaWYKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJl
cGxhY2VtZW50Tm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQmIHRleHRDb250cm9sLCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBjb25zdCBTdHJp
bmcmIGluc2VydGVkVGV4dCkKK3sKKyAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmli
dXRlcygpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gZ2V0T3JDcmVhdGUo
JnRleHRDb250cm9sKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBpZiAob2JqZWN0KSB7Cisg
ICAgICAgIGlmIChlbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlmaWNhdGlvbihvYmplY3Qp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBvYmplY3QgPSBvYmplY3QtPm9ic2VydmFi
bGVPYmplY3QoKTsKKyAgICB9CisKKyAgICBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3Rp
ZmljYXRpb25Gb3JUZXh0Q29udHJvbChvYmplY3QsIGRlbGV0ZWRUZXh0LCBpbnNlcnRlZFRleHQs
IHRleHRDb250cm9sKTsKKyNlbHNlCisgICAgbm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNh
dGlvbihvYmplY3QsIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRleHRFZGl0VHlwZURlbGV0ZSks
IDAsIGRlbGV0ZWRUZXh0KTsKKyAgICBub2RlVGV4dENoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9u
KG9iamVjdCwgdGV4dENoYW5nZUZvckVkaXRUeXBlKEFYVGV4dEVkaXRUeXBlSW5zZXJ0KSwgMCwg
aW5zZXJ0ZWRUZXh0KTsKICNlbmRpZgogfQogCkBAIC0yMDgzLDQ1ICsyMTA0LDczIEBAIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmFjY2UKICAgICByZXR1cm4gdGhpcy0+Z2V0
T3JDcmVhdGUoZG9tTm9kZSk7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRh
dGFGb3JWaXNpYmxlUG9zaXRpb24oVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJEYXRhLCBjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpCitzdGQ6Om9wdGlvbmFsPFRleHRNYXJrZXJE
YXRhPiBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpCiB7Ci0gICAgLy8gVGhpcyBtZW1vcnkgbXVz
dCBiZSBiemVybydkIHNvIGluc3RhbmNlcyBvZiBUZXh0TWFya2VyRGF0YSBjYW4gYmUgdGVzdGVk
IGZvciBieXRlLWVxdWl2YWxlbmNlLgotICAgIC8vIFRoaXMgYWxzbyBhbGxvd3MgY2FsbGVycyB0
byBjaGVjayBmb3IgZmFpbHVyZSBieSBsb29raW5nIGF0IHRleHRNYXJrZXJEYXRhIHVwb24gcmV0
dXJuLgotICAgIG1lbXNldCgmdGV4dE1hcmtlckRhdGEsIDAsIHNpemVvZihUZXh0TWFya2VyRGF0
YSkpOwotICAgIAogICAgIGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKICAgICBQb3NpdGlvbiBkZWVw
UG9zID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpOwogICAgIE5vZGUqIGRvbU5vZGUgPSBk
ZWVwUG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgQVNTRVJUKGRvbU5vZGUpOwogICAgIGlmICgh
ZG9tTm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCiAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpkb21Ob2RlKSAmJiBkb3duY2Fz
dDxIVE1MSW5wdXRFbGVtZW50PigqZG9tTm9kZSkuaXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwogICAgIC8vIElm
IHRoZSB2aXNpYmxlIHBvc2l0aW9uIGhhcyBhbiBhbmNob3IgdHlwZSByZWZlcnJpbmcgdG8gYSBu
b2RlIG90aGVyIHRoYW4gdGhlIGFuY2hvcmVkIG5vZGUsIHdlIHNob3VsZAogICAgIC8vIHNldCB0
aGUgdGV4dCBtYXJrZXIgZGF0YSB3aXRoIENoYXJhY3Rlck9mZnNldCBzbyB0aGF0IHRoZSBvZmZz
ZXQgd2lsbCBjb3JyZXNwb25kIHRvIHRoZSBub2RlLgogICAgIENoYXJhY3Rlck9mZnNldCBjaGFy
YWN0ZXJPZmZzZXQgPSBjaGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQ
b3MpOwogICAgIGlmIChkZWVwUG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25J
c0FmdGVyQW5jaG9yIHx8IGRlZXBQb3MuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlv
bklzQWZ0ZXJDaGlsZHJlbikgeworICAgICAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0
YTsKICAgICAgICAgdGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRh
dGEsIGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRl
eHRNYXJrZXJEYXRhOwogICAgIH0KLSAgICAKKwogICAgIC8vIGZpbmQgb3IgY3JlYXRlIGFuIGFj
Y2Vzc2liaWxpdHkgb2JqZWN0IGZvciB0aGlzIG5vZGUKICAgICBBWE9iamVjdENhY2hlKiBjYWNo
ZSA9IGRvbU5vZGUtPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpOwogICAgIFJlZlB0cjxBY2Nl
c3NpYmlsaXR5T2JqZWN0PiBvYmogPSBjYWNoZS0+Z2V0T3JDcmVhdGUoZG9tTm9kZSk7Ci0gICAg
CisKKyAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKICAgICB0ZXh0TWFya2VyRGF0
YS5heElEID0gb2JqLmdldCgpLT5heE9iamVjdElEKCk7CiAgICAgdGV4dE1hcmtlckRhdGEubm9k
ZSA9IGRvbU5vZGU7CiAgICAgdGV4dE1hcmtlckRhdGEub2Zmc2V0ID0gZGVlcFBvcy5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpOwogICAgIHRleHRNYXJrZXJEYXRhLmFmZmluaXR5ID0gdmlzaWJs
ZVBvcy5hZmZpbml0eSgpOwotICAgIAorCiAgICAgdGV4dE1hcmtlckRhdGEuY2hhcmFjdGVyT2Zm
c2V0ID0gY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldDsKICAgICB0ZXh0TWFya2VyRGF0YS5jaGFyYWN0
ZXJTdGFydEluZGV4ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXg7Ci0gICAgCisKICAgICBj
YWNoZS0+c2V0Tm9kZUluVXNlKGRvbU5vZGUpOworCisgICAgcmV0dXJuIHRleHRNYXJrZXJEYXRh
OworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGV4aXRzIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0
aW9uIHRvIGF2b2lkIGEgc3luY2hyb25vdXMgbGF5b3V0Lgorc3RkOjpvcHRpb25hbDxUZXh0TWFy
a2VyRGF0YT4gQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JGaXJzdFBvc2l0aW9uSW5U
ZXh0Q29udHJvbChIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYgdGV4dENvbnRyb2wpCit7Cisg
ICAgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KiBpbm5lclRleHRFbGVtZW50ID0gdGV4dENv
bnRyb2wuaW5uZXJUZXh0RWxlbWVudCgpOworICAgIGlmICghaW5uZXJUZXh0RWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50
Pih0ZXh0Q29udHJvbCkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4odGV4dENvbnRyb2wp
LmlzUGFzc3dvcmRGaWVsZCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
UG9zaXRpb24gZmlyc3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk5vZGUoaW5uZXJUZXh0RWxl
bWVudCk7CisgICAgTm9kZSogZmlyc3RDaGlsZCA9IGlubmVyVGV4dEVsZW1lbnQtPmZpcnN0Q2hp
bGQoKTsKKyAgICBpZiAoIWZpcnN0Q2hpbGQpCisgICAgICAgIGZpcnN0Q2hpbGQgPSBpbm5lclRl
eHRFbGVtZW50OworICAgIENvbnRhaW5lck5vZGUqIGVkaXRpbmdIb3N0ID0gaGlnaGVzdEVkaXRh
YmxlUm9vdChmaXJzdFBvc2l0aW9uKTsKKworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gdGV4
dENvbnRyb2wuZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCk7CisgICAgUmVmUHRyPEFjY2Vzc2li
aWxpdHlPYmplY3Q+IG9iaiA9IGNhY2hlLT5nZXRPckNyZWF0ZShlZGl0aW5nSG9zdCk7CisKKyAg
ICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKKyAgICB0ZXh0TWFya2VyRGF0YS5heElE
ID0gb2JqLmdldCgpLT5heE9iamVjdElEKCk7CisgICAgdGV4dE1hcmtlckRhdGEubm9kZSA9IGZp
cnN0Q2hpbGQ7CisKKyAgICBjYWNoZS0+c2V0Tm9kZUluVXNlKCZ0ZXh0Q29udHJvbCk7CisKKyAg
ICByZXR1cm4gdGV4dE1hcmtlckRhdGE7CiB9CiAKIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENh
Y2hlOjpuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVy
T2Zmc2V0LCBib29sIGlnbm9yZU5leHROb2RlU3RhcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjE4ODIyKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEhUTUxBcmVhRWxlbWVudDsKK2NsYXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZW5kZXJCbG9jazsKQEAgLTUxLDEz
ICs1MiwxMyBAQCBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiBjbGFzcyBXaWRnZXQ7CiAKIHN0cnVj
dCBUZXh0TWFya2VyRGF0YSB7Ci0gICAgQVhJRCBheElEOwotICAgIE5vZGUqIG5vZGU7Ci0gICAg
aW50IG9mZnNldDsKLSAgICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleDsKLSAgICBpbnQgY2hhcmFj
dGVyT2Zmc2V0OwotICAgIGJvb2wgaWdub3JlZDsKLSAgICBFQWZmaW5pdHkgYWZmaW5pdHk7Cisg
ICAgQVhJRCBheElEIHsgMCB9OworICAgIE5vZGUqIG5vZGUgeyBudWxscHRyIH07CisgICAgaW50
IG9mZnNldCB7IDAgfTsKKyAgICBpbnQgY2hhcmFjdGVyU3RhcnRJbmRleCB7IDAgfTsKKyAgICBp
bnQgY2hhcmFjdGVyT2Zmc2V0IHsgMCB9OworICAgIGJvb2wgaWdub3JlZCB7IGZhbHNlIH07Cisg
ICAgRUFmZmluaXR5IGFmZmluaXR5IHsgRE9XTlNUUkVBTSB9OwogfTsKIAogc3RydWN0IENoYXJh
Y3Rlck9mZnNldCB7CkBAIC0yMTIsNyArMjEzLDggQEAgcHVibGljOgogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9iamVjdEZyb21BWElEKEFYSUQgaWQpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
cy5nZXQoaWQpOyB9CiAKICAgICAvLyBUZXh0IG1hcmtlciB1dGlsaXRpZXMuCi0gICAgdm9pZCB0
ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOworICAgIHN0ZDo6b3B0aW9uYWw8VGV4dE1hcmtlckRhdGE+IHRleHRN
YXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAg
IHN0ZDo6b3B0aW9uYWw8VGV4dE1hcmtlckRhdGE+IHRleHRNYXJrZXJEYXRhRm9yRmlyc3RQb3Np
dGlvbkluVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmKTsKICAgICB2b2lk
IHRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiwgY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZvck5leHRDaGFyYWN0
ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICB2
b2lkIHRleHRNYXJrZXJEYXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRh
dGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKQEAgLTMwMCw2ICszMDIsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oTm9kZSosIEFYVGV4
dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2
b2lkIHBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb24oTm9kZSosIEFYVGV4dEVkaXRUeXBl
IGRlbGV0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgQVhUZXh0RWRpdFR5cGUg
aW5zZXJ0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOworICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRl
eHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBkZWxl
dGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQpOwogICAgIHZvaWQgcG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRl
bnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJ
bnRlbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0TGl2ZVJlZ2lv
bkNoYW5nZU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CkBAIC0zMzcsNiArMzQw
LDcgQEAgcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcG9zdFRleHRT
dGF0ZUNoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBjb25z
dCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICAg
ICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmls
aXR5T2JqZWN0KiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOworICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0
aW9uRm9yVGV4dENvbnRyb2woQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IFN0cmluZyYgZGVs
ZXRlZFRleHQsIGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCYpOwogICAgIHZvaWQgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0
aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwg
QVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwog
I2Vsc2UKICAgICBzdGF0aWMgQVhUZXh0Q2hhbmdlIHRleHRDaGFuZ2VGb3JFZGl0VHlwZShBWFRl
eHRFZGl0VHlwZSk7CkBAIC00OTksNiArNTAzLDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6aGFuZGxlU2Nyb2xsZQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0
ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQm
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hl
Ojpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBB
WE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uKE5vZGUqLCBBWFRl
eHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIHsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEhUTUxUZXh0Rm9y
bUNvbnRyb2wmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KIGlubGluZSB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIERv
Y3VtZW50KiwgQVhOb3RpZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGlu
ZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiwgQVhO
b3RpZmljYXRpb24sIFBvc3RUYXJnZXQsIFBvc3RUeXBlKSB7IH0KIGlubGluZSB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oTm9kZSosIEFYTm90aWZpY2F0aW9uLCBQb3N0VGFy
Z2V0LCBQb3N0VHlwZSkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9BWE9iamVjdENhY2hlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0JKHJldmlzaW9uIDIxODgyMikKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTExMyw2ICsxMTMsMTEgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4
dFJlcGxhY2VtZW50UAogICAgIHBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIEFYVmFs
dWVDaGFuZ2VkKTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50
UGxhdGZvcm1Ob3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50JikKK3sKKyAgICBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCBBWFZhbHVl
Q2hhbmdlZCk7Cit9CisKIHZvaWQgQVhPYmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0
Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheEZyYW1lT2JqZWN0LCBBWExv
YWRpbmdFdmVudCBsb2FkaW5nRXZlbnQpCiB7CiAgICAgaWYgKCFheEZyYW1lT2JqZWN0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDIxODgy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwxMCBAQCAt
IChpZClpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgYWNjZXNzCiAKICsgKFdlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246KFZpc2libGVQ
b3NpdGlvbiYpdmlzaWJsZVBvcyBjYWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGUKIHsKLSAgICBU
ZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFG
b3JWaXNpYmxlUG9zaXRpb24odGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOwotICAgIAotICAg
IHJldHVybiBbW1tXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBhbGxvY10gaW5pdFdpdGhUZXh0
TWFya2VyOiZ0ZXh0TWFya2VyRGF0YSBjYWNoZTpjYWNoZV0gYXV0b3JlbGVhc2VdOworICAgIGF1
dG8gdGV4dE1hcmtlckRhdGEgPSBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRp
b24odmlzaWJsZVBvcyk7CisgICAgaWYgKCF0ZXh0TWFya2VyRGF0YSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICByZXR1cm4gW1tbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxsb2NdIGlu
aXRXaXRoVGV4dE1hcmtlcjomdGV4dE1hcmtlckRhdGEudmFsdWUoKSBjYWNoZTpjYWNoZV0gYXV0
b3JlbGVhc2VdOwogfQogCiArIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJr
ZXJXaXRoQ2hhcmFjdGVyT2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldCBj
YWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQkocmV2aXNpb24gMjE4ODIy
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDA3LDcgKzQwNywyMiBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6
OnBvc3RUZXh0U3RhdGVDaGFuZ2VQCiAgICAgW3VzZXJJbmZvIHJlbGVhc2VdOwogfQogCi1zdGF0
aWMgTlNEaWN0aW9uYXJ5ICp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9iamVjdCwgQVhUZXh0RWRpdFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCitzdGF0aWMgdm9pZCBhZGRU
ZXh0TWFya2VyRm9yKE5TTXV0YWJsZURpY3Rpb25hcnkqIGNoYW5nZSwgQWNjZXNzaWJpbGl0eU9i
amVjdCYgb2JqZWN0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIGlm
IChwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpZCB0ZXh0TWFy
a2VyID0gW29iamVjdC53cmFwcGVyKCkgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpwb3Np
dGlvbl0pCisgICAgICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHRNYXJrZXIgZm9yS2V5Ok5TQWNj
ZXNzaWJpbGl0eVRleHRDaGFuZ2VWYWx1ZVN0YXJ0TWFya2VyXTsKK30KKworc3RhdGljIHZvaWQg
YWRkVGV4dE1hcmtlckZvcihOU011dGFibGVEaWN0aW9uYXJ5KiBjaGFuZ2UsIEFjY2Vzc2liaWxp
dHlPYmplY3QmIG9iamVjdCwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250cm9s
KQoreworICAgIGlmIChpZCB0ZXh0TWFya2VyID0gW29iamVjdC53cmFwcGVyKCkgdGV4dE1hcmtl
ckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOnRleHRDb250cm9sXSkKKyAgICAgICAgW2No
YW5nZSBzZXRPYmplY3Q6dGV4dE1hcmtlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5n
ZVZhbHVlU3RhcnRNYXJrZXJdOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dE1hcmtlclRh
cmdldFR5cGU+CitzdGF0aWMgTlNEaWN0aW9uYXJ5ICp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0
aW9uYXJ5KEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgQVhUZXh0RWRpdFR5cGUgdHlwZSwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIFRleHRNYXJrZXJUYXJnZXRUeXBlJiBtYXJrZXJUYXJnZXQp
CiB7CiAgICAgTlNTdHJpbmcgKnRleHQgPSAoTlNTdHJpbmcgKilzdHJpbmc7CiAgICAgTlNVSW50
ZWdlciBsZW5ndGggPSBbdGV4dCBsZW5ndGhdOwpAQCAtNDIwLDEwICs0MzUsNyBAQCBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICp0ZXh0UmVwbGFjZW1lbnRDaGFuCiAgICAgICAgIHRleHQgPSBbdGV4dCBz
dWJzdHJpbmdUb0luZGV4OkFYVmFsdWVDaGFuZ2VUcnVuY2F0aW9uTGVuZ3RoXTsKICAgICB9CiAg
ICAgW2NoYW5nZSBzZXRPYmplY3Q6dGV4dCBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5n
ZVZhbHVlXTsKLSAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgaWYgKGlk
IHRleHRNYXJrZXIgPSBbb2JqZWN0LT53cmFwcGVyKCkgdGV4dE1hcmtlckZvclZpc2libGVQb3Np
dGlvbjpwb3NpdGlvbl0pCi0gICAgICAgICAgICBbY2hhbmdlIHNldE9iamVjdDp0ZXh0TWFya2Vy
IGZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlVmFsdWVTdGFydE1hcmtlcl07Ci0gICAg
fQorICAgIGFkZFRleHRNYXJrZXJGb3IoY2hhbmdlLCBvYmplY3QsIG1hcmtlclRhcmdldCk7CiAg
ICAgcmV0dXJuIFtjaGFuZ2UgYXV0b3JlbGVhc2VdOwogfQogCkBAIC00MzUsNiArNDQ3LDIzIEBA
IHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZVAKICAgICBwb3N0VGV4dFJl
cGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCBBWFRleHRFZGl0VHlwZVVua25v
d24sIGVtcHR5U3RyaW5nKCksIHR5cGUsIHRleHQsIHBvc2l0aW9uKTsKIH0KIAorc3RhdGljIHZv
aWQgcG9zdFVzZXJJbmZvRm9yQ2hhbmdlcyhBY2Nlc3NpYmlsaXR5T2JqZWN0JiByb290V2ViQXJl
YSwgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0LCBOU011dGFibGVBcnJheSogY2hhbmdlcykK
K3sKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IFtbTlNNdXRhYmxlRGljdGlv
bmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTo0XTsKKyAgICBbdXNlckluZm8gc2V0T2JqZWN0
OkAocGxhdGZvcm1DaGFuZ2VUeXBlRm9yV2ViQ29yZUNoYW5nZVR5cGUoQVhUZXh0U3RhdGVDaGFu
Z2VUeXBlRWRpdCkpIGZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0U3RhdGVDaGFuZ2VUeXBlS2V5
XTsKKyAgICBpZiAoY2hhbmdlcy5jb3VudCkKKyAgICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDpj
aGFuZ2VzIGZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlVmFsdWVzXTsKKworICAgIGlm
IChpZCB3cmFwcGVyID0gb2JqZWN0LndyYXBwZXIoKSkKKyAgICAgICAgW3VzZXJJbmZvIHNldE9i
amVjdDp3cmFwcGVyIGZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlRWxlbWVudF07CisK
KyAgICBBWFBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8ocm9vdFdlYkFyZWEud3JhcHBlcigp
LCBOU0FjY2Vzc2liaWxpdHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb24sIHVzZXJJbmZvKTsKKyAg
ICBpZiAocm9vdFdlYkFyZWEud3JhcHBlcigpICE9IG9iamVjdC53cmFwcGVyKCkpCisgICAgICAg
IEFYUG9zdE5vdGlmaWNhdGlvbldpdGhVc2VySW5mbyhvYmplY3Qud3JhcHBlcigpLCBOU0FjY2Vz
c2liaWxpdHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb24sIHVzZXJJbmZvKTsKKworICAgIFt1c2Vy
SW5mbyByZWxlYXNlXTsKK30KKwogdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2Vt
ZW50UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBBWFRl
eHRFZGl0VHlwZSBkZWxldGlvblR5cGUsIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIEFYVGV4
dEVkaXRUeXBlIGluc2VydGlvblR5cGUsIGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0LCBjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIGlmICghb2JqZWN0KQpAQCAtNDQz
LDI2ICs0NzIsMzAgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UAog
ICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICp1c2VySW5mbyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBh
Y2l0eTo0XTsKLSAgICBbdXNlckluZm8gc2V0T2JqZWN0OkAocGxhdGZvcm1DaGFuZ2VUeXBlRm9y
V2ViQ29yZUNoYW5nZVR5cGUoQVhUZXh0U3RhdGVDaGFuZ2VUeXBlRWRpdCkpIGZvcktleTpOU0Fj
Y2Vzc2liaWxpdHlUZXh0U3RhdGVDaGFuZ2VUeXBlS2V5XTsKLQogICAgIE5TTXV0YWJsZUFycmF5
ICpjaGFuZ2VzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eToyXTsK
LSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0
aW9uYXJ5KG9iamVjdCwgZGVsZXRpb25UeXBlLCBkZWxldGVkVGV4dCwgcG9zaXRpb24pKQorICAg
IGlmIChOU0RpY3Rpb25hcnkgKmNoYW5nZSA9IHRleHRSZXBsYWNlbWVudENoYW5nZURpY3Rpb25h
cnkoKm9iamVjdCwgZGVsZXRpb25UeXBlLCBkZWxldGVkVGV4dCwgcG9zaXRpb24pKQogICAgICAg
ICBbY2hhbmdlcyBhZGRPYmplY3Q6Y2hhbmdlXTsKLSAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFu
Z2UgPSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KG9iamVjdCwgaW5zZXJ0aW9uVHlw
ZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbikpCisgICAgaWYgKE5TRGljdGlvbmFyeSAqY2hhbmdl
ID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeSgqb2JqZWN0LCBpbnNlcnRpb25UeXBl
LCBpbnNlcnRlZFRleHQsIHBvc2l0aW9uKSkKICAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNo
YW5nZV07Ci0gICAgaWYgKGNoYW5nZXMuY291bnQpCi0gICAgICAgIFt1c2VySW5mbyBzZXRPYmpl
Y3Q6Y2hhbmdlcyBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVlc107CisgICAg
cG9zdFVzZXJJbmZvRm9yQ2hhbmdlcygqcm9vdFdlYkFyZWEoKSwgKm9iamVjdCwgY2hhbmdlcyk7
CiAgICAgW2NoYW5nZXMgcmVsZWFzZV07Cit9CiAKLSAgICBpZiAoaWQgd3JhcHBlciA9IG9iamVj
dC0+d3JhcHBlcigpKQotICAgICAgICBbdXNlckluZm8gc2V0T2JqZWN0OndyYXBwZXIgZm9yS2V5
Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFuZ2VFbGVtZW50XTsKK3ZvaWQgQVhPYmplY3RDYWNoZTo6
cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBjb25z
dCBTdHJpbmcmIGluc2VydGVkVGV4dCwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRD
b250cm9sKQoreworICAgIGlmICghb2JqZWN0KQorICAgICAgICBvYmplY3QgPSByb290V2ViQXJl
YSgpOwogCi0gICAgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKHJvb3RXZWJBcmVhKCkt
PndyYXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0aW9uLCB1c2Vy
SW5mbyk7Ci0gICAgaWYgKHJvb3RXZWJBcmVhKCktPndyYXBwZXIoKSAhPSBvYmplY3QtPndyYXBw
ZXIoKSkKLSAgICAgICAgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKG9iamVjdC0+d3Jh
cHBlcigpLCBOU0FjY2Vzc2liaWxpdHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb24sIHVzZXJJbmZv
KTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgW3VzZXJJbmZvIHJl
bGVhc2VdOworICAgIE5TTXV0YWJsZUFycmF5ICpjaGFuZ2VzID0gW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eToyXTsKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2Ug
PSB0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KCpvYmplY3QsIEFYVGV4dEVkaXRUeXBl
RGVsZXRlLCBkZWxldGVkVGV4dCwgdGV4dENvbnRyb2wpKQorICAgICAgICBbY2hhbmdlcyBhZGRP
YmplY3Q6Y2hhbmdlXTsKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFj
ZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KCpvYmplY3QsIEFYVGV4dEVkaXRUeXBlSW5zZXJ0LCBpbnNl
cnRlZFRleHQsIHRleHRDb250cm9sKSkKKyAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5n
ZV07CisgICAgcG9zdFVzZXJJbmZvRm9yQ2hhbmdlcygqcm9vdFdlYkFyZWEoKSwgKm9iamVjdCwg
Y2hhbmdlcyk7CisgICAgW2NoYW5nZXMgcmVsZWFzZV07CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNo
ZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBheEZyYW1lT2JqZWN0LCBBWExvYWRpbmdFdmVudCBsb2FkaW5nRXZlbnQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaAkocmV2aXNpb24gMjE4ODIyKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgY2xhc3MgQWNj
ZXNzaWJpbGl0eU9iamVjdDsKIHN0cnVjdCBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWE7CiBj
bGFzcyBJbnRSZWN0OwogY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50OwogY2xhc3MgUGF0aDsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAkocmV2aXNpb24gMjE4ODIyKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBAaW50ZXJmYWNl
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyCiAKIC0gKGlkKXRleHRNYXJrZXJSYW5nZUZy
b21WaXNpYmxlUG9zaXRpb25zOihjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mKXN0YXJ0
UG9zaXRpb24gZW5kUG9zaXRpb246KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYpZW5k
UG9zaXRpb247CiAtIChpZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihjb25zdCBXZWJD
b3JlOjpWaXNpYmxlUG9zaXRpb24mKXZpc2libGVQb3M7CistIChpZCl0ZXh0TWFya2VyRm9yRmly
c3RQb3NpdGlvbkluVGV4dENvbnRyb2w6KFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50Jil0ZXh0Q29udHJvbDsKIAogLy8gV2hlbiBhIHBsdWdpbiB1c2VzIGEgV2ViS2l0IGNvbnRy
b2wgdG8gYWN0IGFzIGEgc3Vycm9nYXRlIHZpZXcgKGUuZy4gUERGIHVzZSBXZWJLaXQgdG8gY3Jl
YXRlIHRleHQgZmllbGRzKS4KIC0gKGlkKWFzc29jaWF0ZWRQbHVnaW5QYXJlbnQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjE4ODIyKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY4MSwxMyArNjgxLDEyIEBAIC0gKENo
YXJhY3Rlck9mZnNldCljaGFyYWN0ZXJPZmZzZXRGb3JUZXgKIHN0YXRpYyBpZCB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZpc2libGVQb3MpCiB7CiAgICAgQVNTRVJUKGNhY2hlKTsKLSAgICAKLSAgICBUZXh0
TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JW
aXNpYmxlUG9zaXRpb24odGV4dE1hcmtlckRhdGEsIHZpc2libGVQb3MpOwotICAgIGlmICghdGV4
dE1hcmtlckRhdGEuYXhJRCkKKworICAgIGF1dG8gdGV4dE1hcmtlckRhdGEgPSBjYWNoZS0+dGV4
dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcyk7CisgICAgaWYgKCF0ZXh0
TWFya2VyRGF0YSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICByZXR1cm4gQ0ZCcmlk
Z2luZ1JlbGVhc2Uod2tDcmVhdGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJEYXRhLCBzaXplb2Yo
dGV4dE1hcmtlckRhdGEpKSk7CisKKyAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2Uod2tDcmVh
dGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJEYXRhLnZhbHVlKCksIHNpemVvZih0ZXh0TWFya2Vy
RGF0YS52YWx1ZSgpKSkpOwogfQogCiAtIChpZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9u
Oihjb25zdCBWaXNpYmxlUG9zaXRpb24gJil2aXNpYmxlUG9zCkBAIC02OTUsNiArNjk0LDE5IEBA
IC0gKGlkKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnMKICAgICByZXR1cm4gdGV4
dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB2aXNp
YmxlUG9zKTsKIH0KIAorLSAoaWQpdGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250
cm9sOihIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCAmKXRleHRDb250cm9sCit7CisgICAgYXV0
byAqY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvIHRleHRNYXJrZXJEYXRhID0gY2FjaGUtPnRl
eHRNYXJrZXJEYXRhRm9yRmlyc3RQb3NpdGlvbkluVGV4dENvbnRyb2wodGV4dENvbnRyb2wpOwor
ICAgIGlmICghdGV4dE1hcmtlckRhdGEpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1
cm4gQ0ZCcmlkZ2luZ1JlbGVhc2Uod2tDcmVhdGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJEYXRh
LnZhbHVlKCksIHNpemVvZih0ZXh0TWFya2VyRGF0YS52YWx1ZSgpKSkpOworfQorCiBzdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNo
ZSogY2FjaGUsIENGVHlwZVJlZiB0ZXh0TWFya2VyKQogewogICAgIEFTU0VSVChjYWNoZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsNyBA
QAogI2luY2x1ZGUgIkpTTGF6eUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2
ZW50LmgiCiAjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJMYXlvdXREaXNhbGxvd2Vk
U2NvcGUuaCIKICNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKQEAgLTE5MTQsNiArMTkxNSw3IEBAIHZvaWQgRG9j
dW1lbnQ6OnVwZGF0ZVN0eWxlSWZOZWVkZWQoKQogCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlv
dXQoKQogeworICAgIEFTU0VSVChMYXlvdXREaXNhbGxvd2VkU2NvcGU6OmlzTGF5b3V0QWxsb3dl
ZCgpKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSB2aWV3KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUg
IkxheW91dERpc2FsbG93ZWRTY29wZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24uaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
CkBAIC01NDksNyArNTUwLDggQEAgc3RhdGljIFN0cmluZyBpbm5lclRleHRWYWx1ZUZyb20oVGV4
dENvbgogCiB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRWYWx1
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVu
dCogaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgpOworICAgIExheW91dERpc2FsbG93ZWRT
Y29wZSBsYXlvdXREaXNhbGxvd2VkU2NvcGUoTGF5b3V0RGlzYWxsb3dlZFNjb3BlOjpSZWFzb246
OlBlcmZvcm1hbmNlT3B0aW1pemF0aW9uKTsKKyAgICBSZWZQdHI8VGV4dENvbnRyb2xJbm5lclRl
eHRFbGVtZW50PiBpbm5lclRleHQgPSBpbm5lclRleHRFbGVtZW50KCk7CiAgICAgaWYgKCFpbm5l
clRleHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTc3LDcgKzU3OSw3IEBAIHZvaWQgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldElubmUKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYm
IFBMQVRGT1JNKENPQ09BKQogICAgICAgICBpZiAodGV4dElzQ2hhbmdlZCAmJiByZW5kZXJlcigp
KSB7CiAgICAgICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4
aXN0aW5nQVhPYmplY3RDYWNoZSgpKQotICAgICAgICAgICAgICAgIGNhY2hlLT5wb3N0VGV4dFJl
cGxhY2VtZW50Tm90aWZpY2F0aW9uKHRoaXMsIEFYVGV4dEVkaXRUeXBlRGVsZXRlLCBwcmV2aW91
c1ZhbHVlLCBBWFRleHRFZGl0VHlwZUluc2VydCwgdmFsdWUsIFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbih0aGlzLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcikpKTsKKyAgICAgICAg
ICAgICAgICBjYWNoZS0+cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZvclRleHRDb250
cm9sKCp0aGlzLCBwcmV2aW91c1ZhbHVlLCB2YWx1ZSk7CiAgICAgICAgIH0KICNlbmRpZgogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2VkU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxv
d2VkU2NvcGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
YXlvdXREaXNhbGxvd2VkU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0RGlzYWxs
b3dlZFNjb3BlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFBU1NFUlRfRElTQUJM
RUQKKworTGF5b3V0RGlzYWxsb3dlZFNjb3BlKiBMYXlvdXREaXNhbGxvd2VkU2NvcGU6OnNfY3Vy
cmVudEFzc2VydGlvbiA9IG51bGxwdHI7CisKKyNlbmRpZgorCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dERpc2FsbG93ZWRTY29wZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2VkU2NvcGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKworY2xhc3Mg
TGF5b3V0RGlzYWxsb3dlZFNjb3BlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFJlYXNvbiB7
IFBlcmZvcm1hbmNlT3B0aW1pemF0aW9uIH07CisgICAgTGF5b3V0RGlzYWxsb3dlZFNjb3BlKFJl
YXNvbikKKyAgICAgICAgOiBtX3ByZXZpb3VzQXNzZXJ0aW9uKHNfY3VycmVudEFzc2VydGlvbikK
KyAgICB7CisgICAgICAgIHNfY3VycmVudEFzc2VydGlvbiA9IHRoaXM7CisgICAgfQorCisgICAg
fkxheW91dERpc2FsbG93ZWRTY29wZSgpCisgICAgeworICAgICAgICBzX2N1cnJlbnRBc3NlcnRp
b24gPSBtX3ByZXZpb3VzQXNzZXJ0aW9uOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzTGF5
b3V0QWxsb3dlZCgpIHsgcmV0dXJuICFzX2N1cnJlbnRBc3NlcnRpb247IH0KKworcHJpdmF0ZToK
KyAgICBMYXlvdXREaXNhbGxvd2VkU2NvcGUqIG1fcHJldmlvdXNBc3NlcnRpb247CisgICAgc3Rh
dGljIExheW91dERpc2FsbG93ZWRTY29wZSogc19jdXJyZW50QXNzZXJ0aW9uOworfTsKKworI2Vs
c2UKKworY2xhc3MgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNs
YXNzIFJlYXNvbiB7IFBlcmZvcm1hbmNlT3B0aW1pemF0aW9uIH07CisgICAgTGF5b3V0RGlzYWxs
b3dlZFNjb3BlKFJlYXNvbikgeyB9CisgICAgc3RhdGljIGJvb2wgaXNMYXlvdXRBbGxvd2VkKCkg
eyByZXR1cm4gdHJ1ZTsgfQorfTsKKworI2VuZGlmCisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314087</attachid>
            <date>2017-06-28 19:00:23 -0700</date>
            <delta_ts>2017-06-28 19:04:43 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-173912-20170628190022.patch</filename>
            <type>text/plain</type>
            <size>35905</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE3LTA2LTI4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNhZmFyaSdzIFNwZWVkb21ldGVy
IHNjb3JlIG1hc3NpdmVseSByZWdyZXNzZXMgd2hlbiBhY2Nlc3NpYmlsaXR5IGlzIGVuYWJsZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzkxMgor
CisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgorCisgICAgICAgIFRoZSBidWcg
d2FzIGNhdXNlZCBieSBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0SW5uZXJUZXh0VmFs
dWUgdHJpZ2dlcmluZyBhIHN5bmNocm9ub3VzIGxheW91dAorICAgICAgICB2aWEgY29uc3RydWN0
aW5nIFZpc2libGVQb3NpdGlvbiB3aGVuIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgaXMgcHJlc2Vu
dC4KKworICAgICAgICBBZGRlZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wgd2hpY2ggYXZvaWRzIHRoZSBjb25zdHJ1Y3Rpb24gb2YK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGFuZCBvdGhlciBtZWFucyBvZiB0cmlnZ2VyaW5nIGEg
c3luY2hyb25vdXMgbGF5b3V0LiBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSBzdWJ0bGUgYnVnCisg
ICAgICAgIHRoYXQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgd2FzIGNyZWF0aW5nIFRleHRN
YXJrZXJEYXRhIHdpdGggYXhJRCBzZXQgdG8gdGhhdCBvZiB0aGUgdGV4dCBjb250cm9sCisgICAg
ICAgIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IGluc2lkZSBp
dHMgc2hhZG93IHRyZWUgZXZlbiB0aG91Z2ggdGhlIHR5cGluZyBjb21tYW5kIHVzZXMKKyAgICAg
ICAgYXhJRCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50LiBXaGlsZSBJIGNvdWxkbid0IGZp
bmQgYW55IHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZSBmcm9tIHRoaXMKKyAgICAgICAg
Y29kZSBjaGFuZ2UsIG5ldyBjb2RlIGlzIG1vcmUgc2VsZi1jb25zaXN0ZW50LgorCisgICAgICAg
IEFsc28gYWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIHdoaWNoIGFzc2VydHMgdGhhdCBubyBz
eW5jaHJvbm91cyBsYXlvdXQgaGFwcGVucyBpbiBzZXRJbm5lclRleHRWYWx1ZQorICAgICAgICBz
byB0aGF0IHdlIGRvbid0IGludHJvZHVjZSBhIG5ldyBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGxp
a2UgdGhpcyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3Rpbmcg
dGVzdHMgaW4gYWNjZXNzaWJpbGl0eSBkaXJlY3RvcnkgY292ZXJzIHRoaXMuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDogQWRkZWQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcC4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJv
bCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRh
dGFGb3JWaXNpYmxlUG9zaXRpb24pOiBNb2Rlcm5pemVkLiBSZXR1cm5zIG9wdGlvbmFsPFRleHRN
YXJrZXJEYXRhPgorICAgICAgICBpbnN0ZWFkIG9mIHRha2luZyBUZXh0TWFya2VyRGF0YSBhcyBh
biBvdXQtYXJndW1lbnQsIGFuZCByZXR1cm5pbmcgd2l0aCBheElEIG9mIDAuCisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvckZpcnN0UG9zaXRpb25JblRl
eHRDb250cm9sKTogQWRkZWQuIFRoaXMgc3BlY2lhbGl6ZWQgdmVyc2lvbgorICAgICAgICBjb25z
dHJ1Y3RzIFRleHRNYXJrZXJEYXRhIGZvciB0aGUgZmlyc3QgcG9zaXRpb24gaW5zaWRlIHRoZSBl
ZGl0YWJsZSByZWdpb24gaW4gYSB0ZXh0IGNvbnRyb2wgd2l0aG91dAorICAgICAgICB0cmlnZ2Vy
aW5nIGEgc3luY2hyb25vdXMgbGF5b3V0LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFya2VyRGF0YSk6IEluaXRpYWxp
emUgZWFjaCBtZW1iZXIgYXV0b21hdGljYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbCk6CisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90
aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wpOiBBZGRlZC4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoK1tX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpj
YWNoZTpdKToKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjphZGRUZXh0TWFya2VyRm9yKTogRXh0cmFjdGVkIGZyb20g
dGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeS4gQWRkZWQgYSBuZXcgdmFyaWFudCB3aGlj
aAorICAgICAgICB0YWtlcyBhIHRleHQgZm9ybSBjb250cm9sIGluc3RlYWQuCisgICAgICAgIChX
ZWJDb3JlOjp0ZXh0UmVwbGFjZW1lbnRDaGFuZ2VEaWN0aW9uYXJ5KTogVGVtcGxhdGl6ZWQgdGhp
cyBmdW5jdGlvbiB0byBlaXRoZXIgdGFrZSBWaXNpYmxlUG9zaXRpb24KKyAgICAgICAgYW5kIGNh
bGwgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbiBvciB0YWtlIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50IGFuZCBjYWxsCisgICAgICAgIHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5U
ZXh0Q29udHJvbC4KKyAgICAgICAgKFdlYkNvcmU6OnBvc3RVc2VySW5mb0ZvckNoYW5nZXMpOiBF
eHRyYWN0ZWQgZnJvbSBwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZvcm1Ob3RpZmljYXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50UGxhdGZv
cm1Ob3RpZmljYXRpb24pOiAKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RU
ZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKTogQWRkZWQu
CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5oOgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICh0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
dGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOl0pOiBBZGRlZC4KKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBk
YXRlTGF5b3V0KTogQXNzZXJ0IHRoYXQgTGF5b3V0RGlzYWxsb3dlZFNjb3BlIGlzIG5vdCBpbiB0
aGUgc3RhY2sgZnJhbWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZXRJbm5lclRleHRWYWx1ZSk6IENhbGwgcG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sCisgICAgICAgIHRvIGF2b2lkIHRyaWdnZXJpbmcgYSBzeW5jaHJvbm91cyBs
YXlvdXQuIEFsc28gY3JlYXRlIExheW91dERpc2FsbG93ZWRTY29wZSB0byBhdm9pZCBhIHNpbWls
YXIgcGVyZm9ybWFuY2UKKyAgICAgICAgcmVncmVzc2lvbiBmcm9tIGJlaW5nIGludHJvZHVjZWQg
aW4gdGhlIGZ1dHVyZSBpbiB0aGlzIGZ1bmN0aW9uLiBGaW5hbGx5LCBtYWRlIGlubmVyVGV4dCBh
IFJlZlB0ciBmb3IgZXh0cmEKKyAgICAgICAgc2FmZXR5IHNpbmNlIHdlJ3JlIHVzaW5nIGl0IGFm
dGVyIHVwZGF0aW5nIHRoZSBET00gdHJlZS4KKworICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRE
aXNhbGxvd2VkU2NvcGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0RGlz
YWxsb3dlZFNjb3BlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0RGlzYWxsb3dl
ZFNjb3BlOjpMYXlvdXREaXNhbGxvd2VkU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
RGlzYWxsb3dlZFNjb3BlOjp+TGF5b3V0RGlzYWxsb3dlZFNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dERpc2FsbG93ZWRTY29wZTo6aXNMYXlvdXRBbGxvd2VkKToKKwogMjAxNy0wNi0y
OCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnRM
b2FkZXIgc2hvdWxkIGFsd2F5cyBub3RpZnkgdGhlIGNsaWVudCBpZiB0aGVyZSBhcmUgcGVuZGlu
ZyBpY29uIGxvYWRzIHdoZW4gdGhlIGxvYWQgaXMgc3RvcHBlZC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMjUxMCw2ICsyNTEwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAogICAgIHJlbmRlcmluZy9JbmxpbmVJ
dGVyYXRvci5jcHAKICAgICByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKyAgICByZW5kZXJp
bmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAogICAgIHJlbmRlcmluZy9MYXlvdXRSZXBhaW50
ZXIuY3BwCiAgICAgcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAogICAgIHJlbmRlcmluZy9PcmRl
ckl0ZXJhdG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4ODIyKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjM3
LDYgKzQyMzcsNyBAQAogCQk5QkM2QzIxQzEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUJDNkMyMUExM0NDQzk3QjAwOEUwMzM3IC8qIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcCAqLzsgfTsKIAkJOUJEMEJGOTMxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2
ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCRDBCRjkxMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmggKi87IH07CiAJ
CTlCRDBCRjk0MTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDBCRjkyMTJBNDJCRjUw
MDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLzsgfTsKKwkJOUJEMUY2ODIxRjA0NjMx
MDAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQxRjY4MTFGMDQ2MzEwMDAxQzlDREQgLyog
TGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTYxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkQ0RTkxNDFDNDYyODcyMDA1MDY1QkMgLyogSlND
dXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcCAqLzsgfTsKIAkJOUJENEU5MTcxQzQ2Mjg3MjAwNTA2
NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZS5oICovOyB9OwogCQk5QkQ0RTkxQTFDNDYyQ0ZDMDA1MDY1QkMg
LyogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDRFOTE4MUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVt
ZW50UmVnaXN0cnkuY3BwICovOyB9OwpAQCAtMTI1MjEsNiArMTI1MjIsOCBAQAogCQk5QkM2QzIx
QTEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQwQkY5MTEyQTQyQkY1MDA3
MkZENDMgLyogU2NvcGVkRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY29wZWRFdmVudFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
RDBCRjkyMTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjb3BlZEV2ZW50UXVldWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4MDFGMDQ2MkI4MDAxQzlDREQgLyogTGF5b3V0
RGlzYWxsb3dlZFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91
dERpc2FsbG93ZWRTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkQxRjY4
MTFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dERpc2FsbG93ZWRTY29wZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRDRFOTE0MUM0NjI4NzIwMDUwNjVCQyAvKiBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUJENEU5MTUxQzQ2Mjg3MjAwNTA2NUJDIC8qIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJENEU5MTgxQzQ2
MkNGQzAwNTA2NUJDIC8qIEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzOTksNiArMjU0MDIsOCBAQAogCQkJCUJDRUE0ODFB
MDk3RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmNwcCAqLywKIAkJCQlCQ0VBNDgxQjA5
N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5oICovLAogCQkJCTU4MDM3MTYzMUE2NkYx
RDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggKi8sCisJCQkJOUJEMUY2ODExRjA0NjMxMDAw
MUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5jcHAgKi8sCisJCQkJOUJEMUY2ODAxRjA0
NjJCODAwMUM5Q0REIC8qIExheW91dERpc2FsbG93ZWRTY29wZS5oICovLAogCQkJCUExMjBBQ0Ex
MTNGOTk4NDYwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwICovLAogCQkJCUExMjBBQ0Ew
MTNGOTk4MzcwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuaCAqLywKIAkJCQkyRDkwNjYwNDBC
RTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovLApAQCAtMzM3NTEsNiArMzM3NTYs
NyBAQAogCQkJCTk3QUFCRDE4MTRGQTA5RDUwMDc0NTdBRSAvKiBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFERjZEODAwQjky
QTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzgz
REQxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5QkQxRjY4MjFGMDQ2MzEwMDAxQzlDREQgLyogTGF5b3V0RGlzYWxsb3dlZFNj
b3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY1N0E2MEYwMTI1NkIwMDg5MUVCQiAvKiBU
aHJlYWRHbG9iYWxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE4NUJDRjI4MEYzMjc5Q0Uw
MDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0FBM0E2OTkx
OTRBNjRFNzAwMUNCRDI0IC8qIFRpbGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShy
ZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiSFRN
TExhYmVsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZXRlckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgog
I2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtOTMsNiArOTQsNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMu
aCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCkBAIC0xMjkzLDYgKzEyOTUs
MjUgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50TgogI2VuZGlmCiB9
CiAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiB0ZXh0Q29udHJvbCwgY29u
c3QgU3RyaW5nJiBkZWxldGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQpCit7Cisg
ICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKworICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKCZ0ZXh0Q29udHJvbCk7CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgaWYgKG9iamVjdCkgeworICAgICAgICBpZiAoZW5xdWV1ZVBhc3N3
b3JkVmFsdWVDaGFuZ2VOb3RpZmljYXRpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxlT2JqZWN0KCk7CisgICAgfQorCisg
ICAgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2wo
b2JqZWN0LCBkZWxldGVkVGV4dCwgaW5zZXJ0ZWRUZXh0LCB0ZXh0Q29udHJvbCk7CisjZWxzZQor
ICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqZWN0LCB0ZXh0Q2hhbmdl
Rm9yRWRpdFR5cGUoQVhUZXh0RWRpdFR5cGVEZWxldGUpLCAwLCBkZWxldGVkVGV4dCk7CisgICAg
bm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihvYmplY3QsIHRleHRDaGFuZ2VGb3JF
ZGl0VHlwZShBWFRleHRFZGl0VHlwZUluc2VydCksIDAsIGluc2VydGVkVGV4dCk7CisjZW5kaWYK
K30KKwogYm9vbCBBWE9iamVjdENhY2hlOjplbnF1ZXVlUGFzc3dvcmRWYWx1ZUNoYW5nZU5vdGlm
aWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgaWYgKCFpc1Bhc3N3
b3JkRmllbGRPckNvbnRhaW5lZEJ5UGFzc3dvcmRGaWVsZChvYmplY3QpKQpAQCAtMjA4Myw0NSAr
MjEwNCw3MyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjphY2NlCiAgICAg
cmV0dXJuIHRoaXMtPmdldE9yQ3JlYXRlKGRvbU5vZGUpOwogfQogCi12b2lkIEFYT2JqZWN0Q2Fj
aGU6OnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKFRleHRNYXJrZXJEYXRhJiB0ZXh0
TWFya2VyRGF0YSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQorc3RkOjpvcHRp
b25hbDxUZXh0TWFya2VyRGF0YT4gQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JWaXNp
YmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogewotICAgIC8v
IFRoaXMgbWVtb3J5IG11c3QgYmUgYnplcm8nZCBzbyBpbnN0YW5jZXMgb2YgVGV4dE1hcmtlckRh
dGEgY2FuIGJlIHRlc3RlZCBmb3IgYnl0ZS1lcXVpdmFsZW5jZS4KLSAgICAvLyBUaGlzIGFsc28g
YWxsb3dzIGNhbGxlcnMgdG8gY2hlY2sgZm9yIGZhaWx1cmUgYnkgbG9va2luZyBhdCB0ZXh0TWFy
a2VyRGF0YSB1cG9uIHJldHVybi4KLSAgICBtZW1zZXQoJnRleHRNYXJrZXJEYXRhLCAwLCBzaXpl
b2YoVGV4dE1hcmtlckRhdGEpKTsKLSAgICAKICAgICBpZiAodmlzaWJsZVBvcy5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCiAg
ICAgUG9zaXRpb24gZGVlcFBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBO
b2RlKiBkb21Ob2RlID0gZGVlcFBvcy5kZXByZWNhdGVkTm9kZSgpOwogICAgIEFTU0VSVChkb21O
b2RlKTsKICAgICBpZiAoIWRvbU5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwogICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PigqZG9t
Tm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmRvbU5vZGUpLmlzUGFzc3dvcmRG
aWVsZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKICAgICAvLyBJZiB0aGUgdmlzaWJsZSBwb3NpdGlvbiBoYXMgYW4gYW5jaG9yIHR5cGUg
cmVmZXJyaW5nIHRvIGEgbm9kZSBvdGhlciB0aGFuIHRoZSBhbmNob3JlZCBub2RlLCB3ZSBzaG91
bGQKICAgICAvLyBzZXQgdGhlIHRleHQgbWFya2VyIGRhdGEgd2l0aCBDaGFyYWN0ZXJPZmZzZXQg
c28gdGhhdCB0aGUgb2Zmc2V0IHdpbGwgY29ycmVzcG9uZCB0byB0aGUgbm9kZS4KICAgICBDaGFy
YWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0RnJvbVZpc2libGVQ
b3NpdGlvbih2aXNpYmxlUG9zKTsKICAgICBpZiAoZGVlcFBvcy5hbmNob3JUeXBlKCkgPT0gUG9z
aXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBkZWVwUG9zLmFuY2hvclR5cGUoKSA9PSBQ
b3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW4pIHsKKyAgICAgICAgVGV4dE1hcmtlckRh
dGEgdGV4dE1hcmtlckRhdGE7CiAgICAgICAgIHRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zm
c2V0KHRleHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJPZmZzZXQpOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB0ZXh0TWFya2VyRGF0YTsKICAgICB9Ci0gICAgCisKICAgICAvLyBmaW5k
IG9yIGNyZWF0ZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCBmb3IgdGhpcyBub2RlCiAgICAgQVhP
YmplY3RDYWNoZSogY2FjaGUgPSBkb21Ob2RlLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKTsK
ICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gY2FjaGUtPmdldE9yQ3JlYXRl
KGRvbU5vZGUpOwotICAgIAorCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CiAg
ICAgdGV4dE1hcmtlckRhdGEuYXhJRCA9IG9iai5nZXQoKS0+YXhPYmplY3RJRCgpOwogICAgIHRl
eHRNYXJrZXJEYXRhLm5vZGUgPSBkb21Ob2RlOwogICAgIHRleHRNYXJrZXJEYXRhLm9mZnNldCA9
IGRlZXBQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICB0ZXh0TWFya2VyRGF0YS5h
ZmZpbml0eSA9IHZpc2libGVQb3MuYWZmaW5pdHkoKTsKLSAgICAKKwogICAgIHRleHRNYXJrZXJE
YXRhLmNoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldC5vZmZzZXQ7CiAgICAgdGV4dE1h
cmtlckRhdGEuY2hhcmFjdGVyU3RhcnRJbmRleCA9IGNoYXJhY3Rlck9mZnNldC5zdGFydEluZGV4
OwotICAgIAorCiAgICAgY2FjaGUtPnNldE5vZGVJblVzZShkb21Ob2RlKTsKKworICAgIHJldHVy
biB0ZXh0TWFya2VyRGF0YTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBleGl0cyBhcyBhIHBlcmZv
cm1hbmNlIG9wdGltaXphdGlvbiB0byBhdm9pZCBhIHN5bmNocm9ub3VzIGxheW91dC4KK3N0ZDo6
b3B0aW9uYWw8VGV4dE1hcmtlckRhdGE+IEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9y
Rmlyc3RQb3NpdGlvbkluVGV4dENvbnRyb2woSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRl
eHRDb250cm9sKQoreworICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0
RWxlbWVudCA9IHRleHRDb250cm9sLmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBpZiAoIWlubmVy
VGV4dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoaXM8
SFRNTElucHV0RWxlbWVudD4odGV4dENvbnRyb2wpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KHRleHRDb250cm9sKS5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIFBvc2l0aW9uIGZpcnN0UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5O
b2RlKGlubmVyVGV4dEVsZW1lbnQpOworICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBpbm5lclRleHRF
bGVtZW50LT5maXJzdENoaWxkKCk7CisgICAgaWYgKCFmaXJzdENoaWxkKQorICAgICAgICBmaXJz
dENoaWxkID0gaW5uZXJUZXh0RWxlbWVudDsKKyAgICBDb250YWluZXJOb2RlKiBlZGl0aW5nSG9z
dCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoZmlyc3RQb3NpdGlvbik7CisKKyAgICBBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IHRleHRDb250cm9sLmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpOworICAg
IFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBjYWNoZS0+Z2V0T3JDcmVhdGUoZWRp
dGluZ0hvc3QpOworCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CisgICAgdGV4
dE1hcmtlckRhdGEuYXhJRCA9IG9iai5nZXQoKS0+YXhPYmplY3RJRCgpOworICAgIHRleHRNYXJr
ZXJEYXRhLm5vZGUgPSBmaXJzdENoaWxkOworCisgICAgY2FjaGUtPnNldE5vZGVJblVzZSgmdGV4
dENvbnRyb2wpOworCisgICAgcmV0dXJuIHRleHRNYXJrZXJEYXRhOwogfQogCiBDaGFyYWN0ZXJP
ZmZzZXQgQVhPYmplY3RDYWNoZTo6bmV4dENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJP
ZmZzZXQmIGNoYXJhY3Rlck9mZnNldCwgYm9vbCBpZ25vcmVOZXh0Tm9kZVN0YXJ0KQpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHJldmlzaW9u
IDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQ7CitjbGFzcyBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVuZGVy
QmxvY2s7CkBAIC01MSwxMyArNTIsMTMgQEAgY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogY2xhc3Mg
V2lkZ2V0OwogCiBzdHJ1Y3QgVGV4dE1hcmtlckRhdGEgewotICAgIEFYSUQgYXhJRDsKLSAgICBO
b2RlKiBub2RlOwotICAgIGludCBvZmZzZXQ7Ci0gICAgaW50IGNoYXJhY3RlclN0YXJ0SW5kZXg7
Ci0gICAgaW50IGNoYXJhY3Rlck9mZnNldDsKLSAgICBib29sIGlnbm9yZWQ7Ci0gICAgRUFmZmlu
aXR5IGFmZmluaXR5OworICAgIEFYSUQgYXhJRCB7IDAgfTsKKyAgICBOb2RlKiBub2RlIHsgbnVs
bHB0ciB9OworICAgIGludCBvZmZzZXQgeyAwIH07CisgICAgaW50IGNoYXJhY3RlclN0YXJ0SW5k
ZXggeyAwIH07CisgICAgaW50IGNoYXJhY3Rlck9mZnNldCB7IDAgfTsKKyAgICBib29sIGlnbm9y
ZWQgeyBmYWxzZSB9OworICAgIEVBZmZpbml0eSBhZmZpbml0eSB7IERPV05TVFJFQU0gfTsKIH07
CiAKIHN0cnVjdCBDaGFyYWN0ZXJPZmZzZXQgewpAQCAtMjEyLDcgKzIxMyw4IEBAIHB1YmxpYzoK
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RGcm9tQVhJRChBWElEIGlkKSBjb25zdCB7
IHJldHVybiBtX29iamVjdHMuZ2V0KGlkKTsgfQogCiAgICAgLy8gVGV4dCBtYXJrZXIgdXRpbGl0
aWVzLgotICAgIHZvaWQgdGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24oVGV4dE1hcmtl
ckRhdGEmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFRleHRN
YXJrZXJEYXRhPiB0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFRleHRNYXJrZXJEYXRhPiB0ZXh0TWFya2Vy
RGF0YUZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50Jik7CiAgICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZvckNoYXJhY3Rlck9mZnNldChUZXh0TWFy
a2VyRGF0YSYsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIHZvaWQgdGV4dE1hcmtlckRh
dGFGb3JOZXh0Q2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiwgY29uc3QgQ2hhcmFjdGVy
T2Zmc2V0Jik7CiAgICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZvclByZXZpb3VzQ2hhcmFjdGVyT2Zm
c2V0KFRleHRNYXJrZXJEYXRhJiwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CkBAIC0zMDAsNiAr
MzAyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uKE5vZGUqLCBBWFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uKE5vZGUq
LCBBWFRleHRFZGl0VHlwZSBkZWxldGlvblR5cGUsIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQs
IEFYVGV4dEVkaXRUeXBlIGluc2VydGlvblR5cGUsIGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKyAgICB2b2lkIHBvc3RUZXh0UmVwbGFjZW1lbnRO
b3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYsIGNv
bnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIGNvbnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0KTsKICAg
ICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oTm9kZSosIGNvbnN0IEFYVGV4
dFN0YXRlQ2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQg
cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IEFY
VGV4dFN0YXRlQ2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZv
aWQgcG9zdExpdmVSZWdpb25DaGFuZ2VOb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCop
OwpAQCAtMzM3LDYgKzM0MCw3IEBAIHByb3RlY3RlZDoKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmls
aXR5T2JqZWN0KiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJik7CiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlUGxhdGZvcm1Ob3RpZmlj
YXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFYVGV4dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKyAgICB2b2lkIHBvc3RUZXh0UmVwbGFjZW1lbnRQ
bGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRDb250cm9sKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBj
b25zdCBTdHJpbmcmIGRlbGV0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGluc2VydGVkVGV4dCwgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQmKTsKICAgICB2b2lkIHBvc3RUZXh0UmVwbGFjZW1lbnRQ
bGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhUZXh0RWRpdFR5cGUs
IGNvbnN0IFN0cmluZyYsIEFYVGV4dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKICNlbHNlCiAgICAgc3RhdGljIEFYVGV4dENoYW5nZSB0ZXh0Q2hhbmdl
Rm9yRWRpdFR5cGUoQVhUZXh0RWRpdFR5cGUpOwpAQCAtNDk5LDYgKzUwMyw3IEBAIGlubGluZSB2
b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGUKIGlubGluZSB2b2lkIEFYT2JqZWN0Q2Fj
aGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oTm9kZSosIGNvbnN0IEFYVGV4dFN0
YXRlQ2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIHsgfQogaW5saW5lIHZv
aWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiwg
QVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIHsg
fQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNh
dGlvbihOb2RlKiwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIEFYVGV4dEVkaXRUeXBl
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKSB7IH0KK2lubGluZSB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29u
dHJvbChIVE1MVGV4dEZvcm1Db250cm9sJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikg
eyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKEFjY2Vzc2li
aWxpdHlPYmplY3QqLCBEb2N1bWVudCosIEFYTm90aWZpY2F0aW9uLCBQb3N0VGFyZ2V0LCBQb3N0
VHlwZSkgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKFJl
bmRlck9iamVjdCosIEFYTm90aWZpY2F0aW9uLCBQb3N0VGFyZ2V0LCBQb3N0VHlwZSkgeyB9CiBp
bmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKE5vZGUqLCBBWE5vdGlm
aWNhdGlvbiwgUG9zdFRhcmdldCwgUG9zdFR5cGUpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCShyZXZpc2lv
biAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENh
Y2hlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDExIEBAIHZvaWQgQVhPYmpl
Y3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudFAKICAgICBwb3N0UGxhdGZvcm1Ob3RpZmljYXRp
b24ob2JqZWN0LCBBWFZhbHVlQ2hhbmdlZCk7CiB9CiAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9z
dFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCYpCit7CisgICAgcG9zdFBsYXRmb3JtTm90aWZpY2F0aW9u
KG9iamVjdCwgQVhWYWx1ZUNoYW5nZWQpOworfQorCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmZyYW1l
TG9hZGluZ0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogYXhG
cmFtZU9iamVjdCwgQVhMb2FkaW5nRXZlbnQgbG9hZGluZ0V2ZW50KQogewogICAgIGlmICghYXhG
cmFtZU9iamVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1t
CShyZXZpc2lvbiAyMTg4MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgw
LDEwICsxODAsMTAgQEAgLSAoaWQpaW5pdFdpdGhEYXRhOihOU0RhdGEgKilkYXRhIGFjY2Vzcwog
CiArIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrZXJXaXRoVmlzaWJsZVBv
c2l0aW9uOihWaXNpYmxlUG9zaXRpb24mKXZpc2libGVQb3MgY2FjaGU6KEFYT2JqZWN0Q2FjaGUq
KWNhY2hlCiB7Ci0gICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0gICAgY2FjaGUt
PnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2aXNpYmxl
UG9zKTsKLSAgICAKLSAgICByZXR1cm4gW1tbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxs
b2NdIGluaXRXaXRoVGV4dE1hcmtlcjomdGV4dE1hcmtlckRhdGEgY2FjaGU6Y2FjaGVdIGF1dG9y
ZWxlYXNlXTsKKyAgICBhdXRvIHRleHRNYXJrZXJEYXRhID0gY2FjaGUtPnRleHRNYXJrZXJEYXRh
Rm9yVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3MpOworICAgIGlmICghdGV4dE1hcmtlckRhdGEp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbW1dlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyIGFsbG9jXSBpbml0V2l0aFRleHRNYXJrZXI6JnRleHRNYXJrZXJEYXRhLnZhbHVlKCkg
Y2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNlXTsKIH0KIAogKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgKil0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0Jilj
aGFyYWN0ZXJPZmZzZXQgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0J
KHJldmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FY
T2JqZWN0Q2FjaGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwNyw3ICs0MDcsMjIgQEAgdm9p
ZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlUAogICAgIFt1c2VySW5mbyByZWxl
YXNlXTsKIH0KIAotc3RhdGljIE5TRGljdGlvbmFyeSAqdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGlj
dGlvbmFyeShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIEFYVGV4dEVkaXRUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQor
c3RhdGljIHZvaWQgYWRkVGV4dE1hcmtlckZvcihOU011dGFibGVEaWN0aW9uYXJ5KiBjaGFuZ2Us
IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3Np
dGlvbikKK3sKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoaWQgdGV4dE1hcmtlciA9IFtvYmplY3Qud3JhcHBlcigpIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246cG9zaXRpb25dKQorICAgICAgICBbY2hhbmdlIHNldE9iamVjdDp0ZXh0TWFy
a2VyIGZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlVmFsdWVTdGFydE1hcmtlcl07Cit9
CisKK3N0YXRpYyB2b2lkIGFkZFRleHRNYXJrZXJGb3IoTlNNdXRhYmxlRGljdGlvbmFyeSogY2hh
bmdlLCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QsIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50JiB0ZXh0Q29udHJvbCkKK3sKKyAgICBpZiAoaWQgdGV4dE1hcmtlciA9IFtvYmplY3Qud3Jh
cHBlcigpIHRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbDp0ZXh0Q29udHJv
bF0pCisgICAgICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHRNYXJrZXIgZm9yS2V5Ok5TQWNjZXNz
aWJpbGl0eVRleHRDaGFuZ2VWYWx1ZVN0YXJ0TWFya2VyXTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFRleHRNYXJrZXJUYXJnZXRUeXBlPgorc3RhdGljIE5TRGljdGlvbmFyeSAqdGV4dFJlcGxh
Y2VtZW50Q2hhbmdlRGljdGlvbmFyeShBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QsIEFYVGV4
dEVkaXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBUZXh0TWFya2VyVGFyZ2V0VHlw
ZSYgbWFya2VyVGFyZ2V0KQogewogICAgIE5TU3RyaW5nICp0ZXh0ID0gKE5TU3RyaW5nICopc3Ry
aW5nOwogICAgIE5TVUludGVnZXIgbGVuZ3RoID0gW3RleHQgbGVuZ3RoXTsKQEAgLTQyMCwxMCAr
NDM1LDcgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqdGV4dFJlcGxhY2VtZW50Q2hhbgogICAgICAg
ICB0ZXh0ID0gW3RleHQgc3Vic3RyaW5nVG9JbmRleDpBWFZhbHVlQ2hhbmdlVHJ1bmNhdGlvbkxl
bmd0aF07CiAgICAgfQogICAgIFtjaGFuZ2Ugc2V0T2JqZWN0OnRleHQgZm9yS2V5Ok5TQWNjZXNz
aWJpbGl0eVRleHRDaGFuZ2VWYWx1ZV07Ci0gICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpKSB7
Ci0gICAgICAgIGlmIChpZCB0ZXh0TWFya2VyID0gW29iamVjdC0+d3JhcHBlcigpIHRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb246cG9zaXRpb25dKQotICAgICAgICAgICAgW2NoYW5nZSBzZXRP
YmplY3Q6dGV4dE1hcmtlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZhbHVlU3Rh
cnRNYXJrZXJdOwotICAgIH0KKyAgICBhZGRUZXh0TWFya2VyRm9yKGNoYW5nZSwgb2JqZWN0LCBt
YXJrZXJUYXJnZXQpOwogICAgIHJldHVybiBbY2hhbmdlIGF1dG9yZWxlYXNlXTsKIH0KIApAQCAt
NDM1LDYgKzQ0NywyMyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VQ
CiAgICAgcG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKG9iamVjdCwgQVhU
ZXh0RWRpdFR5cGVVbmtub3duLCBlbXB0eVN0cmluZygpLCB0eXBlLCB0ZXh0LCBwb3NpdGlvbik7
CiB9CiAKK3N0YXRpYyB2b2lkIHBvc3RVc2VySW5mb0ZvckNoYW5nZXMoQWNjZXNzaWJpbGl0eU9i
amVjdCYgcm9vdFdlYkFyZWEsIEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgTlNNdXRhYmxl
QXJyYXkqIGNoYW5nZXMpCit7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqdXNlckluZm8gPSBb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6NF07CisgICAgW3Vz
ZXJJbmZvIHNldE9iamVjdDpAKHBsYXRmb3JtQ2hhbmdlVHlwZUZvcldlYkNvcmVDaGFuZ2VUeXBl
KEFYVGV4dFN0YXRlQ2hhbmdlVHlwZUVkaXQpKSBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dFN0
YXRlQ2hhbmdlVHlwZUtleV07CisgICAgaWYgKGNoYW5nZXMuY291bnQpCisgICAgICAgIFt1c2Vy
SW5mbyBzZXRPYmplY3Q6Y2hhbmdlcyBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENoYW5nZVZh
bHVlc107CisKKyAgICBpZiAoaWQgd3JhcHBlciA9IG9iamVjdC53cmFwcGVyKCkpCisgICAgICAg
IFt1c2VySW5mbyBzZXRPYmplY3Q6d3JhcHBlciBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dENo
YW5nZUVsZW1lbnRdOworCisgICAgQVhQb3N0Tm90aWZpY2F0aW9uV2l0aFVzZXJJbmZvKHJvb3RX
ZWJBcmVhLndyYXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0aW9u
LCB1c2VySW5mbyk7CisgICAgaWYgKHJvb3RXZWJBcmVhLndyYXBwZXIoKSAhPSBvYmplY3Qud3Jh
cHBlcigpKQorICAgICAgICBBWFBvc3ROb3RpZmljYXRpb25XaXRoVXNlckluZm8ob2JqZWN0Lndy
YXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZpY2F0aW9uLCB1c2VySW5m
byk7CisKKyAgICBbdXNlckluZm8gcmVsZWFzZV07Cit9CisKIHZvaWQgQVhPYmplY3RDYWNoZTo6
cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iamVjdCwgQVhUZXh0RWRpdFR5cGUgZGVsZXRpb25UeXBlLCBjb25zdCBTdHJpbmcmIGRl
bGV0ZWRUZXh0LCBBWFRleHRFZGl0VHlwZSBpbnNlcnRpb25UeXBlLCBjb25zdCBTdHJpbmcmIGlu
c2VydGVkVGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBpZiAo
IW9iamVjdCkKQEAgLTQ0MywyNiArNDcyLDMwIEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRl
eHRSZXBsYWNlbWVudFAKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
TlNNdXRhYmxlRGljdGlvbmFyeSAqdXNlckluZm8gPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxs
b2NdIGluaXRXaXRoQ2FwYWNpdHk6NF07Ci0gICAgW3VzZXJJbmZvIHNldE9iamVjdDpAKHBsYXRm
b3JtQ2hhbmdlVHlwZUZvcldlYkNvcmVDaGFuZ2VUeXBlKEFYVGV4dFN0YXRlQ2hhbmdlVHlwZUVk
aXQpKSBmb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dFN0YXRlQ2hhbmdlVHlwZUtleV07Ci0KICAg
ICBOU011dGFibGVBcnJheSAqY2hhbmdlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoQ2FwYWNpdHk6Ml07Ci0gICAgaWYgKE5TRGljdGlvbmFyeSAqY2hhbmdlID0gdGV4dFJlcGxh
Y2VtZW50Q2hhbmdlRGljdGlvbmFyeShvYmplY3QsIGRlbGV0aW9uVHlwZSwgZGVsZXRlZFRleHQs
IHBvc2l0aW9uKSkKKyAgICBpZiAoTlNEaWN0aW9uYXJ5ICpjaGFuZ2UgPSB0ZXh0UmVwbGFjZW1l
bnRDaGFuZ2VEaWN0aW9uYXJ5KCpvYmplY3QsIGRlbGV0aW9uVHlwZSwgZGVsZXRlZFRleHQsIHBv
c2l0aW9uKSkKICAgICAgICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07Ci0gICAgaWYgKE5T
RGljdGlvbmFyeSAqY2hhbmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeShvYmpl
Y3QsIGluc2VydGlvblR5cGUsIGluc2VydGVkVGV4dCwgcG9zaXRpb24pKQorICAgIGlmIChOU0Rp
Y3Rpb25hcnkgKmNoYW5nZSA9IHRleHRSZXBsYWNlbWVudENoYW5nZURpY3Rpb25hcnkoKm9iamVj
dCwgaW5zZXJ0aW9uVHlwZSwgaW5zZXJ0ZWRUZXh0LCBwb3NpdGlvbikpCiAgICAgICAgIFtjaGFu
Z2VzIGFkZE9iamVjdDpjaGFuZ2VdOwotICAgIGlmIChjaGFuZ2VzLmNvdW50KQotICAgICAgICBb
dXNlckluZm8gc2V0T2JqZWN0OmNoYW5nZXMgZm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRDaGFu
Z2VWYWx1ZXNdOworICAgIHBvc3RVc2VySW5mb0ZvckNoYW5nZXMoKnJvb3RXZWJBcmVhKCksICpv
YmplY3QsIGNoYW5nZXMpOwogICAgIFtjaGFuZ2VzIHJlbGVhc2VdOworfQogCi0gICAgaWYgKGlk
IHdyYXBwZXIgPSBvYmplY3QtPndyYXBwZXIoKSkKLSAgICAgICAgW3VzZXJJbmZvIHNldE9iamVj
dDp3cmFwcGVyIGZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0Q2hhbmdlRWxlbWVudF07Cit2b2lk
IEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBk
ZWxldGVkVGV4dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50JiB0ZXh0Q29udHJvbCkKK3sKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgb2Jq
ZWN0ID0gcm9vdFdlYkFyZWEoKTsKIAotICAgIEFYUG9zdE5vdGlmaWNhdGlvbldpdGhVc2VySW5m
byhyb290V2ViQXJlYSgpLT53cmFwcGVyKCksIE5TQWNjZXNzaWJpbGl0eVZhbHVlQ2hhbmdlZE5v
dGlmaWNhdGlvbiwgdXNlckluZm8pOwotICAgIGlmIChyb290V2ViQXJlYSgpLT53cmFwcGVyKCkg
IT0gb2JqZWN0LT53cmFwcGVyKCkpCi0gICAgICAgIEFYUG9zdE5vdGlmaWNhdGlvbldpdGhVc2Vy
SW5mbyhvYmplY3QtPndyYXBwZXIoKSwgTlNBY2Nlc3NpYmlsaXR5VmFsdWVDaGFuZ2VkTm90aWZp
Y2F0aW9uLCB1c2VySW5mbyk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybjsKIAot
ICAgIFt1c2VySW5mbyByZWxlYXNlXTsKKyAgICBOU011dGFibGVBcnJheSAqY2hhbmdlcyA9IFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Ml07CisgICAgaWYgKE5TRGlj
dGlvbmFyeSAqY2hhbmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeSgqb2JqZWN0
LCBBWFRleHRFZGl0VHlwZURlbGV0ZSwgZGVsZXRlZFRleHQsIHRleHRDb250cm9sKSkKKyAgICAg
ICAgW2NoYW5nZXMgYWRkT2JqZWN0OmNoYW5nZV07CisgICAgaWYgKE5TRGljdGlvbmFyeSAqY2hh
bmdlID0gdGV4dFJlcGxhY2VtZW50Q2hhbmdlRGljdGlvbmFyeSgqb2JqZWN0LCBBWFRleHRFZGl0
VHlwZUluc2VydCwgaW5zZXJ0ZWRUZXh0LCB0ZXh0Q29udHJvbCkpCisgICAgICAgIFtjaGFuZ2Vz
IGFkZE9iamVjdDpjaGFuZ2VdOworICAgIHBvc3RVc2VySW5mb0ZvckNoYW5nZXMoKnJvb3RXZWJB
cmVhKCksICpvYmplY3QsIGNoYW5nZXMpOworICAgIFtjaGFuZ2VzIHJlbGVhc2VdOwogfQogCiB2
b2lkIEFYT2JqZWN0Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRpb24o
QWNjZXNzaWJpbGl0eU9iamVjdCogYXhGcmFtZU9iamVjdCwgQVhMb2FkaW5nRXZlbnQgbG9hZGlu
Z0V2ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgJKHJl
dmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
Nyw3IEBAIGNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7CiBzdHJ1Y3QgQWNjZXNzaWJpbGl0eVNl
YXJjaENyaXRlcmlhOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDsKIGNsYXNzIFBhdGg7CiBjbGFzcyBWaXNpYmxlUG9z
aXRpb247CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgJKHJl
dmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAgQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcgogCiAtIChpZCl0
ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczooY29uc3QgV2ViQ29yZTo6VmlzaWJs
ZVBvc2l0aW9uJilzdGFydFBvc2l0aW9uIGVuZFBvc2l0aW9uOihjb25zdCBXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb24mKWVuZFBvc2l0aW9uOwogLSAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQb3Np
dGlvbjooY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJil2aXNpYmxlUG9zOworLSAoaWQp
dGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOihXZWJDb3JlOjpIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudCYpdGV4dENvbnRyb2w7CiAKIC8vIFdoZW4gYSBwbHVnaW4gdXNl
cyBhIFdlYktpdCBjb250cm9sIHRvIGFjdCBhcyBhIHN1cnJvZ2F0ZSB2aWV3IChlLmcuIFBERiB1
c2UgV2ViS2l0IHRvIGNyZWF0ZSB0ZXh0IGZpZWxkcykuCiAtIChpZClhc3NvY2lhdGVkUGx1Z2lu
UGFyZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJl
dmlzaW9uIDIxODgyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02ODEsMTMg
KzY4MSwxMiBAQCAtIChDaGFyYWN0ZXJPZmZzZXQpY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4CiBzdGF0
aWMgaWQgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihBWE9iamVjdENhY2hlKiBjYWNoZSwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogewogICAgIEFTU0VSVChjYWNoZSk7
Ci0gICAgCi0gICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0gICAgY2FjaGUtPnRl
eHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2aXNpYmxlUG9z
KTsKLSAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQpCisKKyAgICBhdXRvIHRleHRNYXJrZXJE
YXRhID0gY2FjaGUtPnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3Mp
OworICAgIGlmICghdGV4dE1hcmtlckRhdGEpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0g
ICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKHdrQ3JlYXRlQVhUZXh0TWFya2VyKCZ0ZXh0TWFy
a2VyRGF0YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhKSkpOworCisgICAgcmV0dXJuIENGQnJpZGdp
bmdSZWxlYXNlKHdrQ3JlYXRlQVhUZXh0TWFya2VyKCZ0ZXh0TWFya2VyRGF0YS52YWx1ZSgpLCBz
aXplb2YodGV4dE1hcmtlckRhdGEudmFsdWUoKSkpKTsKIH0KIAogLSAoaWQpdGV4dE1hcmtlckZv
clZpc2libGVQb3NpdGlvbjooY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpdmlzaWJsZVBvcwpAQCAt
Njk1LDYgKzY5NCwxOSBAQCAtIChpZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihjb25z
CiAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmplY3QtPmF4T2Jq
ZWN0Q2FjaGUoKSwgdmlzaWJsZVBvcyk7CiB9CiAKKy0gKGlkKXRleHRNYXJrZXJGb3JGaXJzdFBv
c2l0aW9uSW5UZXh0Q29udHJvbDooSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgJil0ZXh0Q29u
dHJvbAoreworICAgIGF1dG8gKmNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAg
ICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgYXV0byB0ZXh0TWFya2Vy
RGF0YSA9IGNhY2hlLT50ZXh0TWFya2VyRGF0YUZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9s
KHRleHRDb250cm9sKTsKKyAgICBpZiAoIXRleHRNYXJrZXJEYXRhKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKHdrQ3JlYXRlQVhUZXh0TWFya2Vy
KCZ0ZXh0TWFya2VyRGF0YS52YWx1ZSgpLCBzaXplb2YodGV4dE1hcmtlckRhdGEudmFsdWUoKSkp
KTsKK30KKwogc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFy
a2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBDRlR5cGVSZWYgdGV4dE1hcmtlcikKIHsKICAgICBB
U1NFUlQoY2FjaGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMTg4
MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDcsNiArMTA3LDcgQEAKICNpbmNsdWRlICJKU0xhenlFdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkxhbmd1YWdlLmgiCisjaW5jbHVkZSAi
TGF5b3V0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCkBAIC0xOTE0LDYgKzE5
MTUsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVTdHlsZUlmTmVlZGVkKCkKIAogdm9pZCBEb2N1
bWVudDo6dXBkYXRlTGF5b3V0KCkKIHsKKyAgICBBU1NFUlQoTGF5b3V0RGlzYWxsb3dlZFNjb3Bl
Ojppc0xheW91dEFsbG93ZWQoKSk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdmlldygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDIxODgy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlv
bXMuaCIKKyNpbmNsdWRlICJMYXlvdXREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCiAjaW5jbHVkZSAi
Tm9kZVRyYXZlcnNhbC5oIgpAQCAtNTQ5LDcgKzU1MCw4IEBAIHN0YXRpYyBTdHJpbmcgaW5uZXJU
ZXh0VmFsdWVGcm9tKFRleHRDb24KIAogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c2V0SW5uZXJUZXh0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBUZXh0Q29udHJv
bElubmVyVGV4dEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBM
YXlvdXREaXNhbGxvd2VkU2NvcGUgbGF5b3V0RGlzYWxsb3dlZFNjb3BlKExheW91dERpc2FsbG93
ZWRTY29wZTo6UmVhc29uOjpQZXJmb3JtYW5jZU9wdGltaXphdGlvbik7CisgICAgUmVmUHRyPFRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudD4gaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgp
OwogICAgIGlmICghaW5uZXJUZXh0KQogICAgICAgICByZXR1cm47CiAKQEAgLTU3Nyw3ICs1Nzks
NyBAQCB2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lCiAjaWYgSEFWRShB
Q0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShDT0NPQSkKICAgICAgICAgaWYgKHRleHRJc0NoYW5n
ZWQgJiYgcmVuZGVyZXIoKSkgewogICAgICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
ID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgICAgICAgICBj
YWNoZS0+cG9zdFRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbih0aGlzLCBBWFRleHRFZGl0VHlw
ZURlbGV0ZSwgcHJldmlvdXNWYWx1ZSwgQVhUZXh0RWRpdFR5cGVJbnNlcnQsIHZhbHVlLCBWaXNp
YmxlUG9zaXRpb24oUG9zaXRpb24odGhpcywgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNo
b3IpKSk7CisgICAgICAgICAgICAgICAgY2FjaGUtPnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmlj
YXRpb25Gb3JUZXh0Q29udHJvbCgqdGhpcywgcHJldmlvdXNWYWx1ZSwgdmFsdWUpOwogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
RGlzYWxsb3dlZFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0RGlzYWxsb3dlZFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkxheW91dERpc2FsbG93ZWRTY29wZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisKK0xheW91dERpc2FsbG93ZWRTY29wZSogTGF5b3V0RGlzYWxs
b3dlZFNjb3BlOjpzX2N1cnJlbnRBc3NlcnRpb24gPSBudWxscHRyOworCisjZW5kaWYKKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dERpc2FsbG93ZWRTY29wZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXREaXNhbGxvd2VkU2Nv
cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0RGlz
YWxsb3dlZFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisKK2NsYXNzIExheW91dERpc2FsbG93ZWRTY29wZSB7CitwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBSZWFzb24geyBQZXJmb3JtYW5jZU9wdGltaXphdGlvbiB9OworICAgIExheW91dERp
c2FsbG93ZWRTY29wZShSZWFzb24pCisgICAgICAgIDogbV9wcmV2aW91c0Fzc2VydGlvbihzX2N1
cnJlbnRBc3NlcnRpb24pCisgICAgeworICAgICAgICBzX2N1cnJlbnRBc3NlcnRpb24gPSB0aGlz
OworICAgIH0KKworICAgIH5MYXlvdXREaXNhbGxvd2VkU2NvcGUoKQorICAgIHsKKyAgICAgICAg
c19jdXJyZW50QXNzZXJ0aW9uID0gbV9wcmV2aW91c0Fzc2VydGlvbjsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBpc0xheW91dEFsbG93ZWQoKSB7IHJldHVybiAhc19jdXJyZW50QXNzZXJ0aW9u
OyB9CisKK3ByaXZhdGU6CisgICAgTGF5b3V0RGlzYWxsb3dlZFNjb3BlKiBtX3ByZXZpb3VzQXNz
ZXJ0aW9uOworICAgIHN0YXRpYyBMYXlvdXREaXNhbGxvd2VkU2NvcGUqIHNfY3VycmVudEFzc2Vy
dGlvbjsKK307CisKKyNlbHNlCisKK2NsYXNzIExheW91dERpc2FsbG93ZWRTY29wZSB7CitwdWJs
aWM6CisgICAgZW51bSBjbGFzcyBSZWFzb24geyBQZXJmb3JtYW5jZU9wdGltaXphdGlvbiB9Owor
ICAgIExheW91dERpc2FsbG93ZWRTY29wZShSZWFzb24pIHsgfQorICAgIHN0YXRpYyBib29sIGlz
TGF5b3V0QWxsb3dlZCgpIHsgcmV0dXJuIHRydWU7IH0KK307CisKKyNlbmRpZgorCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>