<?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>127766</bug_id>
          
          <creation_ts>2014-01-28 00:47:57 -0800</creation_ts>
          <short_desc>Jettison DFG code when neither breakpoints nor the profiler are active.</short_desc>
          <delta_ts>2014-04-21 21:25:38 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>972829</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-28 00:47:57 -0800</bug_when>
    <thetext>Instead of using speculation checks, we can just jettison the DFG CodeBlock if there are breakpoints set in it, or if the profiler is active.  This way, we can avoid the overhead of the speculation checks when neither breakpoints nor the profiler are active.

This patch improves the Octane score from ~2950 to ~3067.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972836</commentid>
    <comment_count>1</comment_count>
      <attachid>222418</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-28 01:16:16 -0800</bug_when>
    <thetext>Created attachment 222418
the patch.

This patch has passed the layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972837</commentid>
    <comment_count>2</comment_count>
      <attachid>222419</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-28 01:27:10 -0800</bug_when>
    <thetext>Created attachment 222419
patch 2: fixed a bug in the test and test expectations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972955</commentid>
    <comment_count>3</comment_count>
      <attachid>222419</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-28 09:12:05 -0800</bug_when>
    <thetext>Comment on attachment 222419
patch 2: fixed a bug in the test and test expectations.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972970</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-28 09:40:01 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r162940: &lt;http://trac.webkit.org/r162940&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002802</commentid>
    <comment_count>5</comment_count>
      <attachid>222419</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-21 21:13:13 -0700</bug_when>
    <thetext>Comment on attachment 222419
patch 2: fixed a bug in the test and test expectations.

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

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:93
&gt; +    case Breakpoint:
&gt; +    case ProfileWillCall:
&gt; +    case ProfileDidCall:

This breaks the FTL so hard.  You&apos;re claiming that these three nodes have no effects, which means that they can be hoisted, moved, and CSE&apos;d.  That causes madness and it causes LayoutTest failures.

Basically, if you add a new node, and that node can&apos;t be moved, then DFG::clobberize() must see the node as modifying some state.  You&apos;ll notice that there are a bunch of nodes that modify &quot;SideState&quot; which is our way of saying that they modify something not visible to the JS heap.  That means that they cannot be moved/CSEd, but it also doesn&apos;t inhibit optimizations of any other nodes.

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:-623
&gt; -    case Breakpoint:
&gt; -    case ProfileWillCall:
&gt; -    case ProfileDidCall:

It would have been far better to leave them here.  That would have avoided the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002807</commentid>
    <comment_count>6</comment_count>
      <attachid>222419</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-21 21:24:06 -0700</bug_when>
    <thetext>Comment on attachment 222419
patch 2: fixed a bug in the test and test expectations.

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:93
&gt;&gt; +    case ProfileDidCall:
&gt; 
&gt; This breaks the FTL so hard.  You&apos;re claiming that these three nodes have no effects, which means that they can be hoisted, moved, and CSE&apos;d.  That causes madness and it causes LayoutTest failures.
&gt; 
&gt; Basically, if you add a new node, and that node can&apos;t be moved, then DFG::clobberize() must see the node as modifying some state.  You&apos;ll notice that there are a bunch of nodes that modify &quot;SideState&quot; which is our way of saying that they modify something not visible to the JS heap.  That means that they cannot be moved/CSEd, but it also doesn&apos;t inhibit optimizations of any other nodes.

Thanks for the clarification of what “SideState&quot; means.  Perhaps that should have been documented in the comments in this function, or it should have been named “HasSideEffects” instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002809</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-21 21:25:38 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 222419 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222419&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:93
&gt; &gt;&gt; +    case ProfileDidCall:
&gt; &gt; 
&gt; &gt; This breaks the FTL so hard.  You&apos;re claiming that these three nodes have no effects, which means that they can be hoisted, moved, and CSE&apos;d.  That causes madness and it causes LayoutTest failures.
&gt; &gt; 
&gt; &gt; Basically, if you add a new node, and that node can&apos;t be moved, then DFG::clobberize() must see the node as modifying some state.  You&apos;ll notice that there are a bunch of nodes that modify &quot;SideState&quot; which is our way of saying that they modify something not visible to the JS heap.  That means that they cannot be moved/CSEd, but it also doesn&apos;t inhibit optimizations of any other nodes.
&gt; 
&gt; Thanks for the clarification of what “SideState&quot; means.  Perhaps that should have been documented in the comments in this function, or it should have been named “HasSideEffects” instead.

It doesn&apos;t mean HasSideEffects.  All of the possible abstract heaps involve side effects and saying anything like &quot;write(FooBar)&quot; in clobberize() means that the node has side effects.

The SideState abstract heap is clearly documented in DFGAbstractHeap.h:

    /* Use this for writes only, just to indicate that hoisting the node is invalid. This works because we don&apos;t hoist anything that has any side effects at all. */\
    macro(SideState)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222418</attachid>
            <date>2014-01-28 01:16:16 -0800</date>
            <delta_ts>2014-01-28 01:27:10 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-127766.patch</filename>
            <type>text/plain</type>
            <size>22223</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyOTIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE0LTAxLTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBK
