<?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>145138</bug_id>
          
          <creation_ts>2015-05-18 14:06:21 -0700</creation_ts>
          <short_desc>ES6: Should not allow duplicate basic __proto__ properties in Object Literals</short_desc>
          <delta_ts>2020-08-25 08:51:56 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>215760</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1095672</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-05-18 14:06:21 -0700</bug_when>
    <thetext>* SUMMARY
Should not allow duplicate basic __proto__ properties in Object Literals.

* SPEC
ES6 Annex B.3.1 &lt;https://people.mozilla.org/~jorendorff/es6-draft.html#sec-__proto__-property-names-in-object-initializers&gt;

&gt; It is a Syntax Error if PropertyNameList of PropertyDefinitionList contains any duplicate entries
&gt; for &quot;__proto__&quot; and at least two of those entries were obtained from productions of the form
&gt; 
&gt;     PropertyDefinition : PropertyName : AssignmentExpression .
&gt;
&gt; NOTE: The List returned by PropertyNameList does not include string literal property names defined
&gt; as using a ComputedPropertyName.

Note that shorthand property names ({__proto__}), computed properties ({[&quot;__proto__&quot;]:{}}), and getter/setter ({get __proto__(){}}) are ignored for the purposes of this duplicate check. Those don&apos;t affect the prototype chain anyways, they are just properties set directly on the object.

* STEPS TO REPRODUCE
1. js&gt; ({__proto__:null, __proto__:null})
  =&gt; should throw a SyntaxError, does not.

* NOTES
- Other browsers behave correctly here.

  Chrome:
  js&gt; o = {__proto__:null, __proto__:null}
  Uncaught SyntaxError: Duplicate __proto__ fields are not allowed in object literals

  Firefox:
  js&gt; o = {__proto__:null, __proto__:null}
  SyntaxError: property name __proto__ appears more than once in object literal

  Safari:
  js&gt; o = {__proto__:null, __proto__:null}
  Object

- This is covered by the ES6 Compat Table:
&lt;https://kangax.github.io/compat-table/es6/#__proto___in_object_literals_multiple___proto___is_an_error&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095786</commentid>
    <comment_count>1</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-05-18 18:56:11 -0700</bug_when>
    <thetext>Interesting! I have this working for everything except eval:

    eval(&quot;({ __proto__:[], __proto__:{} })&quot;)

Which actually exposes a separate issue.

In the eval, JavaScriptCore goes through the LiteralParser::tryLiteralParse, similar to a JSON.parse(). In the LiteralParser, __proto__ is treated as a direct property, not a prototype changing put.

So there is a second bug here that needs to get fixed:

  js&gt; eval(&quot;({__proto__:[]})&quot;) instanceof Array
    =&gt; should be true (Chrome, Firefox), but is false (Safari)

We correctly handle the JSON.parse case:

  js&gt; JSON.parse(&quot;({__proto__:[]})&quot;) instanceof Array
    =&gt; false (Safari, Chrome, Firefox)

I don&apos;t know what kind of performance impact we might see from removing the LiteralParser optimization for eval, so I&apos;ll look at just bailing if we see a __proto__ in eval LiteralParsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095808</commentid>
    <comment_count>2</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-05-18 20:53:35 -0700</bug_when>
    <thetext>Further investigation exposes another bizarre compatibility issue:

----

    1. Strict JSON object literal in eval
    2. Non-Strict JSON object literal in eval
    3. Strict JSON object literal 
    4. Non-Strict JSON object literal

Firefox:

    js&gt; eval(&apos;({&quot;__proto__&quot;:[]})&apos;) instanceof Array
    false
    js&gt; eval(&apos;({__proto__:[]})&apos;) instanceof Array
    true
    js&gt; ({&quot;__proto__&quot;:[]}) instanceof Array
    true
    js&gt; ({__proto__:[]}) instanceof Array
    true

Chrome: 

    js&gt; eval(&apos;({&quot;__proto__&quot;:[]})&apos;) instanceof Array
    true
    js&gt; eval(&apos;({__proto__:[]})&apos;) instanceof Array
    true
    js&gt; ({&quot;__proto__&quot;:[]}) instanceof Array
    true
    js&gt; ({__proto__:[]}) instanceof Array
    true

Safari: (before fix)

    js&gt; eval(&apos;({&quot;__proto__&quot;:[]})&apos;) instanceof Array
    false
    js&gt; eval(&apos;({__proto__:[]})&apos;) instanceof Array
    false
    js&gt; ({&quot;__proto__&quot;:[]}) instanceof Array
    true
    js&gt; ({__proto__:[]}) instanceof Array
    true

----

Based on the ES6 spec, I expect these all to return true. The object literal syntax always satisfies the case where we should change the object&apos;s prototype.

Unfortunately this changes the behavior of the legacy json2-es5-compat pre-native-JSON parsing of JSON with __proto__ properties. The old JSON2 library relied on `eval` to implement JSON.parse. Since eval now actually sets the prototype, and JSON.parse was just setting a direct property I&apos;m seeing some failures on the js/dom/JSON-parse.html test due to json2-es5-compat.

Firefox&apos;s special case here is interesting, because for eval with strict JSON (quoted property names) it gets the old behavior of not modifying the prototype.

However, my opinion would be to not worry about the legacy case. Browsers have had native JSON objects for quite a while now. Using JSON.parse instead of eval will always get you consistent behavior, and should be what we recommend. Also, I would suspect __proto__ in JSON is rare.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095818</commentid>
    <comment_count>3</comment_count>
      <attachid>253363</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-05-18 21:26:54 -0700</bug_when>
    <thetext>Created attachment 253363
[PATCH] Proposed Fix

Some further improvements to look into:

  1. Investigate eliminating the LiteralParser path for eval?
    - eval(&quot;...&quot;) of JSON/JSONP input gets a special parser. It is easy to miss runtime semantic changes (like this).
    - How much of a benefit is it?
  2. Investigate eliminating the parseStrictObjectLiteral / parseObjectLiteral difference.
    - So far as I can see the difference is purely whether or not we build strings while parsing.
    - How much of a benefit is it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096158</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-05-19 21:38:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/21032823&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096268</commentid>
    <comment_count>5</comment_count>
      <attachid>253363</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-20 09:54:19 -0700</bug_when>
    <thetext>Comment on attachment 253363
[PATCH] Proposed Fix

Clearing flags on attachment: 253363

Committed r184640: &lt;http://trac.webkit.org/changeset/184640&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096269</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-20 09:54:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096299</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-05-20 11:19:07 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 253363 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; Clearing flags on attachment: 253363
&gt; 
&gt; Committed r184640: &lt;http://trac.webkit.org/changeset/184640&gt;

It made a jsc test fail, please fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096303</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-05-20 11:29:37 -0700</bug_when>
    <thetext>This caused a JSC test failure. Only one:

FAIL: jsc-layout-tests.yaml/js/script-tests/object-literal-duplicate-properties.js.layout-no-llint

With issues like:

jsc-layout-tests.yaml/js/script-tests/object-literal-duplicate-properties.js.layout-no-llint: -PASS (function(){({__proto__:[], __proto__:{}})})() threw exception SyntaxError: Attempted to redefine __proto__ property..
jsc-layout-tests.yaml/js/script-tests/object-literal-duplicate-properties.js.layout-no-llint: +PASS (function(){({__proto__:[], __proto__:{}})})() threw exception RangeError: Maximum call stack size exceeded..

Curious. Also why only &quot;no-llint&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096312</commentid>
    <comment_count>9</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-05-20 12:16:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; This caused a JSC test failure. Only one:
&gt; 
&gt; FAIL:
&gt; jsc-layout-tests.yaml/js/script-tests/object-literal-duplicate-properties.js.
&gt; layout-no-llint
&gt; 
&gt; With issues like:
&gt; 
&gt; jsc-layout-tests.yaml/js/script-tests/object-literal-duplicate-properties.js.
&gt; layout-no-llint: -PASS (function(){({__proto__:[], __proto__:{}})})() threw
&gt; exception SyntaxError: Attempted to redefine __proto__ property..
&gt; jsc-layout-tests.yaml/js/script-tests/object-literal-duplicate-properties.js.
&gt; layout-no-llint: +PASS (function(){({__proto__:[], __proto__:{}})})() threw
&gt; exception RangeError: Maximum call stack size exceeded..
&gt; 
&gt; Curious. Also why only &quot;no-llint&quot;?