ZXR0aXNvbiBERkcgY29kZSB3aGVuIG5laXRoZXIgYnJlYWtwb2ludHMgb3IgdGhlIHByb2ZpbGVy
IGFyZSBhY3RpdmUuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMjc3NjY+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgbmVlZCB0byBq
ZXR0aXNvbiB0aGUgREZHIENvZGVCbG9ja3MgdW5kZXIgdGhlIGZvbGxvd2luZyBjaXJjdW1zdGFu
Y2VzOgorICAgICAgICAxLiBXaGVuIGFkZGluZyBicmVha3BvaW50cyB0byBhIENvZGVCbG9jaywg
amV0dGlzb24gaXQgaWYgaXQgaXMgYSBERkcgQ29kZUJsb2NrLgorICAgICAgICAyLiBXaGVuIGVu
YWJsaW5nIHN0ZXBwaW5nIG1vZGUgaW4gYSBDb2RlQmxvY2ssIGpldHRpc29uIGl0IGlmIGl0IGEg
REZHIENvZGVCbG9jay4KKyAgICAgICAgMy4gV2hlbiBzZXR0aWduIHRoZSBlbmFibGVkIHByb2Zp
bGVyIGluIHRoZSBWTSwgd2UgbmVlZCB0byBqZXR0aXNvbiBhbGwgREZHCisgICAgICAgICAgIENv
ZGVCbG9ja3MuCisKKyAgICAgICAgSW5zdGVhZCBvZiBlbWl0dGluZyBzcGVjdWxhdGlvbiBjaGVj
a3MsIHRoZSBERkcgY29kZSB3aWxsIG5vdyB0cmVhdCBCcmVha3BvaW50LAorICAgICAgICBQcm9m
aWxlV2lsbENhbGwsIGFuZCBQcm9maWxlRGlkQ2FsbCBhcyBuby1vcHMgc2ltaWxhciB0byBhIFBo
YW50b20gbm9kZS4gV2UKKyAgICAgICAgc3RpbGwgbmVlZCB0byB0cmFjayB0aGVzZSBub2RlcyBz
byB0aGF0IHRoZXkgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgb3Bjb2RlcworICAgICAgICBpbiB0
aGUgYmFzZWxpbmUgSklUIHdoZW4gd2UgamV0dGlzb24gYW5kIE9TUiBleGl0LiBXaXRob3V0IHRo
ZW0sIHdlIHdvdWxkIE9TUgorICAgICAgICBleGl0IHRvIHRoZSB3cm9uZyBsb2NhdGlvbiBpbiB0
aGUgYmFzZWxpbmUgSklUIGNvZGUuCisKKyAgICAgICAgSW4gREZHRHJpdmVyJ3MgY29tcGlsZUlt
cGwoKSBhbmQgREZHUGxhbidzIGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkKKyAg
ICAgICAgd2UgZmFpbCB0aGUgY29tcGlsYXRpb24gZWZmb3J0IHdpdGggYSBDb21waWxhdGlvbklu
dmFsaWRhdGVkIHJlc3VsdC4gVGhpcyBhbGxvd3MKKyAgICAgICAgdGhlIERGRyBjb21waWxlciB0
byByZS1hdHRhbXB0IHRoZSBjb21waWxhdGlvbiBvZiB0aGUgZnVuY3Rpb24gYWZ0ZXIgc29tZSB0
aW1lCisgICAgICAgIGlmIGl0IGlzIGhvdC4gVGhlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQgcmVz
dWx0IGlzIHN1cHBvc2VkIHRvIGNhdXNlIHRoZSBERkcKKyAgICAgICAgdG8gZXhlcmNpc2UgYW4g
ZXhwb25lbnRpYWwgYmFjayBvZmYgYmVmb3JlIHJlLWF0dGVtcHRpbmcgY29tcGlsYXRpb24gYWdh
aW4KKyAgICAgICAgKHNlZSBydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmgpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhlIE9jdGFuZSBzY29yZSBmcm9tIH4yOTUwIHRvIH4zMDY3
LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjphZGRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRTdGVw
cGluZ01vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGRl
YnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdE
cml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBk
ZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6ZmluYWxpemVXaXRob3V0
Tm90aWZ5aW5nQ2FsbGJhY2spOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBwcm9maWxlci9MZWdhY3lQcm9maWxl
ci5jcHA6CisgICAgICAgIChKU0M6OkxlZ2FjeVByb2ZpbGVyOjpzdGFydFByb2ZpbGluZyk6Cisg
ICAgICAgIChKU0M6OkxlZ2FjeVByb2ZpbGVyOjpzdG9wUHJvZmlsaW5nKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6U2V0
RW5hYmxlZFByb2ZpbGVyRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OlZNOjpz
ZXRFbmFibGVkUHJvZmlsZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpT
Qzo6Vk06OmVuYWJsZWRQcm9maWxlcik6CisKIDIwMTQtMDEtMjcgIEpvc2VwaCBQZWNvcmFybyAg
PHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICAtW0pTQ29udGV4dCBldmFsdXRlU2NyaXB0
Ol0gY2FsbHMgSlNFdmFsdXRlU2NyaXB0IHdpdGggc3RhcnRpbmdMaW5lTnVtYmVyIDAsIGxhdGVy
IGludGVycHJldGVkIGFzIGEgb25lQmFzZWRJbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjI4NjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUzMSw0ICszNTMxLDE5IEBAIHZvaWQgQ29kZUJsb2NrOjplbmRWYWxpZGF0aW9uRGlkRmFpbCgp
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6
OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCit7CisgICAgbV9udW1CcmVh
a3BvaW50cyArPSBudW1CcmVha3BvaW50czsKKyAgICBBU1NFUlQobV9udW1CcmVha3BvaW50cyk7
CisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgIGpldHRpc29u
KCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzZXRTdGVwcGluZ01vZGUoQ29kZUJsb2NrOjpTdGVw
cGluZ01vZGUgbW9kZSkKK3sKKyAgICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7CisgICAgaWYgKG1v
ZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBqaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklU
KQorICAgICAgICBqZXR0aXNvbigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2Mjg2
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtODcyLDcgKzg3Miw3IEBAIHB1YmxpYzoKICAgICBpbnQgaGFzRGVidWdnZXJS
ZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuICEhbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAgICAgdm9p
ZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAKLSAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpIHsg
bV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsgfQorICAgIHZvaWQgYWRkQnJlYWtw
b2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50
KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbnVtQnJl
YWtwb2ludHMgPj0gbnVtQnJlYWtwb2ludHMpOwpAQCAtODgzLDcgKzg4Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgU3RlcHBpbmdNb2RlRGlzYWJsZWQsCiAgICAgICAgIFN0ZXBwaW5nTW9kZUVuYWJs
ZWQKICAgICB9OwotICAgIHZvaWQgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZSBtb2RlKSB7
IG1fc3RlcHBpbmdNb2RlID0gbW9kZTsgfQorICAgIHZvaWQgc2V0U3RlcHBpbmdNb2RlKFN0ZXBw
aW5nTW9kZSk7CiAKICAgICB2b2lkIGNsZWFyRGVidWdnZXJSZXF1ZXN0cygpIHsgbV9kZWJ1Z2dl
clJlcXVlc3RzID0gMDsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuaAkocmV2aXNpb24gMTYyODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb24oKTsKIAogICAgIGJvb2wgaXNQYXVzZWQoKSB7
IHJldHVybiBtX2lzUGF1c2VkOyB9CisgICAgYm9vbCBpc1N0ZXBwaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zdGVwcGluZ01vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZDsgfQogCiAgICAgdmlydHVh
bCB2b2lkIHNvdXJjZVBhcnNlZChFeGVjU3RhdGUqLCBTb3VyY2VQcm92aWRlciosIGludCBlcnJv
ckxpbmVOdW1iZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKIApAQCAt
MTcwLDcgKzE3MSw2IEBAIHByaXZhdGU6CiAgICAgICAgIFN0ZXBwaW5nTW9kZUVuYWJsZWQKICAg
ICB9OwogICAgIHZvaWQgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZSk7Ci0gICAgYm9vbCBp
c1N0ZXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdGVwcGluZ01vZGUgPT0gU3RlcHBpbmdNb2Rl
RW5hYmxlZDsgfQogCiAgICAgZW51bSBCcmVha3BvaW50U3RhdGUgewogICAgICAgICBCcmVha3Bv
aW50RGlzYWJsZWQsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNjI4NjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NTQsMTMgKzE3NTQsMTMgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgQnJlYWtwb2ludDoKLSAgICBjYXNlIFByb2Zp
bGVXaWxsQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgogICAgIGNhc2UgQ2hlY2tXYXRj
aGRvZ1RpbWVyOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVh
azsKIAorICAgIGNhc2UgQnJlYWtwb2ludDoKKyAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKKyAg
ICBjYXNlIFByb2ZpbGVEaWRDYWxsOgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIENoZWNr
OgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTYyODYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDkg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgV2Vh
a0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBJZGVudGl0eToKICAgICBjYXNlIFBoYW50b206CisgICAg
Y2FzZSBCcmVha3BvaW50OgorICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgorICAgIGNhc2UgUHJv
ZmlsZURpZENhbGw6CiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNl
IEJpdFhvcjoKQEAgLTYxOCw5ICs2MjEsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRl
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIEJyZWFrcG9pbnQ6Ci0gICAg
Y2FzZSBQcm9maWxlV2lsbENhbGw6Ci0gICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKICAgICBjYXNl
IENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICBy
ZWFkKEludGVybmFsU3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkocmV2aXNpb24gMTYyODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
REZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0
LmgiCisjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKQEAgLTczLDYgKzc0LDEzIEBA
IHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICBpZiAoIU9wdGlvbnM6
OmJ5dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUoKS5pc0luUmFuZ2UoY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkNvdW50KCkpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAgICAgCisg
ICAgaWYgKHZtLmVuYWJsZWRQcm9maWxlcigpKQorICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25J
bnZhbGlkYXRlZDsKKworICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmRlYnVnZ2VyKCk7CisgICAgaWYgKGRlYnVnZ2VyICYmIChkZWJ1Z2dlci0+aXNT
dGVwcGluZygpIHx8IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5oYXNEZWJ1Z2dl
clJlcXVlc3RzKCkpKQorICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsKKwog
ICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKICAgICAgICAgZGF0YUxvZygiREZHKERy
aXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIgd2l0aCAiLCBtb2RlLCAiLCBudW1iZXIg
b2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIp
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lv
biAxNjI4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNp
bmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNp
bmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0zNDYsNyArMzQ3LDE0IEBAIENvbXBpbGF0aW9u
UmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE4KIHsKICAgICBpZiAoIWlzU3RpbGxWYWxpZCgp
KQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsKLSAgICAKKworICAgIGlm
ICh2bS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uSW52YWxp
ZGF0ZWQ7CisKKyAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5kZWJ1Z2dlcigpOworICAgIGlmIChkZWJ1Z2dlciAmJiAoZGVidWdnZXItPmlzU3RlcHBp
bmcoKSB8fCBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+aGFzRGVidWdnZXJSZXF1
ZXN0cygpKSkKKyAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ7CisKICAgICBi
b29sIHJlc3VsdDsKICAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKICAgICAgICAgcmVzdWx0ID0gZmluYWxpemVyLT5maW5hbGl6ZUZ1bmN0aW9uKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDE2Mjg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMzIsMjYgKzQy
MzIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2Fz
ZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEJyZWFrcG9pbnQ6IHsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyBkZWJ1Z2dlclJlcXVl
c3RzR1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKG1faml0LmNvZGVCbG9j
aygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCBkZWJ1Z2dlclJlcXVlc3RzR1BSKTsKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIERlYnVnZ2VyRXZlbnQsIEpTVmFs
dWVSZWdzKCksIDAsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
Ok5vblplcm8sIGRlYnVnZ2VyUmVxdWVzdHNHUFIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgY2FzZSBQcm9maWxlV2lsbENhbGw6Ci0gICAgY2FzZSBQcm9maWxlRGlkQ2FsbDogewot
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgbV9qaXQubG9hZFB0ciht
X2ppdC52bSgpLT5lbmFibGVkUHJvZmlsZXJBZGRyZXNzKCksIHRlbXAuZ3ByKCkpOwotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgRGVidWdnZXJFdmVudCwgSlNWYWx1ZVJl
Z3MoKSwgMCwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5v
blplcm8sIHRlbXAuZ3ByKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAgICAgY2FzZSBD
YWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKQEAgLTQ2
OTAsNiArNDY3MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBCcmVh
a3BvaW50OgorICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgorICAgIGNhc2UgUHJvZmlsZURpZENh
bGw6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAg
Ly8gVGhpcyBpcyBhIG5vLW9wLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjI4NjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NTA5LDI1ICs0NTA5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCcmVh
a3BvaW50OiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJS
ZWcgZGVidWdnZXJSZXF1ZXN0c0dQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQz
MihtX2ppdC5jb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgZGVidWdnZXJS
ZXF1ZXN0c0dQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBEZWJ1
Z2dlckV2ZW50LCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBkZWJ1Z2dlclJlcXVlc3RzR1BSKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgotICAgIGNhc2UgUHJv
ZmlsZURpZENhbGw6Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBEZWJ1
Z2dlckV2ZW50LCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dFB0cigKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKLSAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKG1faml0LnZtKCktPmVuYWJsZWRQcm9m
aWxlckFkZHJlc3MoKSkpKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIENhbGw6CiAgICAg
Y2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwpAQCAtNDkyNCw2ICs0OTA1
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQnJlYWtw
b2ludDoKKyAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKKyAgICBjYXNlIFByb2ZpbGVEaWRDYWxs
OgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIC8v
IFRoaXMgaXMgYSBuby1vcC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9M
ZWdhY3lQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTYyODYwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzUsNyArNzUsNyBAQCB2b2lkIExlZ2FjeVByb2ZpbGVyOjpzdGFydFByb2ZpbGluZyhFeGVj
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZXhlYy0+dm0oKS5tX2VuYWJsZWRQ
cm9maWxlciA9IHRoaXM7CisgICAgZXhlYy0+dm0oKS5zZXRFbmFibGVkUHJvZmlsZXIodGhpcyk7
CiAgICAgUmVmUHRyPFByb2ZpbGVHZW5lcmF0b3I+IHByb2ZpbGVHZW5lcmF0b3IgPSBQcm9maWxl
R2VuZXJhdG9yOjpjcmVhdGUoZXhlYywgdGl0bGUsICsrUHJvZmlsZXNVSUQpOwogICAgIG1fY3Vy
cmVudFByb2ZpbGVzLmFwcGVuZChwcm9maWxlR2VuZXJhdG9yKTsKIH0KQEAgLTk0LDcgKzk0LDcg
QEAgUGFzc1JlZlB0cjxQcm9maWxlPiBMZWdhY3lQcm9maWxlcjo6c3RvcAogCiAgICAgICAgICAg
ICBtX2N1cnJlbnRQcm9maWxlcy5yZW1vdmUoaSk7CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVu
dFByb2ZpbGVzLnNpemUoKSkKLSAgICAgICAgICAgICAgICBleGVjLT52bSgpLm1fZW5hYmxlZFBy
b2ZpbGVyID0gMDsKKyAgICAgICAgICAgICAgICBleGVjLT52bSgpLnNldEVuYWJsZWRQcm9maWxl
cihudWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHJldHVyblByb2Zp
bGU7CiAgICAgICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIExlZ2FjeVByb2ZpbGVyOjpz
dG9wUHJvZmlsaW5nKEpTR2xvCiAgICAgICAgICAgICBwcm9maWxlR2VuZXJhdG9yLT5zdG9wUHJv
ZmlsaW5nKCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRQcm9maWxlcy5yZW1vdmUoaSk7CiAgICAg
ICAgICAgICBpZiAoIW1fY3VycmVudFByb2ZpbGVzLnNpemUoKSkKLSAgICAgICAgICAgICAgICBv
cmlnaW4tPnZtKCkubV9lbmFibGVkUHJvZmlsZXIgPSAwOworICAgICAgICAgICAgICAgIG9yaWdp
bi0+dm0oKS5zZXRFbmFibGVkUHJvZmlsZXIobnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNjI4NjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5Nyw3ICsxOTcsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgLCBqc0ZpbmFsT2JqZWN0Q2xhc3NJbmZvKEpTRmluYWxPYmplY3Q6OmluZm8oKSkK
ICAgICAsIHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKDApCiAgICAgLCBlbnRyeVNjb3BlKDApCi0g
ICAgLCBtX2VuYWJsZWRQcm9maWxlcigwKQogICAgICwgbV9yZWdFeHBDYWNoZShuZXcgUmVnRXhw
Q2FjaGUodGhpcykpCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgICwgbV9ydFRyYWNl
TGlzdChuZXcgUlRUcmFjZUxpc3QoKSkKQEAgLTIyMiw2ICsyMjEsNyBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjZW5kaWYKICAgICAsIG1faW5EZWZpbmVPd25Q
cm9wZXJ0eShmYWxzZSkKICAgICAsIG1fY29kZUNhY2hlKENvZGVDYWNoZTo6Y3JlYXRlKCkpCisg
ICAgLCBtX2VuYWJsZWRQcm9maWxlcihudWxscHRyKQogewogICAgIGludGVycHJldGVyID0gbmV3
IEludGVycHJldGVyKCp0aGlzKTsKICAgICBTdGFja0JvdW5kcyBzdGFjayA9IHd0ZlRocmVhZERh
dGEoKS5zdGFjaygpOwpAQCAtNzgwLDQgKzc4MCwyMyBAQCB2b2lkIFZNOjphZGRJbXB1cmVQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmZpcmVBbGwoKTsKIH0K
IAorY2xhc3MgU2V0RW5hYmxlZFByb2ZpbGVyRnVuY3RvciB7CitwdWJsaWM6CisgICAgYm9vbCBv
cGVyYXRvcigpKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+amV0dGlzb24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK3ZvaWQg
Vk06OnNldEVuYWJsZWRQcm9maWxlcihMZWdhY3lQcm9maWxlciogcHJvZmlsZXIpCit7CisgICAg
bV9lbmFibGVkUHJvZmlsZXIgPSBwcm9maWxlcjsKKyAgICBpZiAobV9lbmFibGVkUHJvZmlsZXIp
IHsKKyAgICAgICAgU2V0RW5hYmxlZFByb2ZpbGVyRnVuY3RvciBmdW5jdG9yOworICAgICAgICBo
ZWFwLmZvckVhY2hDb2RlQmxvY2soZnVuY3Rvcik7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTYyODYw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpA
QCAtMzA0LDEwICszMDQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBt
X2luRGVmaW5lT3duUHJvcGVydHk7CiAgICAgICAgIH0KIAotICAgICAgICBMZWdhY3lQcm9maWxl
ciogZW5hYmxlZFByb2ZpbGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZW5h
YmxlZFByb2ZpbGVyOwotICAgICAgICB9CisgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBlbmFibGVk
UHJvZmlsZXIoKSB7IHJldHVybiBtX2VuYWJsZWRQcm9maWxlcjsgfQorICAgICAgICB2b2lkIHNl
dEVuYWJsZWRQcm9maWxlcihMZWdhY3lQcm9maWxlciopOworCiAgICAgICAgIHZvaWQqIGVuYWJs
ZWRQcm9maWxlckFkZHJlc3MoKSB7IHJldHVybiAmbV9lbmFibGVkUHJvZmlsZXI7IH0KIAogI2lm
IEVOQUJMRShKSVQpICYmIEVOQUJMRShMTElOVCkKQEAgLTQzMiw3ICs0MzEsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU3RyaW5nIGNhY2hlZERhdGVTdHJpbmc7CiAgICAgICAgIGRvdWJs
ZSBjYWNoZWREYXRlU3RyaW5nVmFsdWU7CiAKLSAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5h
YmxlZFByb2ZpbGVyOwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5
dGVjb2RlUHJvZmlsZXI7CiAgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29udHJvbGxlcj4gbV90
eXBlZEFycmF5Q29udHJvbGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7
CkBAIC01MjQsNiArNTIyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxDb2Rl
Q2FjaGU+IG1fY29kZUNhY2hlOwogICAgICAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4g
bV9leGNlcHRpb25TdGFjazsKIAorICAgICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVkUHJv
ZmlsZXI7CisKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxXYXRjaHBvaW50U2V0Pj4g
bV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzOwogICAgIH07CiAKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE2MjkyMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIzIEBACisyMDE0LTAxLTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
KworICAgICAgICBKZXR0aXNvbiBERkcgY29kZSB3aGVuIG5laXRoZXIgYnJlYWtwb2ludHMgb3Ig
dGhlIHByb2ZpbGVyIGFyZSBhY3RpdmUuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8x
Mjc3NjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgYSB0ZXN0IHRvIGV4ZXJjaXNlIHNldHRpbmcgYSBicmVha3BvaW50IGluIDIgREZHIGNv
bXBpbGVkIGZ1bmN0aW9uczoKKyAgICAgICAgMSBub3QgaW5saW5lZCwgYW5kIDEgaW5saW5lZC4K
KworICAgICAgICAqIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9yZXNvdXJjZXMvYnJlYWtw
b2ludC5qczoKKyAgICAgICAgKG5vdElubGluZWFibGUpOgorICAgICAgICAoaW5saW5lYWJsZSk6
CisgICAgICAgIChub3RJbmxpbmluZ0Zvbyk6CisgICAgICAgIChpbmxpbmluZ0Zvbyk6CisgICAg
ICAgIChkZmdXaXRob3V0SW5saW5lKToKKyAgICAgICAgKGRmZ1dpdGhJbmxpbmUpOgorICAgICAg
ICAqIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRCcmVha3BvaW50LWRmZy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRC
cmVha3BvaW50LWRmZy5odG1sOiBBZGRlZC4KKwogMjAxNC0wMS0yNyAgQnJpYW4gQnVyZyAgPGJi
dXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBjbGVhbiB1cCBpbml0aWFs
aXphdGlvbiBvZiBtYW5hZ2VycyBhbmQgb2JzZXJ2ZXJzIGluIEluc3BlY3RvclRlc3QKSW5kZXg6
IExheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRCcmVha3BvaW50LWRm
Zy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3Rv
Y29sL2RlYnVnZ2VyL3NldEJyZWFrcG9pbnQtZGZnLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRCcmVha3BvaW50
LWRmZy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBAQAorRGVidWdn
ZXIuc2V0QnJlYWtwb2ludCBpbiBERkcgY29tcGlsZWQgZnVuY3Rpb25zLgorCitGb3VuZCBicmVh
a3BvaW50LmpzCitkZmdXaXRob3V0SW5saW5lIHJlc3VsdDogNTAyNTAwCitkZmdXaXRoSW5saW5l
IHJlc3VsdDogNTA0NTAwCitkZmcgZnVuY3Rpb25zIHdhcm1lZCB1cAorCitCcmVha3BvaW50IHNl
dCBpbiBub3RJbmxpbmVhYmxlKCkKK0JyZWFrcG9pbnQgc2V0IGluIGlubGluZWFibGUoKQorCitI
aXQgQnJlYWtwb2ludCAxIQorUmVtb3ZlZCBCcmVha3BvaW50IDEhCitkZmdXaXRob3V0SW5saW5l
IHJlc3VsdDogNTAyNTAwCitkZmdXaXRoSW5saW5lIHJlc3VsdDogNTA0NTAwCisKSW5kZXg6IExh
eW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRCcmVha3BvaW50LWRmZy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dl
ci9zZXRCcmVha3BvaW50LWRmZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5z
cGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3NldEJyZWFrcG9pbnQtZGZnLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4NCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9odHRwL3Rlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMvcHJvdG9jb2wtdGVzdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JyZWFrcG9pbnQuanMiPjwvc2Ny
aXB0PgorCis8c2NyaXB0PgorLy8gUHV0IHRoaXMgaGVyZSBpbnN0ZWFkIG9mIG9uIDxib2R5IG9u
bG9hZD4gdG8gcHJldmVudCBhbiBleHRyYSBEZWJ1Z2dlci5zY3JpcHRQYXJzZWQgZXZlbnQuCit3
aW5kb3cub25sb2FkID0gcnVuVGVzdDsKKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgLy8gVGhp
cyB0ZXN0IHNldHRpbmcgMiBicmVha3BvaW50cyBpbiBERkcgY29tcGlsZWQgZnVuY3Rpb25zOiBv
bmUgaW5saW5lZCwKKyAgICAvLyBhbmQgb25lIG5vdCBpbmxpbmVkLgorCisgICAgSW5zcGVjdG9y
VGVzdC5zZW5kQ29tbWFuZCgiRGVidWdnZXIuZW5hYmxlIiwge30pOworCisgICAgdmFyIGRmZ05v
bklubGluZWRCcmVha3BvaW50SWQgPSBudWxsOworICAgIHZhciBkZmdJbmxpbmVkQnJlYWtwb2lu
dElkID0gbnVsbDsKKyAgICB2YXIgc2NyaXB0SWRlbnRpZmllciA9IDA7CisgICAgdmFyIHN0YXJ0
TGluZSA9IDA7CisKKyAgICBJbnNwZWN0b3JUZXN0LmV2ZW50SGFuZGxlclsiRGVidWdnZXIuc2Ny
aXB0UGFyc2VkIl0gPSBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYg
KC9yZXNvdXJjZXNcL2JyZWFrcG9pbnRcLmpzJC8udGVzdChtZXNzYWdlT2JqZWN0LnBhcmFtcy51
cmwpKSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiRm91bmQgYnJlYWtwb2ludC5q
cyIpOworICAgICAgICAgICAgc2NyaXB0SWRlbnRpZmllciA9IG1lc3NhZ2VPYmplY3QucGFyYW1z
LnNjcmlwdElkOworICAgICAgICAgICAgc3RhcnRMaW5lID0gbWVzc2FnZU9iamVjdC5wYXJhbXMu
c3RhcnRMaW5lOworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50
aW1lLmV2YWx1YXRlIiwgeworICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJkZmdXaXRob3V0
SW5saW5lKCk7IGRmZ1dpdGhJbmxpbmUoKTsiCisgICAgICAgICAgICB9LCBmdW5jdGlvbihyZXNw
b25zZU9iamVjdCkgeworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJkZmcgZnVu
Y3Rpb25zIHdhcm1lZCB1cFxuIik7CisKKyAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24xID0g
e3NjcmlwdElkOiBzY3JpcHRJZGVudGlmaWVyLCBsaW5lTnVtYmVyOiAyMiwgY29sdW1uTnVtYmVy
OiAwfTsKKworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2VuZENvbW1hbmQoIkRlYnVn
Z2VyLnNldEJyZWFrcG9pbnQiLCB7bG9jYXRpb246IGxvY2F0aW9uMX0sIGZ1bmN0aW9uKHJlc3Bv
bnNlT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tGb3JF
cnJvcihyZXNwb25zZU9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCJCcmVha3BvaW50IHNldCBpbiBub3RJbmxpbmVhYmxlKCkiKTsKKworICAgICAgICAgICAg
ICAgICAgICBkZmdOb25JbmxpbmVkQnJlYWtwb2ludElkID0gcmVzcG9uc2VPYmplY3QucmVzdWx0
LmJyZWFrcG9pbnRJZDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uMiA9IHtzY3Jp
cHRJZDogc2NyaXB0SWRlbnRpZmllciwgbGluZU51bWJlcjogMjgsIGNvbHVtbk51bWJlcjogMH07
CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2VuZENvbW1hbmQoIkRlYnVnZ2Vy
LnNldEJyZWFrcG9pbnQiLCB7bG9jYXRpb246IGxvY2F0aW9uMn0sIGZ1bmN0aW9uKHJlc3BvbnNl
T2JqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrRm9y
RXJyb3IocmVzcG9uc2VPYmplY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5sb2coIkJyZWFrcG9pbnQgc2V0IGluIGlubGluZWFibGUoKVxuIik7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRmZ0lubGluZWRCcmVha3BvaW50SWQgPSByZXNwb25zZU9iamVjdC5y
ZXN1bHQuYnJlYWtwb2ludElkOworICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5zZW5kQ29tbWFuZCgiUnVudGltZS5ldmFsdWF0ZSIsIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHByZXNzaW9uOiAiZGZnV2l0aG91dElubGluZSgpOyBkZmdXaXRoSW5saW5lKCk7
IgorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2YXIgYnJlYWtwb2ludHNIaXQgPSAwOworICAgIEluc3BlY3RvclRlc3QuZXZlbnRIYW5k
bGVyWyJEZWJ1Z2dlci5wYXVzZWQiXSA9IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCisgICAgewor
ICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gbnVsbDsKKyAgICAgICAgYnJlYWtwb2ludHNIaXQr
KzsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkhpdCBCcmVha3BvaW50ICIgKyBicmVha3Bv
aW50c0hpdCArICIhIik7CisgICAgICAgIGlmIChicmVha3BvaW50c0hpdCA9PSAxKQorICAgICAg
ICAgICAgYnJlYWtwb2ludElkID0gZGZnTm9uSW5saW5lZEJyZWFrcG9pbnRJZDsKKyAgICAgICAg
ZWxzZSBpZiAoYnJlYWtwb2ludHNIaXQgPT0gMikKKyAgICAgICAgICAgIGJyZWFrcG9pbnRJZCA9
IGRmZ0lubGluZWRCcmVha3BvaW50SWQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QubG9nKCJVbmV4cGVjdGVkIGJyZWFrcG9pbnQiKTsKKworICAgICAgICBJbnNwZWN0
b3JUZXN0LnNlbmRDb21tYW5kKCJEZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50IiwgeyJicmVha3Bv
aW50SWQiOiBicmVha3BvaW50SWR9LCBmdW5jdGlvbihyZXNwb25zZU9iamVjdCkgeworICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlbW92ZWQgQnJlYWtwb2ludCAiICsgYnJlYWtwb2lu
dHNIaXQgKyAiISIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiRGVi
dWdnZXIucmVzdW1lIiwge30sIGZ1bmN0aW9uKHJlc3BvbnNlT2JqZWN0KSB7CisgICAgICAgICAg
ICAgICAgaWYgKGJyZWFrcG9pbnRzSGl0ID09IDIpCisgICAgICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QubG9nKCJQQVNTIik7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
Y29tcGxldGVUZXN0KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorfQor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPkRlYnVnZ2VyLnNldEJyZWFrcG9pbnQgaW4g
REZHIGNvbXBpbGVkIGZ1bmN0aW9ucy48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvcmVzb3VyY2VzL2JyZWFrcG9pbnQu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2Vy
L3Jlc291cmNlcy9icmVha3BvaW50LmpzCShyZXZpc2lvbiAxNjI4NjApCisrKyBMYXlvdXRUZXN0
cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvcmVzb3VyY2VzL2JyZWFrcG9pbnQuanMJKHdv
cmtpbmcgY29weSkKQEAgLTE3LDMgKzE3LDQyIEBAIGZ1bmN0aW9uIGJyZWFrcG9pbnRBY3Rpb25z
KGEsIGIpCiB7CiAgICAgbG9nKCJpbnNpZGUgYnJlYWtwb2ludEFjdGlvbnMgYTooIiArIGEgKyAi
KSBiOigiICsgYiArICIpIik7CiB9CisKK2Z1bmN0aW9uIG5vdElubGluZWFibGUoeCkKK3sKKyAg
ICB2YXIgZnVuYyA9IG5ldyBGdW5jdGlvbigicmV0dXJuIHggKyAxMDA7Iik7CisgICAgcmV0dXJu
IHggKyAzOworfQorCitmdW5jdGlvbiBpbmxpbmVhYmxlKHgpCit7CisgICAgcmV0dXJuIHggKyA1
OworfQorCitmdW5jdGlvbiBub3RJbmxpbmluZ0Zvbyh4KQoreworICAgIHJldHVybiBub3RJbmxp
bmVhYmxlKHgpOworfQorCitmdW5jdGlvbiBpbmxpbmluZ0Zvbyh4KQoreworICAgIHJldHVybiBp
bmxpbmVhYmxlKHgpOworfQorCitmdW5jdGlvbiBkZmdXaXRob3V0SW5saW5lKCkKK3sKKyAgICB2
YXIgaTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsr
KQorICAgICAgICByZXN1bHQgKz0gbm90SW5saW5pbmdGb28oaSk7CisgICAgbG9nKCJkZmdXaXRo
b3V0SW5saW5lIHJlc3VsdDogIiArIHJlc3VsdCk7ICAgIAorfQorCitmdW5jdGlvbiBkZmdXaXRo
SW5saW5lKCkKK3sKKyAgICB2YXIgaTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICByZXN1bHQgKz0gaW5saW5pbmdGb28oaSk7Cisg
ICAgbG9nKCJkZmdXaXRoSW5saW5lIHJlc3VsdDogIiArIHJlc3VsdCk7ICAgIAorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222419</attachid>
            <date>2014-01-28 01:27:10 -0800</date>
            <delta_ts>2014-04-21 21:24:06 -0700</delta_ts>
            <desc>patch 2: fixed a bug in the test and test expectations.</desc>
            <filename>bug-127766.patch</filename>
            <type>text/plain</type>
            <size>22292</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyOTIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE0LTAxLTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBK
ZXR0aXNvbiBERkcgY29kZSB3aGVuIG5laXRoZXIgYnJlYWtwb2ludHMgb3IgdGhlIHByb2ZpbGVy
IGFyZSBhY3RpdmUuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMjc3NjY+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgbmVlZCB0byBq
ZXR0aXNvbiB0aGUgREZHIENvZGVCbG9ja3MgdW5kZXIgdGhlIGZvbGxvd2luZyBjaXJjdW1zdGFu
Y2VzOgorICAgICAgICAxLiBXaGVuIGFkZGluZyBicmVha3BvaW50cyB0byBhIENvZGVCbG9jaywg
amV0dGlzb24gaXQgaWYgaXQgaXMgYSBERkcgQ29kZUJsb2NrLgorICAgICAgICAyLiBXaGVuIGVu
YWJsaW5nIHN0ZXBwaW5nIG1vZGUgaW4gYSBDb2RlQmxvY2ssIGpldHRpc29uIGl0IGlmIGl0IGEg
REZHIENvZGVCbG9jay4KKyAgICAgICAgMy4gV2hlbiBzZXR0aWduIHRoZSBlbmFibGVkIHByb2Zp
bGVyIGluIHRoZSBWTSwgd2UgbmVlZCB0byBqZXR0aXNvbiBhbGwgREZHCisgICAgICAgICAgIENv
ZGVCbG9ja3MuCisKKyAgICAgICAgSW5zdGVhZCBvZiBlbWl0dGluZyBzcGVjdWxhdGlvbiBjaGVj
a3MsIHRoZSBERkcgY29kZSB3aWxsIG5vdyB0cmVhdCBCcmVha3BvaW50LAorICAgICAgICBQcm9m
aWxlV2lsbENhbGwsIGFuZCBQcm9maWxlRGlkQ2FsbCBhcyBuby1vcHMgc2ltaWxhciB0byBhIFBo
YW50b20gbm9kZS4gV2UKKyAgICAgICAgc3RpbGwgbmVlZCB0byB0cmFjayB0aGVzZSBub2RlcyBz
byB0aGF0IHRoZXkgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgb3Bjb2RlcworICAgICAgICBpbiB0
aGUgYmFzZWxpbmUgSklUIHdoZW4gd2UgamV0dGlzb24gYW5kIE9TUiBleGl0LiBXaXRob3V0IHRo
ZW0sIHdlIHdvdWxkIE9TUgorICAgICAgICBleGl0IHRvIHRoZSB3cm9uZyBsb2NhdGlvbiBpbiB0
aGUgYmFzZWxpbmUgSklUIGNvZGUuCisKKyAgICAgICAgSW4gREZHRHJpdmVyJ3MgY29tcGlsZUlt
cGwoKSBhbmQgREZHUGxhbidzIGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkKKyAg
ICAgICAgd2UgZmFpbCB0aGUgY29tcGlsYXRpb24gZWZmb3J0IHdpdGggYSBDb21waWxhdGlvbklu
dmFsaWRhdGVkIHJlc3VsdC4gVGhpcyBhbGxvd3MKKyAgICAgICAgdGhlIERGRyBjb21waWxlciB0
byByZS1hdHRhbXB0IHRoZSBjb21waWxhdGlvbiBvZiB0aGUgZnVuY3Rpb24gYWZ0ZXIgc29tZSB0
aW1lCisgICAgICAgIGlmIGl0IGlzIGhvdC4gVGhlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQgcmVz
dWx0IGlzIHN1cHBvc2VkIHRvIGNhdXNlIHRoZSBERkcKKyAgICAgICAgdG8gZXhlcmNpc2UgYW4g
ZXhwb25lbnRpYWwgYmFjayBvZmYgYmVmb3JlIHJlLWF0dGVtcHRpbmcgY29tcGlsYXRpb24gYWdh
aW4KKyAgICAgICAgKHNlZSBydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmgpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhlIE9jdGFuZSBzY29yZSBmcm9tIH4yOTUwIHRvIH4zMDY3
LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjphZGRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRTdGVw
cGluZ01vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGRl
YnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdE
cml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBk
ZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6ZmluYWxpemVXaXRob3V0
Tm90aWZ5aW5nQ2FsbGJhY2spOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBwcm9maWxlci9MZWdhY3lQcm9maWxl
ci5jcHA6CisgICAgICAgIChKU0M6OkxlZ2FjeVByb2ZpbGVyOjpzdGFydFByb2ZpbGluZyk6Cisg
ICAgICAgIChKU0M6OkxlZ2FjeVByb2ZpbGVyOjpzdG9wUHJvZmlsaW5nKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6U2V0
RW5hYmxlZFByb2ZpbGVyRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OlZNOjpz
ZXRFbmFibGVkUHJvZmlsZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpT
Qzo6Vk06OmVuYWJsZWRQcm9maWxlcik6CisKIDIwMTQtMDEtMjcgIEpvc2VwaCBQZWNvcmFybyAg
PHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICAtW0pTQ29udGV4dCBldmFsdXRlU2NyaXB0
Ol0gY2FsbHMgSlNFdmFsdXRlU2NyaXB0IHdpdGggc3RhcnRpbmdMaW5lTnVtYmVyIDAsIGxhdGVy
IGludGVycHJldGVkIGFzIGEgb25lQmFzZWRJbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjI4NjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUzMSw0ICszNTMxLDE5IEBAIHZvaWQgQ29kZUJsb2NrOjplbmRWYWxpZGF0aW9uRGlkRmFpbCgp
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6
OmFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCit7CisgICAgbV9udW1CcmVh
a3BvaW50cyArPSBudW1CcmVha3BvaW50czsKKyAgICBBU1NFUlQobV9udW1CcmVha3BvaW50cyk7
CisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgIGpldHRpc29u
KCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzZXRTdGVwcGluZ01vZGUoQ29kZUJsb2NrOjpTdGVw
cGluZ01vZGUgbW9kZSkKK3sKKyAgICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7CisgICAgaWYgKG1v
ZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCAmJiBqaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklU
KQorICAgICAgICBqZXR0aXNvbigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2Mjg2
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtODcyLDcgKzg3Miw3IEBAIHB1YmxpYzoKICAgICBpbnQgaGFzRGVidWdnZXJS
ZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuICEhbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAgICAgdm9p
ZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAKLSAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpIHsg
bV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsgfQorICAgIHZvaWQgYWRkQnJlYWtw
b2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50
KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbnVtQnJl
YWtwb2ludHMgPj0gbnVtQnJlYWtwb2ludHMpOwpAQCAtODgzLDcgKzg4Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgU3RlcHBpbmdNb2RlRGlzYWJsZWQsCiAgICAgICAgIFN0ZXBwaW5nTW9kZUVuYWJs
ZWQKICAgICB9OwotICAgIHZvaWQgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZSBtb2RlKSB7
IG1fc3RlcHBpbmdNb2RlID0gbW9kZTsgfQorICAgIHZvaWQgc2V0U3RlcHBpbmdNb2RlKFN0ZXBw
aW5nTW9kZSk7CiAKICAgICB2b2lkIGNsZWFyRGVidWdnZXJSZXF1ZXN0cygpIHsgbV9kZWJ1Z2dl
clJlcXVlc3RzID0gMDsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuaAkocmV2aXNpb24gMTYyODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb24oKTsKIAogICAgIGJvb2wgaXNQYXVzZWQoKSB7
IHJldHVybiBtX2lzUGF1c2VkOyB9CisgICAgYm9vbCBpc1N0ZXBwaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zdGVwcGluZ01vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZDsgfQogCiAgICAgdmlydHVh
bCB2b2lkIHNvdXJjZVBhcnNlZChFeGVjU3RhdGUqLCBTb3VyY2VQcm92aWRlciosIGludCBlcnJv
ckxpbmVOdW1iZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKIApAQCAt
MTcwLDcgKzE3MSw2IEBAIHByaXZhdGU6CiAgICAgICAgIFN0ZXBwaW5nTW9kZUVuYWJsZWQKICAg
ICB9OwogICAgIHZvaWQgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZSk7Ci0gICAgYm9vbCBp
c1N0ZXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdGVwcGluZ01vZGUgPT0gU3RlcHBpbmdNb2Rl
RW5hYmxlZDsgfQogCiAgICAgZW51bSBCcmVha3BvaW50U3RhdGUgewogICAgICAgICBCcmVha3Bv
aW50RGlzYWJsZWQsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNjI4NjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NTQsMTMgKzE3NTQsMTMgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgQnJlYWtwb2ludDoKLSAgICBjYXNlIFByb2Zp
bGVXaWxsQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgogICAgIGNhc2UgQ2hlY2tXYXRj
aGRvZ1RpbWVyOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVh
azsKIAorICAgIGNhc2UgQnJlYWtwb2ludDoKKyAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKKyAg
ICBjYXNlIFByb2ZpbGVEaWRDYWxsOgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIENoZWNr
OgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTYyODYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDkg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgV2Vh
a0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBJZGVudGl0eToKICAgICBjYXNlIFBoYW50b206CisgICAg
Y2FzZSBCcmVha3BvaW50OgorICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgorICAgIGNhc2UgUHJv
ZmlsZURpZENhbGw6CiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNl
IEJpdFhvcjoKQEAgLTYxOCw5ICs2MjEsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRl
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIEJyZWFrcG9pbnQ6Ci0gICAg
Y2FzZSBQcm9maWxlV2lsbENhbGw6Ci0gICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKICAgICBjYXNl
IENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICBy
ZWFkKEludGVybmFsU3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkocmV2aXNpb24gMTYyODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
REZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0
LmgiCisjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKQEAgLTczLDYgKzc0LDEzIEBA
IHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICBpZiAoIU9wdGlvbnM6
OmJ5dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUoKS5pc0luUmFuZ2UoY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkNvdW50KCkpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAgICAgCisg
ICAgaWYgKHZtLmVuYWJsZWRQcm9maWxlcigpKQorICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25J
bnZhbGlkYXRlZDsKKworICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmRlYnVnZ2VyKCk7CisgICAgaWYgKGRlYnVnZ2VyICYmIChkZWJ1Z2dlci0+aXNT
dGVwcGluZygpIHx8IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLT5oYXNEZWJ1Z2dl
clJlcXVlc3RzKCkpKQorICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsKKwog
ICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKICAgICAgICAgZGF0YUxvZygiREZHKERy
aXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIgd2l0aCAiLCBtb2RlLCAiLCBudW1iZXIg
b2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIp
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lv
biAxNjI4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNp
bmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNp
bmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0zNDYsNyArMzQ3LDE0IEBAIENvbXBpbGF0aW9u
UmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE4KIHsKICAgICBpZiAoIWlzU3RpbGxWYWxpZCgp
KQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsKLSAgICAKKworICAgIGlm
ICh2bS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uSW52YWxp
ZGF0ZWQ7CisKKyAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5kZWJ1Z2dlcigpOworICAgIGlmIChkZWJ1Z2dlciAmJiAoZGVidWdnZXItPmlzU3RlcHBp
bmcoKSB8fCBjb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKS0+aGFzRGVidWdnZXJSZXF1
ZXN0cygpKSkKKyAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ7CisKICAgICBi
b29sIHJlc3VsdDsKICAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKICAgICAgICAgcmVzdWx0ID0gZmluYWxpemVyLT5maW5hbGl6ZUZ1bmN0aW9uKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDE2Mjg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMzIsMjYgKzQy
MzIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2Fz
ZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEJyZWFrcG9pbnQ6IHsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyBkZWJ1Z2dlclJlcXVl
c3RzR1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKG1faml0LmNvZGVCbG9j
aygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCBkZWJ1Z2dlclJlcXVlc3RzR1BSKTsKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIERlYnVnZ2VyRXZlbnQsIEpTVmFs
dWVSZWdzKCksIDAsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
Ok5vblplcm8sIGRlYnVnZ2VyUmVxdWVzdHNHUFIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgY2FzZSBQcm9maWxlV2lsbENhbGw6Ci0gICAgY2FzZSBQcm9maWxlRGlkQ2FsbDogewot
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgbV9qaXQubG9hZFB0ciht
X2ppdC52bSgpLT5lbmFibGVkUHJvZmlsZXJBZGRyZXNzKCksIHRlbXAuZ3ByKCkpOwotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgRGVidWdnZXJFdmVudCwgSlNWYWx1ZVJl
Z3MoKSwgMCwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5v
blplcm8sIHRlbXAuZ3ByKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAgICAgY2FzZSBD
YWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKQEAgLTQ2
OTAsNiArNDY3MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBCcmVh
a3BvaW50OgorICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgorICAgIGNhc2UgUHJvZmlsZURpZENh
bGw6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAg
Ly8gVGhpcyBpcyBhIG5vLW9wLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjI4NjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NTA5LDI1ICs0NTA5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBCcmVh
a3BvaW50OiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJS
ZWcgZGVidWdnZXJSZXF1ZXN0c0dQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQz
MihtX2ppdC5jb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgZGVidWdnZXJS
ZXF1ZXN0c0dQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBEZWJ1
Z2dlckV2ZW50LCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBkZWJ1Z2dlclJlcXVlc3RzR1BSKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgotICAgIGNhc2UgUHJv
ZmlsZURpZENhbGw6Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBEZWJ1
Z2dlckV2ZW50LCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dFB0cigKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKLSAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKG1faml0LnZtKCktPmVuYWJsZWRQcm9m
aWxlckFkZHJlc3MoKSkpKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIENhbGw6CiAgICAg
Y2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwpAQCAtNDkyNCw2ICs0OTA1
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQnJlYWtw
b2ludDoKKyAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKKyAgICBjYXNlIFByb2ZpbGVEaWRDYWxs
OgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIC8v
IFRoaXMgaXMgYSBuby1vcC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9M
ZWdhY3lQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTYyODYwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzUsNyArNzUsNyBAQCB2b2lkIExlZ2FjeVByb2ZpbGVyOjpzdGFydFByb2ZpbGluZyhFeGVj
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZXhlYy0+dm0oKS5tX2VuYWJsZWRQ
cm9maWxlciA9IHRoaXM7CisgICAgZXhlYy0+dm0oKS5zZXRFbmFibGVkUHJvZmlsZXIodGhpcyk7
CiAgICAgUmVmUHRyPFByb2ZpbGVHZW5lcmF0b3I+IHByb2ZpbGVHZW5lcmF0b3IgPSBQcm9maWxl
R2VuZXJhdG9yOjpjcmVhdGUoZXhlYywgdGl0bGUsICsrUHJvZmlsZXNVSUQpOwogICAgIG1fY3Vy
cmVudFByb2ZpbGVzLmFwcGVuZChwcm9maWxlR2VuZXJhdG9yKTsKIH0KQEAgLTk0LDcgKzk0LDcg
QEAgUGFzc1JlZlB0cjxQcm9maWxlPiBMZWdhY3lQcm9maWxlcjo6c3RvcAogCiAgICAgICAgICAg
ICBtX2N1cnJlbnRQcm9maWxlcy5yZW1vdmUoaSk7CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVu
dFByb2ZpbGVzLnNpemUoKSkKLSAgICAgICAgICAgICAgICBleGVjLT52bSgpLm1fZW5hYmxlZFBy
b2ZpbGVyID0gMDsKKyAgICAgICAgICAgICAgICBleGVjLT52bSgpLnNldEVuYWJsZWRQcm9maWxl
cihudWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHJldHVyblByb2Zp
bGU7CiAgICAgICAgIH0KQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIExlZ2FjeVByb2ZpbGVyOjpz
dG9wUHJvZmlsaW5nKEpTR2xvCiAgICAgICAgICAgICBwcm9maWxlR2VuZXJhdG9yLT5zdG9wUHJv
ZmlsaW5nKCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRQcm9maWxlcy5yZW1vdmUoaSk7CiAgICAg
ICAgICAgICBpZiAoIW1fY3VycmVudFByb2ZpbGVzLnNpemUoKSkKLSAgICAgICAgICAgICAgICBv
cmlnaW4tPnZtKCkubV9lbmFibGVkUHJvZmlsZXIgPSAwOworICAgICAgICAgICAgICAgIG9yaWdp
bi0+dm0oKS5zZXRFbmFibGVkUHJvZmlsZXIobnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNjI4NjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5Nyw3ICsxOTcsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgLCBqc0ZpbmFsT2JqZWN0Q2xhc3NJbmZvKEpTRmluYWxPYmplY3Q6OmluZm8oKSkK
ICAgICAsIHNpemVPZkxhc3RTY3JhdGNoQnVmZmVyKDApCiAgICAgLCBlbnRyeVNjb3BlKDApCi0g
ICAgLCBtX2VuYWJsZWRQcm9maWxlcigwKQogICAgICwgbV9yZWdFeHBDYWNoZShuZXcgUmVnRXhw
Q2FjaGUodGhpcykpCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgICwgbV9ydFRyYWNl
TGlzdChuZXcgUlRUcmFjZUxpc3QoKSkKQEAgLTIyMiw2ICsyMjEsNyBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjZW5kaWYKICAgICAsIG1faW5EZWZpbmVPd25Q
cm9wZXJ0eShmYWxzZSkKICAgICAsIG1fY29kZUNhY2hlKENvZGVDYWNoZTo6Y3JlYXRlKCkpCisg
ICAgLCBtX2VuYWJsZWRQcm9maWxlcihudWxscHRyKQogewogICAgIGludGVycHJldGVyID0gbmV3
IEludGVycHJldGVyKCp0aGlzKTsKICAgICBTdGFja0JvdW5kcyBzdGFjayA9IHd0ZlRocmVhZERh
dGEoKS5zdGFjaygpOwpAQCAtNzgwLDQgKzc4MCwyMyBAQCB2b2lkIFZNOjphZGRJbXB1cmVQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmCiAgICAgICAgIHdhdGNocG9pbnRTZXQtPmZpcmVBbGwoKTsKIH0K
IAorY2xhc3MgU2V0RW5hYmxlZFByb2ZpbGVyRnVuY3RvciB7CitwdWJsaWM6CisgICAgYm9vbCBv
cGVyYXRvcigpKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+amV0dGlzb24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK3ZvaWQg
Vk06OnNldEVuYWJsZWRQcm9maWxlcihMZWdhY3lQcm9maWxlciogcHJvZmlsZXIpCit7CisgICAg
bV9lbmFibGVkUHJvZmlsZXIgPSBwcm9maWxlcjsKKyAgICBpZiAobV9lbmFibGVkUHJvZmlsZXIp
IHsKKyAgICAgICAgU2V0RW5hYmxlZFByb2ZpbGVyRnVuY3RvciBmdW5jdG9yOworICAgICAgICBo
ZWFwLmZvckVhY2hDb2RlQmxvY2soZnVuY3Rvcik7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTYyODYw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpA
QCAtMzA0LDEwICszMDQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBt
X2luRGVmaW5lT3duUHJvcGVydHk7CiAgICAgICAgIH0KIAotICAgICAgICBMZWdhY3lQcm9maWxl
ciogZW5hYmxlZFByb2ZpbGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZW5h
YmxlZFByb2ZpbGVyOwotICAgICAgICB9CisgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBlbmFibGVk
UHJvZmlsZXIoKSB7IHJldHVybiBtX2VuYWJsZWRQcm9maWxlcjsgfQorICAgICAgICB2b2lkIHNl
dEVuYWJsZWRQcm9maWxlcihMZWdhY3lQcm9maWxlciopOworCiAgICAgICAgIHZvaWQqIGVuYWJs
ZWRQcm9maWxlckFkZHJlc3MoKSB7IHJldHVybiAmbV9lbmFibGVkUHJvZmlsZXI7IH0KIAogI2lm
IEVOQUJMRShKSVQpICYmIEVOQUJMRShMTElOVCkKQEAgLTQzMiw3ICs0MzEsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU3RyaW5nIGNhY2hlZERhdGVTdHJpbmc7CiAgICAgICAgIGRvdWJs
ZSBjYWNoZWREYXRlU3RyaW5nVmFsdWU7CiAKLSAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5h
YmxlZFByb2ZpbGVyOwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5
dGVjb2RlUHJvZmlsZXI7CiAgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29udHJvbGxlcj4gbV90
eXBlZEFycmF5Q29udHJvbGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7
CkBAIC01MjQsNiArNTIyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxDb2Rl
Q2FjaGU+IG1fY29kZUNhY2hlOwogICAgICAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4g
bV9leGNlcHRpb25TdGFjazsKIAorICAgICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVkUHJv
ZmlsZXI7CisKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxXYXRjaHBvaW50U2V0Pj4g
bV9pbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnRTZXRzOwogICAgIH07CiAKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE2MjkyMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIzIEBACisyMDE0LTAxLTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
KworICAgICAgICBKZXR0aXNvbiBERkcgY29kZSB3aGVuIG5laXRoZXIgYnJlYWtwb2ludHMgb3Ig
dGhlIHByb2ZpbGVyIGFyZSBhY3RpdmUuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8x
Mjc3NjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgYSB0ZXN0IHRvIGV4ZXJjaXNlIHNldHRpbmcgYSBicmVha3BvaW50IGluIDIgREZHIGNv
bXBpbGVkIGZ1bmN0aW9uczoKKyAgICAgICAgMSBub3QgaW5saW5lZCwgYW5kIDEgaW5saW5lZC4K
KworICAgICAgICAqIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9yZXNvdXJjZXMvYnJlYWtw
b2ludC5qczoKKyAgICAgICAgKG5vdElubGluZWFibGUpOgorICAgICAgICAoaW5saW5lYWJsZSk6
CisgICAgICAgIChub3RJbmxpbmluZ0Zvbyk6CisgICAgICAgIChpbmxpbmluZ0Zvbyk6CisgICAg
ICAgIChkZmdXaXRob3V0SW5saW5lKToKKyAgICAgICAgKGRmZ1dpdGhJbmxpbmUpOgorICAgICAg
ICAqIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRCcmVha3BvaW50LWRmZy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRC
cmVha3BvaW50LWRmZy5odG1sOiBBZGRlZC4KKwogMjAxNC0wMS0yNyAgQnJpYW4gQnVyZyAgPGJi
dXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBjbGVhbiB1cCBpbml0aWFs
aXphdGlvbiBvZiBtYW5hZ2VycyBhbmQgb2JzZXJ2ZXJzIGluIEluc3BlY3RvclRlc3QKSW5kZXg6
IExheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRCcmVha3BvaW50LWRm
Zy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3Rv
Y29sL2RlYnVnZ2VyL3NldEJyZWFrcG9pbnQtZGZnLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRCcmVha3BvaW50
LWRmZy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAorRGVidWdn
ZXIuc2V0QnJlYWtwb2ludCBpbiBERkcgY29tcGlsZWQgZnVuY3Rpb25zLgorCitGb3VuZCBicmVh
a3BvaW50LmpzCitkZmdXaXRob3V0SW5saW5lIHJlc3VsdDogNTAyNTAwCitkZmdXaXRoSW5saW5l
IHJlc3VsdDogNTA0NTAwCitkZmcgZnVuY3Rpb25zIHdhcm1lZCB1cAorCitCcmVha3BvaW50IHNl
dCBpbiBub3RJbmxpbmVhYmxlKCkKK0JyZWFrcG9pbnQgc2V0IGluIGlubGluZWFibGUoKQorCitI
aXQgQnJlYWtwb2ludCAxIQorUmVtb3ZlZCBCcmVha3BvaW50IDEhCitkZmdXaXRob3V0SW5saW5l
IHJlc3VsdDogNTAyNTAwCitIaXQgQnJlYWtwb2ludCAyIQorUmVtb3ZlZCBCcmVha3BvaW50IDIh
CitQQVNTCitkZmdXaXRoSW5saW5lIHJlc3VsdDogNTA0NTAwCisKSW5kZXg6IExheW91dFRlc3Rz
L2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRCcmVha3BvaW50LWRmZy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRCcmVh
a3BvaW50LWRmZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXBy
b3RvY29sL2RlYnVnZ2VyL3NldEJyZWFrcG9pbnQtZGZnLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rl
c3RzL2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMvcHJvdG9jb2wtdGVzdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JyZWFrcG9pbnQuanMiPjwvc2NyaXB0PgorCis8
c2NyaXB0PgorLy8gUHV0IHRoaXMgaGVyZSBpbnN0ZWFkIG9mIG9uIDxib2R5IG9ubG9hZD4gdG8g
cHJldmVudCBhbiBleHRyYSBEZWJ1Z2dlci5zY3JpcHRQYXJzZWQgZXZlbnQuCit3aW5kb3cub25s
b2FkID0gcnVuVGVzdDsKKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgLy8gVGhpcyB0ZXN0IHNl
dHRpbmcgMiBicmVha3BvaW50cyBpbiBERkcgY29tcGlsZWQgZnVuY3Rpb25zOiBvbmUgaW5saW5l
ZCwKKyAgICAvLyBhbmQgb25lIG5vdCBpbmxpbmVkLgorCisgICAgSW5zcGVjdG9yVGVzdC5zZW5k
Q29tbWFuZCgiRGVidWdnZXIuZW5hYmxlIiwge30pOworCisgICAgdmFyIGRmZ05vbklubGluZWRC
cmVha3BvaW50SWQgPSBudWxsOworICAgIHZhciBkZmdJbmxpbmVkQnJlYWtwb2ludElkID0gbnVs
bDsKKyAgICB2YXIgc2NyaXB0SWRlbnRpZmllciA9IDA7CisgICAgdmFyIHN0YXJ0TGluZSA9IDA7
CisKKyAgICBJbnNwZWN0b3JUZXN0LmV2ZW50SGFuZGxlclsiRGVidWdnZXIuc2NyaXB0UGFyc2Vk
Il0gPSBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKC9yZXNvdXJj
ZXNcL2JyZWFrcG9pbnRcLmpzJC8udGVzdChtZXNzYWdlT2JqZWN0LnBhcmFtcy51cmwpKSB7Cisg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiRm91bmQgYnJlYWtwb2ludC5qcyIpOworICAg
ICAgICAgICAgc2NyaXB0SWRlbnRpZmllciA9IG1lc3NhZ2VPYmplY3QucGFyYW1zLnNjcmlwdElk
OworICAgICAgICAgICAgc3RhcnRMaW5lID0gbWVzc2FnZU9iamVjdC5wYXJhbXMuc3RhcnRMaW5l
OworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1lLmV2YWx1
YXRlIiwgeworICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJkZmdXaXRob3V0SW5saW5lKCk7
IGRmZ1dpdGhJbmxpbmUoKTsiCisgICAgICAgICAgICB9LCBmdW5jdGlvbihyZXNwb25zZU9iamVj
dCkgeworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJkZmcgZnVuY3Rpb25zIHdh
cm1lZCB1cFxuIik7CisKKyAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24xID0ge3NjcmlwdElk
OiBzY3JpcHRJZGVudGlmaWVyLCBsaW5lTnVtYmVyOiAyMiwgY29sdW1uTnVtYmVyOiAwfTsKKwor
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2VuZENvbW1hbmQoIkRlYnVnZ2VyLnNldEJy
ZWFrcG9pbnQiLCB7bG9jYXRpb246IGxvY2F0aW9uMX0sIGZ1bmN0aW9uKHJlc3BvbnNlT2JqZWN0
KSB7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tGb3JFcnJvcihyZXNw
b25zZU9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVh
a3BvaW50IHNldCBpbiBub3RJbmxpbmVhYmxlKCkiKTsKKworICAgICAgICAgICAgICAgICAgICBk
ZmdOb25JbmxpbmVkQnJlYWtwb2ludElkID0gcmVzcG9uc2VPYmplY3QucmVzdWx0LmJyZWFrcG9p
bnRJZDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uMiA9IHtzY3JpcHRJZDogc2Ny
aXB0SWRlbnRpZmllciwgbGluZU51bWJlcjogMjgsIGNvbHVtbk51bWJlcjogMH07CisgICAgICAg
ICAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2VuZENvbW1hbmQoIkRlYnVnZ2VyLnNldEJyZWFr
cG9pbnQiLCB7bG9jYXRpb246IGxvY2F0aW9uMn0sIGZ1bmN0aW9uKHJlc3BvbnNlT2JqZWN0KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrRm9yRXJyb3IocmVz
cG9uc2VPYmplY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
IkJyZWFrcG9pbnQgc2V0IGluIGlubGluZWFibGUoKVxuIik7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRmZ0lubGluZWRCcmVha3BvaW50SWQgPSByZXNwb25zZU9iamVjdC5yZXN1bHQuYnJl
YWtwb2ludElkOworICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZW5kQ29t
bWFuZCgiUnVudGltZS5ldmFsdWF0ZSIsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHByZXNzaW9uOiAiZGZnV2l0aG91dElubGluZSgpOyBkZmdXaXRoSW5saW5lKCk7IgorICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2YXIg
YnJlYWtwb2ludHNIaXQgPSAwOworICAgIEluc3BlY3RvclRlc3QuZXZlbnRIYW5kbGVyWyJEZWJ1
Z2dlci5wYXVzZWQiXSA9IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCisgICAgeworICAgICAgICB2
YXIgYnJlYWtwb2ludElkID0gbnVsbDsKKyAgICAgICAgYnJlYWtwb2ludHNIaXQrKzsKKyAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIkhpdCBCcmVha3BvaW50ICIgKyBicmVha3BvaW50c0hpdCAr
ICIhIik7CisgICAgICAgIGlmIChicmVha3BvaW50c0hpdCA9PSAxKQorICAgICAgICAgICAgYnJl
YWtwb2ludElkID0gZGZnTm9uSW5saW5lZEJyZWFrcG9pbnRJZDsKKyAgICAgICAgZWxzZSBpZiAo
YnJlYWtwb2ludHNIaXQgPT0gMikKKyAgICAgICAgICAgIGJyZWFrcG9pbnRJZCA9IGRmZ0lubGlu
ZWRCcmVha3BvaW50SWQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCJVbmV4cGVjdGVkIGJyZWFrcG9pbnQiKTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LnNl
bmRDb21tYW5kKCJEZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50IiwgeyJicmVha3BvaW50SWQiOiBi
cmVha3BvaW50SWR9LCBmdW5jdGlvbihyZXNwb25zZU9iamVjdCkgeworICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIlJlbW92ZWQgQnJlYWtwb2ludCAiICsgYnJlYWtwb2ludHNIaXQgKyAi
ISIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiRGVidWdnZXIucmVz
dW1lIiwge30sIGZ1bmN0aW9uKHJlc3BvbnNlT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgaWYg
KGJyZWFrcG9pbnRzSGl0ID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5sb2coIlBBU1MiKTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0
ZVRlc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPkRlYnVnZ2VyLnNldEJy
ZWFrcG9pbnQgaW4gREZHIGNvbXBpbGVkIGZ1bmN0aW9ucy48L3A+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvcmVzb3VyY2Vz
L2JyZWFrcG9pbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3Rv
Y29sL2RlYnVnZ2VyL3Jlc291cmNlcy9icmVha3BvaW50LmpzCShyZXZpc2lvbiAxNjI4NjApCisr
KyBMYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvcmVzb3VyY2VzL2JyZWFr
cG9pbnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTE3LDMgKzE3LDQyIEBAIGZ1bmN0aW9uIGJyZWFr
cG9pbnRBY3Rpb25zKGEsIGIpCiB7CiAgICAgbG9nKCJpbnNpZGUgYnJlYWtwb2ludEFjdGlvbnMg
YTooIiArIGEgKyAiKSBiOigiICsgYiArICIpIik7CiB9CisKK2Z1bmN0aW9uIG5vdElubGluZWFi
bGUoeCkKK3sKKyAgICB2YXIgZnVuYyA9IG5ldyBGdW5jdGlvbigicmV0dXJuIHggKyAxMDA7Iik7
CisgICAgcmV0dXJuIHggKyAzOworfQorCitmdW5jdGlvbiBpbmxpbmVhYmxlKHgpCit7CisgICAg
cmV0dXJuIHggKyA1OworfQorCitmdW5jdGlvbiBub3RJbmxpbmluZ0Zvbyh4KQoreworICAgIHJl
dHVybiBub3RJbmxpbmVhYmxlKHgpOworfQorCitmdW5jdGlvbiBpbmxpbmluZ0Zvbyh4KQorewor
ICAgIHJldHVybiBpbmxpbmVhYmxlKHgpOworfQorCitmdW5jdGlvbiBkZmdXaXRob3V0SW5saW5l
KCkKK3sKKyAgICB2YXIgaTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBp
IDwgMTAwMDsgaSsrKQorICAgICAgICByZXN1bHQgKz0gbm90SW5saW5pbmdGb28oaSk7CisgICAg
bG9nKCJkZmdXaXRob3V0SW5saW5lIHJlc3VsdDogIiArIHJlc3VsdCk7ICAgIAorfQorCitmdW5j
dGlvbiBkZmdXaXRoSW5saW5lKCkKK3sKKyAgICB2YXIgaTsKKyAgICB2YXIgcmVzdWx0ID0gMDsK
KyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICByZXN1bHQgKz0gaW5saW5p
bmdGb28oaSk7CisgICAgbG9nKCJkZmdXaXRoSW5saW5lIHJlc3VsdDogIiArIHJlc3VsdCk7ICAg
IAorfQo=
</data>
<flag name="review"
          id="246416"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>