Reproduced with:
shell&gt; DYLD_FRAMEWORK_PATH=$build/Debug JSC_useLLInt=0 $build/Debug/jsc LayoutTests/resources/standalone-pre.js LayoutTests/js/script-tests/object-literal-duplicate-properties.js LayoutTests/resources/standalone-post.js

Looks like the issue comes from:

(lldb) bt
* thread #1: tid = 0x44b1c9, 0x000000010ce82737 JavaScriptCore`JSC::createStackOverflowError(exec=0x00007fff5322f180) + 23 at ExceptionHelpers.cpp:75, queue = &apos;com.apple.main-thread&apos;, stop reason = breakpoint 1.1
  * frame #0: 0x000000010ce82737 JavaScriptCore`JSC::createStackOverflowError(exec=0x00007fff5322f180) + 23 at ExceptionHelpers.cpp:75
    frame #1: 0x000000010ce839a2 JavaScriptCore`JSC::throwStackOverflowError(exec=0x00007fff5322f180) + 66 at ExceptionHelpers.cpp:291
    frame #2: 0x000000010d07b33e JavaScriptCore`::linkFor(execCallee=0x00007fff5322f130, callLinkInfo=0x0000000111eca120, kind=CodeForCall, registers=RegisterPreservationNotRequired) + 574 at JITOperations.cpp:749
    frame #3: 0x000000010d075946 JavaScriptCore`::operationLinkCall(execCallee=0x00007fff5322f130, callLinkInfo=0x0000000111eca120) + 38 at JITOperations.cpp:770
...

With:

frame #2: 0x000000010d07b33e JavaScriptCore`::linkFor(execCallee=0x00007fff5322f130, callLinkInfo=0x0000000111eca120, kind=CodeForCall, registers=RegisterPreservationNotRequired) + 574 at JITOperations.cpp:749
   746 	
   747 	        JSObject* error = functionExecutable-&gt;prepareForExecution(execCallee, callee, scope, kind);
   748 	        if (error) {
-&gt; 749 	            throwStackOverflowError(exec);
   750 	            return reinterpret_cast&lt;char*&gt;(vm-&gt;getCTIStub(throwExceptionFromCallSlowPathGenerator).code().executableAddress());
   751 	        }
   752 	        codeBlock = functionExecutable-&gt;codeBlockFor(kind);

If this throws the &quot;error&quot; instead forcing a throwStackOverflowError, then it behaves correctly. Checking if there is any other fallout from this change (which should undergo review).

If there is fallout, I&apos;ll separate out this portion of the test and skip it so the bots return to green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096319</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-05-20 12:36:51 -0700</bug_when>
    <thetext>I addressed the test issue in bug 145219:
&lt;http://trac.webkit.org/changeset/184647&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253363</attachid>
            <date>2015-05-18 21:26:54 -0700</date>
            <delta_ts>2015-05-20 09:54:19 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>here-we-go.patch</filename>
            <type>text/plain</type>
            <size>25929</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmNjU1M2I2Li5iYTllNmI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTUtMDUt
MTggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBFUzY6
IFNob3VsZCBub3QgYWxsb3cgZHVwbGljYXRlIGJhc2ljIF9fcHJvdG9fXyBwcm9wZXJ0aWVzIGlu
IE9iamVjdCBMaXRlcmFscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ1MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBqcy9kb20vSlNPTi1wYXJzZS1leHBlY3RlZC50eHQ6CisgICAgICAgICoganMv
cmVzb3VyY2VzL0pTT04tcGFyc2UuanM6CisgICAgICAgIFVwZGF0ZSBleHBlY3RlZCByZXN1bHRz
IGZvciBKU09OIHBhcnNpbmcgdXNpbmcgZXZhbCgpIHZlcnN1cyBKU09OLnBhcnNlLgorICAgICAg
ICBJbiBldmFsLCBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGEgIl9fcHJvdG9fXyIgcHJvcGVydHkg
bW9kaWZpZXMgdGhlIHByb3RvdHlwZS4KKyAgICAgICAgSW4gSlNPTi5wYXJzZSwgYWxsIHByb3Bl
cnRpZXMgYXJlIGRpcmVjdC9vd24gcHJvcGVydGllcywgbm8gbWF0dGVyIHRoZWlyIG5hbWUsCisg
ICAgICAgIHNvICJfX3Byb3RvX18iIGRvZXMgbm90IGdldCBzcGVjaWFsIHRyZWF0bWVudC4KKwor
ICAgICAgICAqIGpzL2V2YWwtanNvbi1wcm90by1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL2V2YWwtanNvbi1wcm90by5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9zY3JpcHQt
dGVzdHMvZXZhbC1qc29uLXByb3RvLmpzOiBBZGRlZC4KKyAgICAgICAgRGlyZWN0IHRlc3QgZm9y
IExpdGVyYWxQYXJzZXIgYmVoYXZpb3IsIGluIGJvdGggZXZhbCBhbmQgSlNPTi5wYXJzZS4KKwor
ICAgICAgICAqIGpzL29iamVjdC1saXRlcmFsLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvb2JqZWN0LWxpdGVyYWwtZHVwbGljYXRl
LXByb3BlcnRpZXMuanM6CisgICAgICAgIChydW5Qcm90b1Rlc3RTaG91bGRUaHJvdyk6CisgICAg
ICAgIChydW5Qcm90b1Rlc3RTaG91bGROb3RUaHJvdyk6CisgICAgICAgIFRlc3QgZm9yIGFsbCBj
YXNlcyBvZiBhY2NlcHRhYmxlIGFuZCB1bmFjY2VwdGFibGUgX19wcm90b19fIGR1cGxpY2F0ZQor
ICAgICAgICBwcm9wZXJ0aWVzIGluIGxpdGVyYWxzLgorCiAyMDE1LTA1LTE3ICBCZW5qYW1pbiBQ
b3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbSlNDXSBNYWtlIFN0cmlu
Z1JlY3Vyc2lvbkNoZWNrZXIgZmFzdGVyIGluIHRoZSBzaW1wbGUgY2FzZXMgd2l0aG91dCBhbnkg
cmVjdXJzaW9uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vSlNPTi1wYXJzZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9kb20vSlNPTi1wYXJzZS1leHBlY3RlZC50eHQKaW5k
ZXggMmU0YjZkNC4uYzgxMTljYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvZG9tL0pTT04t
cGFyc2UtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2pzL2RvbS9KU09OLXBhcnNlLWV4
cGVjdGVkLnR4dApAQCAtNjksNyArNjksMTAgQEAgUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tp
XShuYXRpdmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCiBmdW5jdGlv
biAoanNvbk9iamVjdCl7CiAgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7Il9fcHJv
dG9fXyI6NX0nKTsKICAgICB9Ci1QQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpT
T04pKSBpcyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK2pzb24yLmpzIHVzZXMgZXZh
bCBhbmQgd2lsbCBkaWZmZXIgd2hlbiBwYXJzaW5nIEpTT04gd2l0aCBfX3Byb3RvX18uCitQQVNT
IEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKSBpcyBub3QgSlNPTi5zdHJpbmdp
ZnkodGVzdHNbaV0oSlNPTikpCitQQVNTIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpT
T04pKSBpcyB0ZXN0c1tpXS5qc29uUGFyc2VFeHBlY3RlZAorUEFTUyBKU09OLnN0cmluZ2lmeSh0
ZXN0c1tpXShKU09OKSkgaXMgdGVzdHNbaV0uZXZhbEV4cGVjdGVkCiBmdW5jdGlvbiAoanNvbk9i
amVjdCl7CiAgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7ImEiOjUsfScpOwogICAg
IH0KQEAgLTQ0Myw3ICs0NDYsMTAgQEAgUEFTUyBKU09OLnN0cmluZ2lmeSh0ZXN0c1tpXShuYXRp
dmVKU09OKSkgaXMgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpCiBmdW5jdGlvbiAoanNv
bk9iamVjdCl7CiAgICAgICAgIHJldHVybiBqc29uT2JqZWN0LnBhcnNlKCd7Il9fcHJvdG9fXyI6
eyJhIjo1fX0nLCBsb2cpOwogICAgIH0KLVBBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0
aXZlSlNPTikpIGlzIEpTT04uc3RyaW5naWZ5KHRlc3RzW2ldKEpTT04pKQoranNvbjIuanMgdXNl
cyBldmFsIGFuZCB3aWxsIGRpZmZlciB3aGVuIHBhcnNpbmcgSlNPTiB3aXRoIF9fcHJvdG9fXy4K
K1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpIGlzIG5vdCBKU09OLnN0
cmluZ2lmeSh0ZXN0c1tpXShKU09OKSkKK1BBU1MgSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0
aXZlSlNPTikpIGlzIHRlc3RzW2ldLmpzb25QYXJzZUV4cGVjdGVkCitQQVNTIEpTT04uc3RyaW5n
aWZ5KHRlc3RzW2ldKEpTT04pKSBpcyB0ZXN0c1tpXS5ldmFsRXhwZWN0ZWQKIGZ1bmN0aW9uIChq
c29uT2JqZWN0KXsKICAgICAgICAgbG9nT3JkZXJTdHJpbmcgPSAiIjsKICAgICAgICAgcmV0dXJu
IGpzb25PYmplY3QucGFyc2UoInRydWUiLCBsb2dPcmRlcik7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9qcy9ldmFsLWpzb24tcHJvdG8tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvZXZh
bC1qc29uLXByb3RvLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xMzQ0MTA1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvZXZhbC1qc29u
LXByb3RvLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUaGlzIHRlc3QgY2FzZSBjaGVj
a3MgZGlmZmVyZW50IEpTT04gbGl0ZXJhbCBjb25zdHJ1Y3Rpb25zIGFuZCBlbnN1cmVzIHRoZXkg
aGFuZGxlIF9fcHJvdG9fXyBhcyBleHBlY3RlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgKHtfX3Byb3RvX186W119KSBpbnN0YW5jZW9mIEFycmF5IGlzIHRydWUKK1BB
U1MgZXZhbFJlc3VsdCBpbnN0YW5jZW9mIEFycmF5IGlzIHRydWUKK1BBU1MganNvblBhcnNlUmVz
dWx0IGluc3RhbmNlb2YgQXJyYXkgaXMgZmFsc2UKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9ldmFs
LWpzb24tcHJvdG8uaHRtbCBiL0xheW91dFRlc3RzL2pzL2V2YWwtanNvbi1wcm90by5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMjA0MGYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9qcy9ldmFsLWpzb24tcHJvdG8uaHRtbApAQCAtMCwwICsxLDEwIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZXZhbC1qc29u
LXByb3RvLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2pzL29iamVjdC1saXRlcmFsLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2pzL29iamVjdC1saXRlcmFsLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzLWV4cGVj
dGVkLnR4dAppbmRleCBlMDdmMjczLi5iYTE0MzY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9q
cy9vYmplY3QtbGl0ZXJhbC1kdXBsaWNhdGUtcHJvcGVydGllcy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvanMvb2JqZWN0LWxpdGVyYWwtZHVwbGljYXRlLXByb3BlcnRpZXMtZXhwZWN0
ZWQudHh0CkBAIC0yMDUsNiArMjA1LDM4IEBAIFBBU1MgKGZ1bmN0aW9uKCl7byA9IHtzZXQgZm9v
KHgpe30sIGZvbzoxLCBnZXQgZm9vKCl7cmV0dXJuIDJ9LCBbJ2ZvbyddOjN9OyBkZXNjCiBQQVNT
IG8gPSB7Z2V0IGZvbygpe3JldHVybiAyfSwgZ2V0IGZvbygpe3JldHVybiAyfSwgWydmb28nXToz
LCBmb286MX07IGRlc2NyaXB0aW9uU3RyaW5nKG8sICdmb28nKTsgaXMgJ3ZhbHVlOjEga2V5czox
IFtFQ1ddW0V4dGVuc2libGVdJwogUEFTUyAndXNlIHN0cmljdCc7byA9IHtnZXQgZm9vKCl7cmV0
dXJuIDJ9LCBnZXQgZm9vKCl7cmV0dXJuIDJ9LCBbJ2ZvbyddOjMsIGZvbzoxfTsgZGVzY3JpcHRp
b25TdHJpbmcobywgJ2ZvbycpOyBpcyAndmFsdWU6MSBrZXlzOjEgW0VDV11bRXh0ZW5zaWJsZV0n
CiBQQVNTIChmdW5jdGlvbigpe28gPSB7Z2V0IGZvbygpe3JldHVybiAyfSwgZ2V0IGZvbygpe3Jl
dHVybiAyfSwgWydmb28nXTozLCBmb286MX07IGRlc2NyaXB0aW9uU3RyaW5nKG8sICdmb28nKTt9
KSgpIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorCitEdXBsaWNhdGUgc2ltcGxlIF9fcHJvdG9f
XyBhdHRyaWJ1dGVzIGFyZSBub3QgYWxsb3dlZAorUEFTUyBvID0ge19fcHJvdG9fXzpudWxsfSBk
aWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgJ3VzZSBzdHJpY3QnO28gPSB7X19wcm90b19f
Om51bGx9IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyAoZnVuY3Rpb24oKXtvID0ge19f
cHJvdG9fXzpudWxsfX0pKCkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTICh7X19wcm90
b19fOm51bGwsIFsnX19wcm90b19fJ106e319KSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BB
U1MgJ3VzZSBzdHJpY3QnOyh7X19wcm90b19fOm51bGwsIFsnX19wcm90b19fJ106e319KSBkaWQg
bm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgKGZ1bmN0aW9uKCl7KHtfX3Byb3RvX186bnVsbCwg
WydfX3Byb3RvX18nXTp7fX0pfSkoKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgbyA9
IHtfX3Byb3RvX186bnVsbCwgWydfX3Byb3RvX18nXTp7fX0gZGlkIG5vdCB0aHJvdyBleGNlcHRp
b24uCitQQVNTICd1c2Ugc3RyaWN0JztvID0ge19fcHJvdG9fXzpudWxsLCBbJ19fcHJvdG9fXydd
Ont9fSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgKGZ1bmN0aW9uKCl7byA9IHtfX3By
b3RvX186bnVsbCwgWydfX3Byb3RvX18nXTp7fX19KSgpIGRpZCBub3QgdGhyb3cgZXhjZXB0aW9u
LgorUEFTUyBvID0ge19fcHJvdG9fXzpudWxsLCBnZXQgX19wcm90b19fKCl7fX0gZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCitQQVNTICd1c2Ugc3RyaWN0JztvID0ge19fcHJvdG9fXzpudWxsLCBn
ZXQgX19wcm90b19fKCl7fX0gZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIChmdW5jdGlv
bigpe28gPSB7X19wcm90b19fOm51bGwsIGdldCBfX3Byb3RvX18oKXt9fX0pKCkgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCitQQVNTIHZhciBfX3Byb3RvX18gPSBudWxsOyBvID0ge19fcHJvdG9f
XzpudWxsLCBfX3Byb3RvX199IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyAndXNlIHN0
cmljdCc7dmFyIF9fcHJvdG9fXyA9IG51bGw7IG8gPSB7X19wcm90b19fOm51bGwsIF9fcHJvdG9f
X30gZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIChmdW5jdGlvbigpe3ZhciBfX3Byb3Rv
X18gPSBudWxsOyBvID0ge19fcHJvdG9fXzpudWxsLCBfX3Byb3RvX199fSkoKSBkaWQgbm90IHRo
cm93IGV4Y2VwdGlvbi4KK1BBU1MgKHtfX3Byb3RvX186W10sIF9fcHJvdG9fXzp7fX0pIHRocmV3
IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogQXR0ZW1wdGVkIHRvIHJlZGVmaW5lIF9fcHJvdG9fXyBw
cm9wZXJ0eS4uCitQQVNTICd1c2Ugc3RyaWN0Jzsoe19fcHJvdG9fXzpbXSwgX19wcm90b19fOnt9
fSkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBBdHRlbXB0ZWQgdG8gcmVkZWZpbmUgX19w
cm90b19fIHByb3BlcnR5Li4KK1BBU1MgKGZ1bmN0aW9uKCl7KHtfX3Byb3RvX186W10sIF9fcHJv
dG9fXzp7fX0pfSkoKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IEF0dGVtcHRlZCB0byBy
ZWRlZmluZSBfX3Byb3RvX18gcHJvcGVydHkuLgorUEFTUyBvID0ge19fcHJvdG9fXzpudWxsLCAn
X19wcm90b19fJzp7fX0gdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBBdHRlbXB0ZWQgdG8g
cmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5Li4KK1BBU1MgJ3VzZSBzdHJpY3QnO28gPSB7X19w
cm90b19fOm51bGwsICdfX3Byb3RvX18nOnt9fSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6
IEF0dGVtcHRlZCB0byByZWRlZmluZSBfX3Byb3RvX18gcHJvcGVydHkuLgorUEFTUyAoZnVuY3Rp
b24oKXtvID0ge19fcHJvdG9fXzpudWxsLCAnX19wcm90b19fJzp7fX19KSgpIHRocmV3IGV4Y2Vw
dGlvbiBTeW50YXhFcnJvcjogQXR0ZW1wdGVkIHRvIHJlZGVmaW5lIF9fcHJvdG9fXyBwcm9wZXJ0
eS4uCitQQVNTIG8gPSB7X19wcm90b19fOltdLCBfX3Byb3RvX186e319IHRocmV3IGV4Y2VwdGlv
biBTeW50YXhFcnJvcjogQXR0ZW1wdGVkIHRvIHJlZGVmaW5lIF9fcHJvdG9fXyBwcm9wZXJ0eS4u
CitQQVNTICd1c2Ugc3RyaWN0JztvID0ge19fcHJvdG9fXzpbXSwgX19wcm90b19fOnt9fSB0aHJl
dyBleGNlcHRpb24gU3ludGF4RXJyb3I6IEF0dGVtcHRlZCB0byByZWRlZmluZSBfX3Byb3RvX18g
cHJvcGVydHkuLgorUEFTUyAoZnVuY3Rpb24oKXtvID0ge19fcHJvdG9fXzpbXSwgX19wcm90b19f
Ont9fX0pKCkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBBdHRlbXB0ZWQgdG8gcmVkZWZp
bmUgX19wcm90b19fIHByb3BlcnR5Li4KK1BBU1MgbyA9IHsnX19wcm90b19fJzp7fSwgJ19fcHJv
dG9fXyc6e319IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogQXR0ZW1wdGVkIHRvIHJlZGVm
aW5lIF9fcHJvdG9fXyBwcm9wZXJ0eS4uCitQQVNTICd1c2Ugc3RyaWN0JztvID0geydfX3Byb3Rv
X18nOnt9LCAnX19wcm90b19fJzp7fX0gdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBBdHRl
bXB0ZWQgdG8gcmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5Li4KK1BBU1MgKGZ1bmN0aW9uKCl7
byA9IHsnX19wcm90b19fJzp7fSwgJ19fcHJvdG9fXyc6e319fSkoKSB0aHJldyBleGNlcHRpb24g
U3ludGF4RXJyb3I6IEF0dGVtcHRlZCB0byByZWRlZmluZSBfX3Byb3RvX18gcHJvcGVydHkuLgor
UEFTUyBvID0ge2E6MSwgX19wcm90b19fOnt9LCBiOjIsIFsnYyddOjMsIF9fcHJvdG9fXzp7fSwg
ZDozfSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IEF0dGVtcHRlZCB0byByZWRlZmluZSBf
X3Byb3RvX18gcHJvcGVydHkuLgorUEFTUyAndXNlIHN0cmljdCc7byA9IHthOjEsIF9fcHJvdG9f
Xzp7fSwgYjoyLCBbJ2MnXTozLCBfX3Byb3RvX186e30sIGQ6M30gdGhyZXcgZXhjZXB0aW9uIFN5
bnRheEVycm9yOiBBdHRlbXB0ZWQgdG8gcmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5Li4KK1BB
U1MgKGZ1bmN0aW9uKCl7byA9IHthOjEsIF9fcHJvdG9fXzp7fSwgYjoyLCBbJ2MnXTozLCBfX3By
b3RvX186e30sIGQ6M319KSgpIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogQXR0ZW1wdGVk
IHRvIHJlZGVmaW5lIF9fcHJvdG9fXyBwcm9wZXJ0eS4uCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3Jl
c291cmNlcy9KU09OLXBhcnNlLmpzIGIvTGF5b3V0VGVzdHMvanMvcmVzb3VyY2VzL0pTT04tcGFy
c2UuanMKaW5kZXggMDAyOGE1Zi4uYjUzMjcyYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMv
cmVzb3VyY2VzL0pTT04tcGFyc2UuanMKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVzb3VyY2VzL0pT
T04tcGFyc2UuanMKQEAgLTY3LDYgKzY3LDggQEAgZnVuY3Rpb24gY3JlYXRlVGVzdHMoKSB7CiAg
ICAgcmVzdWx0LnB1c2goZnVuY3Rpb24oanNvbk9iamVjdCl7CiAgICAgICAgIHJldHVybiBqc29u
T2JqZWN0LnBhcnNlKCd7Il9fcHJvdG9fXyI6NX0nKTsKICAgICB9KTsKKyAgICByZXN1bHRbcmVz
dWx0Lmxlbmd0aCAtIDFdLmpzb25QYXJzZUV4cGVjdGVkID0gJ3siX19wcm90b19fIjo1fSc7Cisg
ICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5ldmFsRXhwZWN0ZWQgPSAne30nOwogICAgIHJl
c3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpewogICAgICAgICByZXR1cm4ganNvbk9iamVj
dC5wYXJzZSgneyJhIjo1LH0nKTsKICAgICB9KTsKQEAgLTQwMyw2ICs0MDUsOCBAQCBmdW5jdGlv
biBjcmVhdGVUZXN0cygpIHsKICAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsK
ICAgICAgICAgcmV0dXJuIGpzb25PYmplY3QucGFyc2UoJ3siX19wcm90b19fIjp7ImEiOjV9fScs
IGxvZyk7CiAgICAgfSk7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5qc29uUGFyc2VF
eHBlY3RlZCA9ICd7IiI6eyJfX3Byb3RvX18iOnsia2V5VHlwZSI6InN0cmluZyJ9fSwia2V5VHlw
ZSI6InN0cmluZyJ9JzsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLmV2YWxFeHBlY3Rl
ZCA9ICd7IiI6e30sImtleVR5cGUiOiJzdHJpbmcifSc7CiAgICAgdmFyIGxvZ09yZGVyU3RyaW5n
OwogICAgIGZ1bmN0aW9uIGxvZ09yZGVyKGtleSwgdmFsdWUpIHsKICAgICAgICAgbG9nT3JkZXJT
dHJpbmcgKz0ga2V5ICsiOiIrSlNPTi5zdHJpbmdpZnkodmFsdWUpOwpAQCAtNTY3LDcgKzU3MSwx
MiBAQCBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAg
ICB0cnkgeyBzaG91bGRCZSgnSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0obmF0aXZlSlNPTikpJywg
ICJ0ZXN0c1tpXS5leHBlY3RlZCIpIH0gY2F0Y2goZSkgeyBkZWJ1ZygidGhyZXcgLSAiICsgZSl9
CiAgICAgICAgIGVsc2UgaWYgKHRlc3RzW2ldLnVuc3RyaW5naWZpZWRFeHBlY3RlZCkKICAgICAg
ICAgICAgIHRyeSB7IHNob3VsZEJlKCd0ZXN0c1tpXShuYXRpdmVKU09OKScsICAidGVzdHNbaV0u
dW5zdHJpbmdpZmllZEV4cGVjdGVkIikgfSBjYXRjaChlKSB7IGRlYnVnKCJ0aHJldyAtICIgKyBl
KX0KLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIGlmICh0ZXN0c1tpXS5ldmFsRXhwZWN0ZWQp
IHsKKyAgICAgICAgICAgIGRlYnVnKCJqc29uMi5qcyB1c2VzIGV2YWwgYW5kIHdpbGwgZGlmZmVy
IHdoZW4gcGFyc2luZyBKU09OIHdpdGggX19wcm90b19fLiIpOworICAgICAgICAgICAgdHJ5IHsg
c2hvdWxkTm90QmUoJ0pTT04uc3RyaW5naWZ5KHRlc3RzW2ldKG5hdGl2ZUpTT04pKScsICAnSlNP
Ti5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpJykgfSBjYXRjaChlKSB7IGRlYnVnKCJ0aHJldyAt
ICIgKyBlKSB9OworICAgICAgICAgICAgdHJ5IHsgc2hvdWxkQmUoJ0pTT04uc3RyaW5naWZ5KHRl
c3RzW2ldKG5hdGl2ZUpTT04pKScsICAndGVzdHNbaV0uanNvblBhcnNlRXhwZWN0ZWQnKSB9IGNh
dGNoKGUpIHsgZGVidWcoInRocmV3IC0gIiArIGUpIH07CisgICAgICAgICAgICB0cnkgeyBzaG91
bGRCZSgnSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpJywgICd0ZXN0c1tpXS5ldmFsRXhw
ZWN0ZWQnKSB9IGNhdGNoKGUpIHsgZGVidWcoInRocmV3IC0gIiArIGUpIH07CisgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgdHJ5IHsgc2hvdWxkQmUoJ0pTT04uc3RyaW5naWZ5KHRlc3RzW2ld
KG5hdGl2ZUpTT04pKScsICAnSlNPTi5zdHJpbmdpZnkodGVzdHNbaV0oSlNPTikpJykgfSBjYXRj
aChlKSB7IGRlYnVnKCJ0aHJldyAtICIgKyBlKSB9OwogICAgIH1jYXRjaChlKXsKICAgICAgICAg
ZGVidWcoZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXZhbC1q
c29uLXByb3RvLmpzIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2V2YWwtanNvbi1wcm90
by5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWI5MDQ5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2V2YWwtanNvbi1wcm90by5q
cwpAQCAtMCwwICsxLDkgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgY2FzZSBjaGVja3MgZGlm
ZmVyZW50IEpTT04gbGl0ZXJhbCBjb25zdHJ1Y3Rpb25zIGFuZCBlbnN1cmVzIHRoZXkgaGFuZGxl
IF9fcHJvdG9fXyBhcyBleHBlY3RlZC4iKTsKKworc2hvdWxkQmVUcnVlKCIoe19fcHJvdG9fXzpb
XX0pIGluc3RhbmNlb2YgQXJyYXkiKTsKKworZXZhbFJlc3VsdCA9IGV2YWwoIih7X19wcm90b19f
OltdfSkiKTsKK3Nob3VsZEJlVHJ1ZSgiZXZhbFJlc3VsdCBpbnN0YW5jZW9mIEFycmF5Iik7CisK
K2pzb25QYXJzZVJlc3VsdCA9IEpTT04ucGFyc2UoJ3siX19wcm90b19fIjpbXX0nKTsKK3Nob3Vs
ZEJlRmFsc2UoImpzb25QYXJzZVJlc3VsdCBpbnN0YW5jZW9mIEFycmF5Iik7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvb2JqZWN0LWxpdGVyYWwtZHVwbGljYXRlLXBy
b3BlcnRpZXMuanMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvb2JqZWN0LWxpdGVyYWwt
ZHVwbGljYXRlLXByb3BlcnRpZXMuanMKaW5kZXggOWFhYmMxOS4uOTk5YzczYSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL29iamVjdC1saXRlcmFsLWR1cGxpY2F0ZS1w
cm9wZXJ0aWVzLmpzCisrKyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9vYmplY3QtbGl0
ZXJhbC1kdXBsaWNhdGUtcHJvcGVydGllcy5qcwpAQCAtMTgyLDMgKzE4MiwyNyBAQCBydW5UZXN0
KCJvID0ge2dldCBmb28oKXtyZXR1cm4gMn0sIFsnZm9vJ106MywgZ2V0IGZvbygpe3JldHVybiAy
fSwgZm9vOjF9IiwgIid2YQogcnVuVGVzdCgibyA9IHtzZXQgZm9vKHgpe30sIFsnZm9vJ106Mywg
c2V0IGZvbyh4KXt9LCBmb286MX0iLCAiJ3ZhbHVlOjEga2V5czoxIFtFQ1ddW0V4dGVuc2libGVd
JyIpOwogcnVuVGVzdCgibyA9IHtzZXQgZm9vKHgpe30sIGZvbzoxLCBnZXQgZm9vKCl7cmV0dXJu
IDJ9LCBbJ2ZvbyddOjN9IiwgIid2YWx1ZTozIGtleXM6MSBbRUNXXVtFeHRlbnNpYmxlXSciKTsK
IHJ1blRlc3QoIm8gPSB7Z2V0IGZvbygpe3JldHVybiAyfSwgZ2V0IGZvbygpe3JldHVybiAyfSwg
Wydmb28nXTozLCBmb286MX0iLCAiJ3ZhbHVlOjEga2V5czoxIFtFQ1ddW0V4dGVuc2libGVdJyIp
OworCisvLyBfX3Byb3RvX18gZHVwbGljYXRlcyBhcmUgbm90IGFsbG93ZWQuCitmdW5jdGlvbiBy
dW5Qcm90b1Rlc3RTaG91bGRUaHJvdyh0ZXN0KSB7CisgICAgc2hvdWxkVGhyb3codGVzdCk7Cisg
ICAgc2hvdWxkVGhyb3coIid1c2Ugc3RyaWN0JzsiICsgdGVzdCk7CisgICAgc2hvdWxkVGhyb3co
IihmdW5jdGlvbigpeyIgKyB0ZXN0ICsgIn0pKCkiKTsKK30KK2Z1bmN0aW9uIHJ1blByb3RvVGVz
dFNob3VsZE5vdFRocm93KHRlc3QpIHsKKyAgICBzaG91bGROb3RUaHJvdyh0ZXN0KTsKKyAgICBz
aG91bGROb3RUaHJvdygiJ3VzZSBzdHJpY3QnOyIgKyB0ZXN0KTsKKyAgICBzaG91bGROb3RUaHJv
dygiKGZ1bmN0aW9uKCl7IiArIHRlc3QgKyAifSkoKSIpOworfQorCitkZWJ1ZygiIik7IGRlYnVn
KCJEdXBsaWNhdGUgc2ltcGxlIF9fcHJvdG9fXyBhdHRyaWJ1dGVzIGFyZSBub3QgYWxsb3dlZCIp
OworcnVuUHJvdG9UZXN0U2hvdWxkTm90VGhyb3coIm8gPSB7X19wcm90b19fOm51bGx9Iik7City
dW5Qcm90b1Rlc3RTaG91bGROb3RUaHJvdygiKHtfX3Byb3RvX186bnVsbCwgWydfX3Byb3RvX18n
XTp7fX0pIik7CitydW5Qcm90b1Rlc3RTaG91bGROb3RUaHJvdygibyA9IHtfX3Byb3RvX186bnVs
bCwgWydfX3Byb3RvX18nXTp7fX0iKTsKK3J1blByb3RvVGVzdFNob3VsZE5vdFRocm93KCJvID0g
e19fcHJvdG9fXzpudWxsLCBnZXQgX19wcm90b19fKCl7fX0iKTsKK3J1blByb3RvVGVzdFNob3Vs
ZE5vdFRocm93KCJ2YXIgX19wcm90b19fID0gbnVsbDsgbyA9IHtfX3Byb3RvX186bnVsbCwgX19w
cm90b19ffSIpOworcnVuUHJvdG9UZXN0U2hvdWxkVGhyb3coIih7X19wcm90b19fOltdLCBfX3By
b3RvX186e319KSIpOworcnVuUHJvdG9UZXN0U2hvdWxkVGhyb3coIm8gPSB7X19wcm90b19fOm51
bGwsICdfX3Byb3RvX18nOnt9fSIpOworcnVuUHJvdG9UZXN0U2hvdWxkVGhyb3coIm8gPSB7X19w
cm90b19fOltdLCBfX3Byb3RvX186e319Iik7CitydW5Qcm90b1Rlc3RTaG91bGRUaHJvdygibyA9
IHsnX19wcm90b19fJzp7fSwgJ19fcHJvdG9fXyc6e319Iik7CitydW5Qcm90b1Rlc3RTaG91bGRU
aHJvdygibyA9IHthOjEsIF9fcHJvdG9fXzp7fSwgYjoyLCBbJ2MnXTozLCBfX3Byb3RvX186e30s
IGQ6M30iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGIyZjczYzUuLjE2ZmY3N2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE1LTA1LTE4ICBKb3Nl
cGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgRVM2OiBTaG91bGQg
bm90IGFsbG93IGR1cGxpY2F0ZSBiYXNpYyBfX3Byb3RvX18gcHJvcGVydGllcyBpbiBPYmplY3Qg
TGl0ZXJhbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTEzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudCBFUzYgQW5uZXggQi4zLjEsIHdoaWNoIGRpc2FsbG93cyBkdXBsaWNhdGUgYmFz
aWMgX19wcm90b19fCisgICAgICAgIHByb3BlcnRpZXMgaW4gb2JqZWN0IGxpdGVyYWxzLiBUaGlz
IGRvZXNuJ3QgYWZmZWN0IGNvbXB1dGVkIHByb3BlcnRpZXMsCisgICAgICAgIHNob3J0aGFuZCBw
cm9wZXJ0aWVzLCBvciBnZXR0ZXJzL3NldHRlcnMgYWxsIG9mIHdoaWNoIGF2b2lkIHNldHRpbmcK
KyAgICAgICAgdGhlIGFjdHVhbCBwcm90b3R5cGUgb2YgdGhlIG9iamVjdCBhbnl3YXkuCisKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmV2YWwp
OgorICAgICAgICBSZW1vdmUgb3V0IG9mIGRhdGUgY29tbWVudC4gRHVwbGljYXRlIHByb3BlcnR5
IG5hbWVzIGFyZSBhbGxvd2VkCisgICAgICAgIG5vdyBpbiBFUzYsIHRoZXkgd2VyZSBub3QgaW4g
RVM1IHN0cmljdCBtb2RlLgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Z2V0TmFtZSk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmdldFR5cGUpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6OmdldE5hbWUpOgorICAgICAgICBBZGQgYmFjayBnZXROYW1lIHRv
IGdldCB0aGUgcHJvcGVydHkgbmFtZSBkZXBlbmRpbmcgb24gdGhlIHRyZWUgYnVpbGRlci4KKyAg
ICAgICAgQWxzbyB0aWdodGVuIHVwIHRoZSBwYXJhbWV0ZXIgdHlwZXMuCisKKyAgICAgICAgKiBy
dW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpMaXRlcmFsUGFyc2VyPENo
YXJUeXBlPjo6cGFyc2UpOgorICAgICAgICBJbiBxdWljayBKU09OIGxpdGVyYWwgcGFyc2luZyBm
b3IgZXZhbCwgd2UgYWN0dWFsbHkgbmVlZCB0byBldmFsdWF0ZQorICAgICAgICB0aGUgX19wcm90
b19fIHByb3BlcnR5IGFzc2lnbm1lbnQsIGluc3RlYWQgb2YganVzdCBidWlsZGluZyB1cCBhIGxp
c3QKKyAgICAgICAgb2YgZGlyZWN0IHByb3BlcnRpZXMuIE9ubHkgZG8gdGhpcyB3aGVuIG5vdCBk
b2luZyBhIHN0cmljdCBKU09OIHBhcnNlLgorCisgICAgICAgICogcGFyc2VyL05vZGVzLmg6Cisg
ICAgICAgIEFkZCAiU2hvcnRoYW5kIiB0byB0aGUgbGlzdCBvZiBQcm9wZXJ0eU5vZGUgdHlwZXMg
dG8gYWxsb3cgaXQgdG8KKyAgICAgICAgYmUgZGlzdGluZ3Vpc2hlZCB3aXRob3V0IHJlbHlpbmcg
b24gb3RoZXIgaW5mb3JtYXRpb24uCisKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAg
ICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZVByb3BlcnR5KToKKyAgICAgICAgQWRkIHRoZSBTaG9ydGhhbmQgdHlwZSB3aGVuIHBh
cnNpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkuCisKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVy
VHlwZT46OnNob3VsZENoZWNrUHJvcGVydHlGb3JVbmRlcnNjb3JlUHJvdG9EdXBsaWNhdGUpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VPYmplY3RMaXRlcmFsKToKKyAg
ICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RyaWN0T2JqZWN0TGl0ZXJhbCk6
CisgICAgICAgIENoZWNrIGZvciBkdXBsaWNhdGUgX19wcm90b19fIHByb3BlcnRpZXMsIGFuZCB0
aHJvdyBhIFN5bnRheEVycm9yCisgICAgICAgIGlmIHRoYXQgd2FzIHRoZSBjYXNlLgorCiAyMDE1
LTA1LTE4ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlND
XSBTcGVlZCB1cCBVUkwgZW5jb2RlL2RlY29kZSBieSB1c2luZyBiaXRtYXBzIGluc3RlYWQgb2Yg
c3RyY2hyKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAppbmRleCAxN2RkM2I0Li5hNjE0ZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTE1MSw4ICsxNTEsNiBA
QCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKICAgICBpZiAoIWV2YWwpIHsK
ICAgICAgICAgaWYgKCFjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogV2UgY2FuIHVzZSB0aGUgcHJlcGFyc2VyIGluIHN0cmljdCBtb2RlLCB3
ZSBqdXN0IG5lZWQgYWRkaXRpb25hbCBsb2dpYwotICAgICAgICAgICAgLy8gdG8gcHJldmVudCBk
dXBsaWNhdGVzLgogICAgICAgICAgICAgaWYgKHByb2dyYW1Tb3VyY2UuaXM4Qml0KCkpIHsKICAg
ICAgICAgICAgICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBwcmVwYXJzZXIoY2FsbEZyYW1lLCBw
cm9ncmFtU291cmNlLmNoYXJhY3RlcnM4KCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIE5vblN0
cmljdEpTT04pOwogICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHBhcnNlZE9iamVjdCA9IHBy
ZXBhcnNlci50cnlMaXRlcmFsUGFyc2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9B
U1RCdWlsZGVyLmgKaW5kZXggZmJjYmUyNi4uZjFmMGMwNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTcxOSw4ICs3MTksOSBAQCBwdWJsaWM6CiAgICAg
ICAgIGFzc2lnbm1lbnRTdGFja0RlcHRoLS07CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQotICAgIAotICAgIFByb3BlcnR5Tm9kZTo6VHlwZSBnZXRUeXBlKFByb3BlcnR5IHByb3BlcnR5
KSBjb25zdCB7IHJldHVybiBwcm9wZXJ0eS0+dHlwZSgpOyB9CisKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBnZXROYW1lKGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0eSkgY29uc3QgeyByZXR1cm4gcHJv
cGVydHktPm5hbWUoKTsgfQorICAgIFByb3BlcnR5Tm9kZTo6VHlwZSBnZXRUeXBlKGNvbnN0IFBy
b3BlcnR5JiBwcm9wZXJ0eSkgY29uc3QgeyByZXR1cm4gcHJvcGVydHktPnR5cGUoKTsgfQogCiAg
ICAgYm9vbCBpc1Jlc29sdmUoRXhwcmVzc2lvbk5vZGUqIGV4cHIpIGNvbnN0IHsgcmV0dXJuIGV4
cHItPmlzUmVzb2x2ZU5vZGUoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgK
aW5kZXggZjk4ZmM0Yy4uODk5NjA4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aApAQCAtNTgwLDcgKzU4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUHJvcGVy
dHlOb2RlIDogcHVibGljIFBhcnNlckFyZW5hRnJlZWFibGUgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgZW51bSBUeXBlIHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIgPSAyLCBTZXR0ZXIgPSA0LCBDb21w
dXRlZCA9IDggfTsKKyAgICAgICAgZW51bSBUeXBlIHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIgPSAy
LCBTZXR0ZXIgPSA0LCBDb21wdXRlZCA9IDgsIFNob3J0aGFuZCA9IDE2IH07CiAgICAgICAgIGVu
dW0gUHV0VHlwZSB7IFVua25vd24sIEtub3duRGlyZWN0IH07CiAKICAgICAgICAgUHJvcGVydHlO
b2RlKGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIFR5cGUsIFB1dFR5cGUsIFN1
cGVyQmluZGluZyk7CkBAIC01OTgsNyArNTk4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGNvbnN0IElkZW50aWZpZXIqIG1fbmFtZTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhw
cmVzc2lvbjsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fYXNzaWduOwotICAgICAgICB1bnNp
Z25lZCBtX3R5cGUgOiA0OworICAgICAgICB1bnNpZ25lZCBtX3R5cGUgOiA1OwogICAgICAgICB1
bnNpZ25lZCBtX25lZWRzU3VwZXJCaW5kaW5nIDogMTsKICAgICAgICAgdW5zaWduZWQgbV9wdXRU
eXBlIDogMTsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmlu
ZGV4IGU4MmY4YzEuLjlmYzlhMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAKQEAgLTIwMzUsNyArMjAzNSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVByb3BlcnR5KFRyZWVCCiAgICAg
ICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShpZGVudCwgbV92bS0+cHJvcGVydHlO
YW1lcy0+ZXZhbCA9PSAqaWRlbnQpOwogICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9
IGNvbnRleHQuY3JlYXRlUmVzb2x2ZShsb2NhdGlvbiwgaWRlbnQsIHN0YXJ0KTsKLSAgICAgICAg
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KGlkZW50LCBub2RlLCBQcm9wZXJ0eU5v
ZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0LCBjb21wbGV0ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShpZGVudCwgbm9kZSwgc3RhdGlj
X2Nhc3Q8UHJvcGVydHlOb2RlOjpUeXBlPihQcm9wZXJ0eU5vZGU6OkNvbnN0YW50IHwgUHJvcGVy
dHlOb2RlOjpTaG9ydGhhbmQpLCBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0LCBjb21wbGV0ZSk7
CiAgICAgICAgIH0KIAogICAgICAgICBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZTsKQEAgLTIxMzUs
MTQgKzIxMzUsMjcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkg
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlR2V0dGVyU2V0dGVyKFQKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJz
ZXI8TGV4ZXJUeXBlPjo6c2hvdWxkQ2hlY2tQcm9wZXJ0eUZvclVuZGVyc2NvcmVQcm90b0R1cGxp
Y2F0ZShUcmVlQnVpbGRlciYgY29udGV4dCwgY29uc3QgVHJlZVByb3BlcnR5JiBwcm9wZXJ0eSkK
K3sKKyAgICBpZiAobV9zeW50YXhBbHJlYWR5VmFsaWRhdGVkKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIWNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIEEgQ29uc3RhbnQgcHJvcGVydHkgdGhhdCBpcyBub3QgYSBDb21w
dXRlZCBvciBTaG9ydGhhbmQgQ29uc3RhbnQgcHJvcGVydHkuCisgICAgcmV0dXJuIGNvbnRleHQu
Z2V0VHlwZShwcm9wZXJ0eSkgPT0gUHJvcGVydHlOb2RlOjpDb25zdGFudDsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlT2JqZWN0TGl0ZXJhbChUcmVlQnVp
bGRlciYgY29udGV4dCkKIHsKICAgICBhdXRvIHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludCgp
OwogICAgIGNvbnN1bWVPckZhaWxXaXRoRmxhZ3MoT1BFTkJSQUNFLCBUcmVlQnVpbGRlcjo6RG9u
dEJ1aWxkU3RyaW5ncywgIkV4cGVjdGVkIG9wZW5pbmcgJ3snIGF0IHRoZSBzdGFydCBvZiBhbiBv
YmplY3QgbGl0ZXJhbCIpOwotICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0
aW9uKCkpOwogCiAgICAgaW50IG9sZE5vbkxIU0NvdW50ID0gbV9ub25MSFNDb3VudDsKLSAgICAK
KworICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOyAgICAKICAg
ICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpIHsKICAgICAgICAgbmV4dCgpOwogICAgICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVPYmplY3RMaXRlcmFsKGxvY2F0aW9uKTsKQEAgLTIxNTAsMTAgKzIx
NjMsMTYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VPYmplY3RMaXRlcmEKICAgICAKICAgICBUcmVlUHJvcGVydHkg
cHJvcGVydHkgPSBwYXJzZVByb3BlcnR5KGNvbnRleHQsIGZhbHNlKTsKICAgICBmYWlsSWZGYWxz
ZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0eSIpOworCiAg
ICAgaWYgKCFtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQgJiYgY29udGV4dC5nZXRUeXBlKHByb3Bl
cnR5KSAmIChQcm9wZXJ0eU5vZGU6OkdldHRlciB8IFByb3BlcnR5Tm9kZTo6U2V0dGVyKSkgewog
ICAgICAgICByZXN0b3JlU2F2ZVBvaW50KHNhdmVQb2ludCk7CiAgICAgICAgIHJldHVybiBwYXJz
ZVN0cmljdE9iamVjdExpdGVyYWwoY29udGV4dCk7CiAgICAgfQorCisgICAgYm9vbCBzZWVuVW5k
ZXJzY29yZVByb3RvID0gZmFsc2U7CisgICAgaWYgKHNob3VsZENoZWNrUHJvcGVydHlGb3JVbmRl
cnNjb3JlUHJvdG9EdXBsaWNhdGUoY29udGV4dCwgcHJvcGVydHkpKQorICAgICAgICBzZWVuVW5k
ZXJzY29yZVByb3RvID0gKmNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92bS0+cHJvcGVy
dHlOYW1lcy0+dW5kZXJzY29yZVByb3RvOworCiAgICAgVHJlZVByb3BlcnR5TGlzdCBwcm9wZXJ0
eUxpc3QgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5TGlzdChsb2NhdGlvbiwgcHJvcGVydHkpOwog
ICAgIFRyZWVQcm9wZXJ0eUxpc3QgdGFpbCA9IHByb3BlcnR5TGlzdDsKICAgICB3aGlsZSAobWF0
Y2goQ09NTUEpKSB7CkBAIC0yMTY3LDYgKzIxODYsMTIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VPYmplY3RMaXRl
cmEKICAgICAgICAgICAgIHJlc3RvcmVTYXZlUG9pbnQoc2F2ZVBvaW50KTsKICAgICAgICAgICAg
IHJldHVybiBwYXJzZVN0cmljdE9iamVjdExpdGVyYWwoY29udGV4dCk7CiAgICAgICAgIH0KKyAg
ICAgICAgaWYgKHNob3VsZENoZWNrUHJvcGVydHlGb3JVbmRlcnNjb3JlUHJvdG9EdXBsaWNhdGUo
Y29udGV4dCwgcHJvcGVydHkpKSB7CisgICAgICAgICAgICBpZiAoKmNvbnRleHQuZ2V0TmFtZShw
cm9wZXJ0eSkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSB7CisgICAg
ICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKHNlZW5VbmRlcnNjb3JlUHJvdG8sICJBdHRl
bXB0ZWQgdG8gcmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5Iik7CisgICAgICAgICAgICAgICAg
c2VlblVuZGVyc2NvcmVQcm90byA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAg
ICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlMaXN0KHByb3BlcnR5TG9jYXRpb24s
IHByb3BlcnR5LCB0YWlsKTsKICAgICB9CiAKQEAgLTIxOTMsNyArMjIxOCwxMSBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZVN0cmljdE9iamVjdAogICAgIAogICAgIFRyZWVQcm9wZXJ0eSBwcm9wZXJ0eSA9IHBhcnNl
UHJvcGVydHkoY29udGV4dCwgdHJ1ZSk7CiAgICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5u
b3QgcGFyc2Ugb2JqZWN0IGxpdGVyYWwgcHJvcGVydHkiKTsKLSAgICAKKworICAgIGJvb2wgc2Vl
blVuZGVyc2NvcmVQcm90byA9IGZhbHNlOworICAgIGlmIChzaG91bGRDaGVja1Byb3BlcnR5Rm9y
VW5kZXJzY29yZVByb3RvRHVwbGljYXRlKGNvbnRleHQsIHByb3BlcnR5KSkKKyAgICAgICAgc2Vl
blVuZGVyc2NvcmVQcm90byA9ICpjb250ZXh0LmdldE5hbWUocHJvcGVydHkpID09IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bzsKKwogICAgIFRyZWVQcm9wZXJ0eUxpc3QgcHJv
cGVydHlMaXN0ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eUxpc3QobG9jYXRpb24sIHByb3BlcnR5
KTsKICAgICBUcmVlUHJvcGVydHlMaXN0IHRhaWwgPSBwcm9wZXJ0eUxpc3Q7CiAgICAgd2hpbGUg
KG1hdGNoKENPTU1BKSkgewpAQCAtMjIwMyw2ICsyMjMyLDEyIEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RyaWN0
T2JqZWN0CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBwcm9wZXJ0eUxvY2F0aW9uKHRva2VuTG9j
YXRpb24oKSk7CiAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VQcm9wZXJ0eShjb250ZXh0LCB0cnVl
KTsKICAgICAgICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5ub3QgcGFyc2Ugb2JqZWN0IGxp
dGVyYWwgcHJvcGVydHkiKTsKKyAgICAgICAgaWYgKHNob3VsZENoZWNrUHJvcGVydHlGb3JVbmRl
cnNjb3JlUHJvdG9EdXBsaWNhdGUoY29udGV4dCwgcHJvcGVydHkpKSB7CisgICAgICAgICAgICBp
ZiAoKmNvbnRleHQuZ2V0TmFtZShwcm9wZXJ0eSkgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5k
ZXJzY29yZVByb3RvKSB7CisgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKHNlZW5V
bmRlcnNjb3JlUHJvdG8sICJBdHRlbXB0ZWQgdG8gcmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5
Iik7CisgICAgICAgICAgICAgICAgc2VlblVuZGVyc2NvcmVQcm90byA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KICAgICAgICAgdGFpbCA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHlM
aXN0KHByb3BlcnR5TG9jYXRpb24sIHByb3BlcnR5LCB0YWlsKTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDQyYTMxZjQuLmU0Y2NjM2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtNzg0LDYgKzc4NCw4IEBAIHByaXZhdGU6
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgdHlwZW5hbWUg
VHJlZUJ1aWxkZXI6OlRlbXBsYXRlTGl0ZXJhbCBwYXJzZVRlbXBsYXRlTGl0ZXJhbChUcmVlQnVp
bGRlciYsIHR5cGVuYW1lIExleGVyVHlwZTo6UmF3U3RyaW5nc0J1aWxkTW9kZSk7CiAjZW5kaWYK
IAorICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBib29sIHNo
b3VsZENoZWNrUHJvcGVydHlGb3JVbmRlcnNjb3JlUHJvdG9EdXBsaWNhdGUoVHJlZUJ1aWxkZXIm
LCBjb25zdCBUcmVlUHJvcGVydHkmKTsKKwogICAgIEFMV0FZU19JTkxJTkUgaW50IGlzQmluYXJ5
T3BlcmF0b3IoSlNUb2tlblR5cGUpOwogICAgIGJvb2wgYWxsb3dBdXRvbWF0aWNTZW1pY29sb24o
KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4
Q2hlY2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgK
aW5kZXggMzFkM2ZlNC4uNzAwODg5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9TeW50YXhDaGVja2VyLmgKQEAgLTI5Myw2ICsyOTMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBhc3NpZ25tZW50U3RhY2tBcHBlbmQoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIE9wZXJh
dG9yKSB7IH0KICAgICBpbnQgY3JlYXRlQXNzaWdubWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCwgaW50LCBpbnQsIGludCkgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KKyAgICBjb25zdCBJZGVudGlmaWVyKiBnZXROYW1l
KGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0eSkgY29uc3QgeyByZXR1cm4gcHJvcGVydHkubmFtZTsg
fQogICAgIFByb3BlcnR5Tm9kZTo6VHlwZSBnZXRUeXBlKGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0
eSkgY29uc3QgeyByZXR1cm4gcHJvcGVydHkudHlwZTsgfQogICAgIGJvb2wgaXNSZXNvbHZlKEV4
cHJlc3Npb25UeXBlIGV4cHIpIGNvbnN0IHsgcmV0dXJuIGV4cHIgPT0gUmVzb2x2ZUV4cHIgfHwg
ZXhwciA9PSBSZXNvbHZlRXZhbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVEZWNv
bnN0cnVjdGluZ0Fzc2lnbm1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBFeHByZXNz
aW9uVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVy
YWxQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNl
ci5jcHAKaW5kZXggMzAzMjhkMS4uOWQ5ZmUyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKQEAgLTU0OCw2ICs1NDgsNyBAQCBKU1ZhbHVl
IExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQYXJzZXJTdGF0ZSBpbml0aWFsU3RhdGUp
CiAgICAgSlNWYWx1ZSBsYXN0VmFsdWU7CiAgICAgVmVjdG9yPFBhcnNlclN0YXRlLCAxNiwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3c+IHN0YXRlU3RhY2s7CiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDE2
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gaWRlbnRpZmllclN0YWNrOworICAgIEhhc2hTZXQ8SlNP
YmplY3QqPiB2aXNpdGVkVW5kZXJzY29yZVByb3RvOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAg
IHN3aXRjaChzdGF0ZSkgewogICAgICAgICAgICAgc3RhcnRQYXJzZUFycmF5OgpAQCAtNjQ5LDEw
ICs2NTAsMjAgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUGFyc2Vy
U3RhdGUgaW5pdGlhbFN0YXRlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmplY3RTdGFjay5sYXN0KCkpOwogICAgICAgICAgICAg
ICAgIFByb3BlcnR5TmFtZSBpZGVudCA9IGlkZW50aWZpZXJTdGFjay5sYXN0KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoaWRlbnQp
KQotICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KG1fZXhlYywgaW5k
ZXgudmFsdWUoKSwgbGFzdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+dm0oKSwgaWRlbnQsIGxhc3RWYWx1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSAhPSBTdHJpY3RKU09OICYmIGlkZW50ID09
IG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCF2aXNpdGVkVW5kZXJzY29yZVByb3RvLmFkZChvYmplY3QpLmlzTmV3
RW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VFcnJvck1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkF0dGVtcHRlZCB0byByZWRlZmluZSBfX3Byb3RvX18gcHJvcGVydHkiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2V4
ZWMtPmNvZGVCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChvYmplY3QsIGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkgOiBmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0YWNrLmxhc3QoKS5wdXQobV9leGVjLCBpZGVu
dCwgbGFzdFZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChpZGVu
dCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KG1fZXhl
YywgaW5kZXgudmFsdWUoKSwgbGFzdFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT52bSgpLCBp
ZGVudCwgbGFzdFZhbHVlKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAg
ICAgICAgIGlmIChtX2xleGVyLmN1cnJlbnRUb2tlbigpLnR5cGUgPT0gVG9rQ29tbWEpCiAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gZG9QYXJzZU9iamVjdFN0YXJ0RXhwcmVzc2lvbjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>