<?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>215047</bug_id>
          
          <creation_ts>2020-07-31 17:57:38 -0700</creation_ts>
          <short_desc>JSClassRef should work with JS class syntax.</short_desc>
          <delta_ts>2020-08-27 09:41:33 -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>New Bugs</component>
          <version>WebKit 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1677065</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-31 17:57:38 -0700</bug_when>
    <thetext>JSClassRef should work with JS class syntax and should be retrievable via API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677066</commentid>
    <comment_count>1</comment_count>
      <attachid>405764</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-31 17:58:00 -0700</bug_when>
    <thetext>Created attachment 405764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677072</commentid>
    <comment_count>2</comment_count>
      <attachid>405764</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-07-31 20:09:03 -0700</bug_when>
    <thetext>Comment on attachment 405764
Patch

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

&gt; Source/JavaScriptCore/API/tests/testapi.cpp:659
&gt; +    definition.callAsConstructor = constructor;

Is this code reachable? I think this would only have an effect if you did &quot;new (new SuperClass)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678848</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-07 17:58:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/66708727&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682687</commentid>
    <comment_count>4</comment_count>
      <attachid>407201</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-08-25 10:00:29 -0700</bug_when>
    <thetext>Created attachment 407201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682771</commentid>
    <comment_count>5</comment_count>
      <attachid>407223</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-08-25 13:30:38 -0700</bug_when>
    <thetext>Created attachment 407223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682802</commentid>
    <comment_count>6</comment_count>
      <attachid>407223</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-25 14:37:45 -0700</bug_when>
    <thetext>Comment on attachment 407223
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        the new.target. Ideally we would have passed the derived classes
&gt; +        constructor from the beginning of our support for JS subclassing
&gt; +        but at this point that&apos;s probably not compatible with too many
&gt; +        applications.

We can create an old compatible version and a new version designed the way we like. We don’t have to give up on it forever.

&gt; Source/JavaScriptCore/API/APICallbackFunction.h:91
&gt; +        // If we are doing a derived class construction get the .prototype property off the new target first so we look behave closer to normal JS.

&quot;look behave&quot; -&gt; &quot;behave&quot;?

&gt; Source/JavaScriptCore/API/APICallbackFunction.h:119
&gt; +        // This won&apos;t trigger proxy traps on newObject&apos;s prototype handler but that&apos;s probably desirable here anyway.

Add test cases covering this?

&gt; Source/JavaScriptCore/API/JSObjectRef.h:343
&gt; +When setting callAsConstructor it should be noted that it is not possible to support JS subclassing via the extends clause of JS class syntax. This is because there is no backwards compatible way to vend the derived class&apos;s constructor to callAsConstructor. If you intend to subclass it&apos;s recomended to use JSObjectMakeConstructor.

Spelling error: &quot;recomended&quot;.

Not sure I understand the meaning of the phrase &quot;backwards compatible&quot; here.

The last sentence probably shouldn’t use the word &quot;you&quot;. Maybe the sentence should have a structure more like &quot;JSObjectMakeConstructor &lt;can do it&gt;.&quot;

&gt; Source/JavaScriptCore/API/tests/testapi.cpp:54
&gt; +    APIString(String string)

I suggest const String&amp;.

&gt; Source/JavaScriptCore/API/tests/testapi.cpp:55
&gt; +        : APIString(string.ascii().data())

I suggest utf8() instead of ascii(), since ascii() is intended for debugging only. Not great even for tests.

&gt; Source/JavaScriptCore/API/tests/testapi.cpp:654
&gt; +    JSClassDefinition definition = kJSClassDefinitionEmpty;

static const maybe?

&gt; Source/JavaScriptCore/API/tests/testapi.cpp:660
&gt; +    auto constructor = [] (JSContextRef ctx, JSObjectRef, size_t, const JSValueRef*, JSValueRef*) -&gt; JSObjectRef {
&gt; +
&gt; +        return JSObjectMake(ctx, jsClass, nullptr);
&gt; +    };

Stray blank line.

&gt; Source/JavaScriptCore/API/tests/testapi.cpp:662
&gt; +    JSObjectRef superClass = JSObjectMakeConstructor(context, jsClass, constructor);

Superclass could be a single word instead of &quot;super class&quot;.

&gt; Source/JavaScriptCore/API/tests/testapi.cpp:664
&gt; +    ScriptResult result = callFunction(&quot;(function (SuperClass) { class SubClass extends SuperClass { method() { return &apos;value&apos;; } }; return new SubClass(); })&quot;, superClass);

Ditto. Superclass and subclass.

&gt; Source/JavaScriptCore/API/tests/testapi.cpp:667
&gt; +    JSObjectRef subClass = const_cast&lt;JSObjectRef&gt;(result.value());

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682836</commentid>
    <comment_count>7</comment_count>
      <attachid>407223</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-08-25 16:12:35 -0700</bug_when>
    <thetext>Comment on attachment 407223
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:15
&gt;&gt; +        applications.
&gt; 
&gt; We can create an old compatible version and a new version designed the way we like. We don’t have to give up on it forever.

Yeah, I was thinking about just adding a new class attribute to enable it. Maybe, that&apos;s a better way to do this?

&gt;&gt; Source/JavaScriptCore/API/APICallbackFunction.h:91
&gt;&gt; +        // If we are doing a derived class construction get the .prototype property off the new target first so we look behave closer to normal JS.
&gt; 
&gt; &quot;look behave&quot; -&gt; &quot;behave&quot;?

Fixed.

&gt;&gt; Source/JavaScriptCore/API/JSObjectRef.h:343
&gt;&gt; +When setting callAsConstructor it should be noted that it is not possible to support JS subclassing via the extends clause of JS class syntax. This is because there is no backwards compatible way to vend the derived class&apos;s constructor to callAsConstructor. If you intend to subclass it&apos;s recomended to use JSObjectMakeConstructor.
&gt; 
&gt; Spelling error: &quot;recomended&quot;.
&gt; 
&gt; Not sure I understand the meaning of the phrase &quot;backwards compatible&quot; here.
&gt; 
&gt; The last sentence probably shouldn’t use the word &quot;you&quot;. Maybe the sentence should have a structure more like &quot;JSObjectMakeConstructor &lt;can do it&gt;.&quot;

Fixed.

It kinda has two meanings. So the ideal solution is probably that we would have the allocated object already for you. Unfortunately, that&apos;s not binary compatible. We could also add it but again it&apos;s a pretty substantial API change, that I&apos;m not sure is worth it. The second option/meaning would be to pass the derived class&apos;s constructor to the callback instead of the base class&apos;s constructor. But that may break existing code, maybe anyway but the user may consider that code broken already so 🤷‍♂️... but even then the API client would need to get the derived class&apos;s .prototype and set the __proto__ themselves, which isn&apos;t intuitive. 

Unfortunately, the same trick that we use for JSObjectMakeConstructor doesn&apos;t really work here since I&apos;d expect that the user is allocating an object with a different JSClassRef. Although, maybe that&apos;s not the case?

I changed the last sentence to &quot;Subclassing is supported via the JSObjectMakeConstructor function however.&quot;

&gt;&gt; Source/JavaScriptCore/API/tests/testapi.cpp:54
&gt;&gt; +    APIString(String string)
&gt; 
&gt; I suggest const String&amp;.

Done.

&gt;&gt; Source/JavaScriptCore/API/tests/testapi.cpp:55
&gt;&gt; +        : APIString(string.ascii().data())
&gt; 
&gt; I suggest utf8() instead of ascii(), since ascii() is intended for debugging only. Not great even for tests.

Done.

&gt;&gt; Source/JavaScriptCore/API/tests/testapi.cpp:654
&gt;&gt; +    JSClassDefinition definition = kJSClassDefinitionEmpty;
&gt; 
&gt; static const maybe?

I doubt it matters but sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682839</commentid>
    <comment_count>8</comment_count>
      <attachid>407223</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-25 16:26:25 -0700</bug_when>
    <thetext>Comment on attachment 407223
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/API/JSObjectRef.h:343
&gt;&gt;&gt; +When setting callAsConstructor it should be noted that it is not possible to support JS subclassing via the extends clause of JS class syntax. This is because there is no backwards compatible way to vend the derived class&apos;s constructor to callAsConstructor. If you intend to subclass it&apos;s recomended to use JSObjectMakeConstructor.
&gt;&gt; 
&gt;&gt; Spelling error: &quot;recomended&quot;.
&gt;&gt; 
&gt;&gt; Not sure I understand the meaning of the phrase &quot;backwards compatible&quot; here.
&gt;&gt; 
&gt;&gt; The last sentence probably shouldn’t use the word &quot;you&quot;. Maybe the sentence should have a structure more like &quot;JSObjectMakeConstructor &lt;can do it&gt;.&quot;
&gt; 
&gt; Fixed.
&gt; 
&gt; It kinda has two meanings. So the ideal solution is probably that we would have the allocated object already for you. Unfortunately, that&apos;s not binary compatible. We could also add it but again it&apos;s a pretty substantial API change, that I&apos;m not sure is worth it. The second option/meaning would be to pass the derived class&apos;s constructor to the callback instead of the base class&apos;s constructor. But that may break existing code, maybe anyway but the user may consider that code broken already so 🤷‍♂️... but even then the API client would need to get the derived class&apos;s .prototype and set the __proto__ themselves, which isn&apos;t intuitive. 
&gt; 
&gt; Unfortunately, the same trick that we use for JSObjectMakeConstructor doesn&apos;t really work here since I&apos;d expect that the user is allocating an object with a different JSClassRef. Although, maybe that&apos;s not the case?
&gt; 
&gt; I changed the last sentence to &quot;Subclassing is supported via the JSObjectMakeConstructor function however.&quot;

These comments are for software developers who are using our API.

I think we need to be more specific and explicit than the phrase &quot;backward compatibility&quot; to help them understand. It’s kind of &quot;inside baseball&quot; to talk about what we can and can’t do compatibly. Instead we should just document what the function does without making excuses or offering rationale for why it doesn’t work a different way.

The comments don’t need to explain why it’s designed the way it is — they do need to explain clearly how to use this correctly and what to expect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683038</commentid>
    <comment_count>9</comment_count>
      <attachid>407223</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-08-26 10:47:02 -0700</bug_when>
    <thetext>Comment on attachment 407223
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/API/JSObjectRef.h:343
&gt;&gt;&gt;&gt; +When setting callAsConstructor it should be noted that it is not possible to support JS subclassing via the extends clause of JS class syntax. This is because there is no backwards compatible way to vend the derived class&apos;s constructor to callAsConstructor. If you intend to subclass it&apos;s recomended to use JSObjectMakeConstructor.
&gt;&gt;&gt; 
&gt;&gt;&gt; Spelling error: &quot;recomended&quot;.
&gt;&gt;&gt; 
&gt;&gt;&gt; Not sure I understand the meaning of the phrase &quot;backwards compatible&quot; here.
&gt;&gt;&gt; 
&gt;&gt;&gt; The last sentence probably shouldn’t use the word &quot;you&quot;. Maybe the sentence should have a structure more like &quot;JSObjectMakeConstructor &lt;can do it&gt;.&quot;
&gt;&gt; 
&gt;&gt; Fixed.
&gt;&gt; 
&gt;&gt; It kinda has two meanings. So the ideal solution is probably that we would have the allocated object already for you. Unfortunately, that&apos;s not binary compatible. We could also add it but again it&apos;s a pretty substantial API change, that I&apos;m not sure is worth it. The second option/meaning would be to pass the derived class&apos;s constructor to the callback instead of the base class&apos;s constructor. But that may break existing code, maybe anyway but the user may consider that code broken already so 🤷‍♂️... but even then the API client would need to get the derived class&apos;s .prototype and set the __proto__ themselves, which isn&apos;t intuitive. 
&gt;&gt; 
&gt;&gt; Unfortunately, the same trick that we use for JSObjectMakeConstructor doesn&apos;t really work here since I&apos;d expect that the user is allocating an object with a different JSClassRef. Although, maybe that&apos;s not the case?
&gt;&gt; 
&gt;&gt; I changed the last sentence to &quot;Subclassing is supported via the JSObjectMakeConstructor function however.&quot;
&gt; 
&gt; These comments are for software developers who are using our API.
&gt; 
&gt; I think we need to be more specific and explicit than the phrase &quot;backward compatibility&quot; to help them understand. It’s kind of &quot;inside baseball&quot; to talk about what we can and can’t do compatibly. Instead we should just document what the function does without making excuses or offering rationale for why it doesn’t work a different way.
&gt; 
&gt; The comments don’t need to explain why it’s designed the way it is — they do need to explain clearly how to use this correctly and what to expect.

Sure, I&apos;ll remove part of the comment then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683390</commentid>
    <comment_count>10</comment_count>
      <attachid>407405</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-08-27 09:07:57 -0700</bug_when>
    <thetext>Created attachment 407405
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683406</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-27 09:41:32 -0700</bug_when>
    <thetext>Committed r266236: &lt;https://trac.webkit.org/changeset/266236&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407405.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405764</attachid>
            <date>2020-07-31 17:58:00 -0700</date>
            <delta_ts>2020-08-25 10:00:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215047-20200731175759.patch</filename>
            <type>text/plain</type>
            <size>11862</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ZDUyNWFkZjEyNTQxNGViNGQyN2RlNDU4YmQ0YTJkOGY0MjY5ODQ3Li4yOWJiYWI4MDNhNzU3M2Vk
MmEyZjljZmU4MjdjMzViYzVhNjg0Y2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAyMC0wNy0zMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0NsYXNzUmVmIHNob3VsZCB3b3JrIHdpdGggSlMgY2xhc3Mgc3lu
dGF4IGFuZCBzaG91bGQgYmUgcmV0cmlldmFibGUgdmlhIEFQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDQ3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5o
OgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QpOgorICAgICAg
ICAqIEFQSS9KU09iamVjdFJlZi5jcHA6CisgICAgICAgIChKU09iamVjdEdldEpTQ2xhc3NSZWZG
b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmUHJpdmF0ZS5oOgorICAg
ICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmM6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBB
UEkvdGVzdHMvdGVzdGFwaS5jcHA6CisgICAgICAgIChBUElTdHJpbmc6OkFQSVN0cmluZyk6Cisg
ICAgICAgIChUZXN0QVBJOjptYXJrZWRKU1ZhbHVlQXJyYXlBbmRHQyk6CisgICAgICAgIChUZXN0
QVBJOjpjbGFzc0RlZmluaXRpb25XaXRoSlNTdWJjbGFzcyk6CisgICAgICAgICh0ZXN0Q0FQSVZp
YUNwcCk6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0ZXN0T2Jq
ZWN0aXZlQ0FQSSk6CisKIDIwMjAtMDctMzEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBh
cHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBPcHRpb25zIHNldHRlciB0byB3aGVyZSB3ZSBhbGxv
dyBhY2Nlc3MgdG8gdGhlIE9wdGlvbnMgb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0FQSUNhbGxiYWNrRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oCmluZGV4IDhjYzNjZWI0YzM4ODMxN2NmMTNlY2Fk
MWFjN2EwOWY2ZTIyMDNkNmQuLmQ0ZDFkMDhkZTUwMDU1NzRiZTBiMjhlYTZiMzkxMGQwYTAxYWY3
NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FsbGJhY2tGdW5j
dGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FsbGJhY2tGdW5jdGlv
bi5oCkBAIC03OSwxMiArNzksMjEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBBUElD
YWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2IKIHsKICAgICBW
TSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBKU09iamVjdCogY29uc3RydWN0b3IgPSBjYWxsRnJhbWUtPmpz
Q2FsbGVlKCk7CisgICAgSlNWYWx1ZSBjYWxsZWUgPSBjYWxsRnJhbWUtPmpzQ2FsbGVlKCk7Cisg
ICAgVCogY29uc3RydWN0b3IgPSBqc0Nhc3Q8VCo+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAg
ICAgSlNDb250ZXh0UmVmIGN0eCA9IHRvUmVmKGdsb2JhbE9iamVjdCk7CiAgICAgSlNPYmplY3RS
ZWYgY29uc3RydWN0b3JSZWYgPSB0b1JlZihjb25zdHJ1Y3Rvcik7CiAKLSAgICBKU09iamVjdENh
bGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2sgPSBqc0Nhc3Q8VCo+KGNvbnN0cnVjdG9y
KS0+Y29uc3RydWN0Q2FsbGJhY2soKTsKKyAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2Fs
bGJhY2sgY2FsbGJhY2sgPSBjb25zdHJ1Y3Rvci0+Y29uc3RydWN0Q2FsbGJhY2soKTsKICAgICBp
ZiAoY2FsbGJhY2spIHsKKyAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7CisgICAgICAgIEpTVmFs
dWUgbmV3VGFyZ2V0ID0gY2FsbEZyYW1lLT5uZXdUYXJnZXQoKTsKKyAgICAgICAgLy8gSWYgd2Ug
YXJlIGRvaW5nIGEgZGVyaXZlZCBjbGFzcyBjb25zdHJ1Y3Rpb24gZ2V0IHRoZSAucHJvdG90eXBl
IHByb3BlcnR5IG9mZiB0aGUgbmV3IHRhcmdldCBmaXJzdCBzbyB3ZSBsb29rIGJlaGF2ZSBjbG9z
ZXIgdG8gbm9ybWFsIEpTLgorICAgICAgICBpZiAobmV3VGFyZ2V0ICE9IGNvbnN0cnVjdG9yKSB7
CisgICAgICAgICAgICBwcm90b3R5cGUgPSBuZXdUYXJnZXQuZ2V0KGdsb2JhbE9iamVjdCwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisgICAgICAgIH0KKwogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3Vu
dCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwogICAgICAgICBWZWN0b3I8SlNWYWx1ZVJl
ZiwgMTY+IGFyZ3VtZW50czsKICAgICAgICAgYXJndW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoYXJndW1lbnRDb3VudCk7CkBAIC05Nyw2ICsxMDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEFQSUNhbGxiYWNrRnVuY3Rpb246OmNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCog
Z2xvYgogICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGdsb2Jh
bE9iamVjdCk7CiAgICAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhjdHgsIGNvbnN0cnVjdG9y
UmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCAmZXhjZXB0aW9uKTsKICAgICAg
ICAgfQorCiAgICAgICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIHRvSlMoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pKTsK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0x
MDQsMTAgKzExNCwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEFQSUNhbGxiYWNr
RnVuY3Rpb246OmNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYgogICAgICAgICAvLyByZXN1
bHQgbXVzdCBiZSBhIHZhbGlkIEpTVmFsdWUuCiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhyZXN1bHQpKTsKKworICAgICAgICBKU09i
amVjdCogbmV3T2JqZWN0ID0gdG9KUyhyZXN1bHQpOworICAgICAgICAvLyBUaGlzIHdvbid0IHRy
aWdnZXIgcHJveHkgdHJhcHMgb24gbmV3T2JqZWN0J3MgcHJvdG90eXBlIGhhbmRsZXIgYnV0IHRo
YXQncyBwcm9iYWJseSBkZXNpcmFibGUgaGVyZSBhbnl3YXkuCisgICAgICAgIGlmIChuZXdUYXJn
ZXQgIT0gY29uc3RydWN0b3IgJiYgbmV3T2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pID09
IGNvbnN0cnVjdG9yLT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUpKSB7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
ICAgICAgICAgbmV3T2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5ld09iamVjdCk7CiAgICAg
fQogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhKU09iamVjdE1ha2UoY3R4
LCBqc0Nhc3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpLT5jbGFzc1JlZigp
LCBudWxscHRyKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhKU09iamVjdE1h
a2UoY3R4LCBqc0Nhc3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yKj4oY2FsbGVlKS0+Y2xhc3NSZWYo
KSwgbnVsbHB0cikpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCmluZGV4IDM2M2I4YWY0YjQ4YmI4YzA3NDVmODFiMWNl
MGQ4ZmJlNjU2ZjI4YWYuLjgxNjEzMzc3Y2ZlYmJlMjM1NzQ2YjNmOTIyYThiNzUzMTVhYjczZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCkBAIC0xMjYsNiAr
MTI2LDIxIEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKEpTQ29udGV4dFJl
ZiBjdHgsIEpTQ2xhc3NSZWYganNDbGFzcywgSlNPYmplCiAgICAgcmV0dXJuIHRvUmVmKGNvbnN0
cnVjdG9yKTsKIH0KIAorSlNDbGFzc1JlZiBKU09iamVjdEdldEpTQ2xhc3NSZWZGb3JDb25zdHJ1
Y3RvcihKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBjb25zdHJ1Y3RvcikKK3sKKyAgICBp
ZiAoIWN0eCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKworICAgIGlmIChhdXRvKiBvYmplY3Qg
PSBqc0R5bmFtaWNDYXN0PEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcio+KHZtLCB0b0pTKGNvbnN0cnVj
dG9yKSkpCisgICAgICAgIHJldHVybiBvYmplY3QtPmNsYXNzUmVmKCk7CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwogSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlRnVuY3Rpb24oSlNDb250ZXh0
UmVmIGN0eCwgSlNTdHJpbmdSZWYgbmFtZSwgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQsIGNvbnN0
IEpTU3RyaW5nUmVmIHBhcmFtZXRlck5hbWVzW10sIEpTU3RyaW5nUmVmIGJvZHksIEpTU3RyaW5n
UmVmIHNvdXJjZVVSTFN0cmluZywgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQogewogICAgIGlmICghY3R4KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmUHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU09iamVjdFJlZlByaXZhdGUuaAppbmRleCA2ZTMyNjEyZTM4YWNkZmI3NzUyN2MwZWM1
NzI0NjA3ZGVjNjE2M2M4Li40NjE1NjRlZjNlNzRkMWU0MzZjNWU4NTRlMGFhODQwZWE4YjE0ZTAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmUHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWZQcml2YXRlLmgK
QEAgLTcxLDYgKzcxLDE4IEBAIEpTX0VYUE9SVCBKU09iamVjdFJlZiBKU09iamVjdEdldFByb3h5
VGFyZ2V0KEpTT2JqZWN0UmVmKTsKIAogSlNfRVhQT1JUIEpTR2xvYmFsQ29udGV4dFJlZiBKU09i
amVjdEdldEdsb2JhbENvbnRleHQoSlNPYmplY3RSZWYgb2JqZWN0KTsKIAorLyohCitAZnVuY3Rp
b24KK0BhYnN0cmFjdCBHZXQgdGhlIEpTQ2xhc3NSZWYgYXNzb2NpYXRlZCB3aXRoIGEgY29uc3Ry
dWN0b3IgcmV0dXJuZWQgYnkgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IuCitAcGFyYW0gY3R4IFRo
ZSBleGVjdXRpb24gY29udGV4dCB0byB1c2UuCitAcGFyYW0gY29uc3RydWN0b3IgQSBKU09iamVj
dFJlZiByZXR1cm5lZCBieSBKU09iamVjdE1ha2VDb25zdHJ1Y3Rvci4KK0ByZXN1bHQgVGhlIEpT
Q2xhc3NSZWYgcGFzc2VkIHRvIEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yIHdoZW4gY3JlYXRpbmcg
Y29uc3RydWN0b3Igb3IgTlVMTCBpZiBjb25zdHJ1Y3RvciB3YXMgbm90IGNyZWF0ZWQgd2l0aCBK
U09iamVjdE1ha2VDb25zdHJ1Y3Rvci4KK0BkaXNjdXNzaW9uIFRoaXMgaXMgdXNlZnVsIHRvIGdl
dCBhIGNvcHkgeW91ciBKU0NsYXNzUmVmIHdoZW4gY29uc3RydWN0aW5nIG9iamVjdHMsIGVzcGVj
aWFsbHksIGlmIHlvdSdkIGxpa2UgdG8gc3RvcmUgcHJpdmF0ZSBkYXRhIHRoYXQgaXMgbm90IGEg
cmVmZW5lbmNlIHRvIHlvdXIgSlNDbGFzc1JlZi4KKworVGhlIHJldHVybmVkIEpTQ2xhc3NSZWYg
aXMgbm90IHJldGFpbmVkIGJleW9uZCB0aGUgbGlmZXRpbWUgb2YgY29uc3RydWN0b3IuIElmIGEg
bG9uZ2VyIGxpZmV0aW1lIGlzIGRlc2lyZWQgY2FsbCBKU0NsYXNzUmV0YWluIG9uIHRoZSByZXN1
bHQuCisqLworSlNfRVhQT1JUIEpTQ2xhc3NSZWYgSlNPYmplY3RHZXRKU0NsYXNzUmVmRm9yQ29u
c3RydWN0b3IoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgY29uc3RydWN0b3IpIEpTQ19B
UElfQVZBSUxBQkxFKEpTQ19NQUNPU19UQkEsIEpTQ19JT1NfVEJBKTsKKwogI2lmZGVmIF9fY3Bs
dXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdGFwaS5jIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBp
LmMKaW5kZXggMTAzODk2ZWIxZDljNDBkMzhiYzcyNTVkYmMwMjFmNDVkN2M1MDZkYy4uMTRkODg5
OGJmNzI0YTU3NzU4MDQyMzJkNDc3OThiM2RhMTg0OGFlMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMKQEAgLTEzOTksMTEgKzEzOTksMTEgQEAgaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICNlbmRpZgogCiAgICAgY29uc3QgY2hhciogZmlsdGVy
ID0gYXJnYyA+IDEgPyBhcmd2WzFdIDogTlVMTDsKKyAgICBSRUxFQVNFX0FTU0VSVCghdGVzdENB
UElWaWFDcHAoZmlsdGVyKSk7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICB0ZXN0T2Jq
ZWN0aXZlQ0FQSShmaWx0ZXIpOwogI2VuZGlmCiAKLSAgICBSRUxFQVNFX0FTU0VSVCghdGVzdENB
UElWaWFDcHAoZmlsdGVyKSk7CiAgICAgaWYgKGZpbHRlcikKICAgICAgICAgcmV0dXJuIDA7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCmluZGV4IDk0MDFl
YmYxZmIxYWM0OTkxNGQ1MmIwODgzMGI2MTU1ZDEwMDc5NzUuLjkzYWQ5OTIyM2ZjNTU4NDkxY2Nh
Nzk1NTYzZWVjZmY5ZTU1OGJkZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvdGVzdHMvdGVzdGFwaS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
SW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEpTVmFsdWVSZWZBcnJheS5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZlByaXZhdGUuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU09iamVjdFJlZlByaXZhdGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KQEAgLTUwLDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAg
QVBJU3RyaW5nKFN0cmluZyBzdHJpbmcpCisgICAgICAgIDogQVBJU3RyaW5nKHN0cmluZy5hc2Np
aSgpLmRhdGEoKSkKKyAgICB7CisgICAgfQorCiAgICAgfkFQSVN0cmluZygpCiAgICAgewogICAg
ICAgICBKU1N0cmluZ1JlbGVhc2UobV9zdHJpbmcpOwpAQCAtMTQzLDYgKzE0OSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHByb21pc2VFYXJseUhhbmRsZWRSZWplY3Rpb25zKCk7CiAgICAgdm9pZCB0
b3BDYWxsRnJhbWVBY2Nlc3MoKTsKICAgICB2b2lkIG1hcmtlZEpTVmFsdWVBcnJheUFuZEdDKCk7
CisgICAgdm9pZCBjbGFzc0RlZmluaXRpb25XaXRoSlNTdWJjbGFzcygpOwogCiAgICAgaW50IGZh
aWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CiAKQEAgLTYyMSwyMiArNjI4LDE4IEBA
IHZvaWQgVGVzdEFQSTo6dG9wQ2FsbEZyYW1lQWNjZXNzKCkKIAogdm9pZCBUZXN0QVBJOjptYXJr
ZWRKU1ZhbHVlQXJyYXlBbmRHQygpCiB7Ci0gICAgYXV0byB0ZXN0TWFya2VkSlNWYWx1ZUFycmF5
ID0gWyZdKHVuc2lnbmVkIGNvdW50KSB7CisgICAgYXV0byB0ZXN0TWFya2VkSlNWYWx1ZUFycmF5
ID0gWyZdICh1bnNpZ25lZCBjb3VudCkgewogICAgICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0
b0pTKGNvbnRleHQpOwogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKICAgICAgICAgSlNDOjpNYXJrZWRKU1ZhbHVlUmVmQXJyYXkgdmFsdWVzKGNv
bnRleHQsIGNvdW50KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
Y291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFN0cmluZyB0YXJnZXQgPSBtYWtlU3RyaW5n
KCJQcmVmaXgiLCBpbmRleCk7Ci0gICAgICAgICAgICBhdXRvIGhvbGRlciA9IE9wYXF1ZUpTU3Ry
aW5nOjp0cnlDcmVhdGUodGFyZ2V0KTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYgc3RyaW5nID0g
SlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgaG9sZGVyLmdldCgpKTsKKyAgICAgICAgICAgIEpT
VmFsdWVSZWYgc3RyaW5nID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgQVBJU3RyaW5nKG1h
a2VTdHJpbmcoIlByZWZpeCIsIGluZGV4KSkpOwogICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9
IHN0cmluZzsKICAgICAgICAgfQogICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RG
b3JEZWJ1Z2dpbmcoY29udGV4dCk7CiAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewotICAgICAg
ICAgICAgU3RyaW5nIHRhcmdldCA9IG1ha2VTdHJpbmcoIlByZWZpeCIsIGluZGV4KTsKLSAgICAg
ICAgICAgIGF1dG8gaG9sZGVyID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZSh0YXJnZXQpOwot
ICAgICAgICAgICAgSlNWYWx1ZVJlZiBzdHJpbmcgPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0
LCBob2xkZXIuZ2V0KCkpOworICAgICAgICAgICAgSlNWYWx1ZVJlZiBzdHJpbmcgPSBKU1ZhbHVl
TWFrZVN0cmluZyhjb250ZXh0LCBBUElTdHJpbmcobWFrZVN0cmluZygiUHJlZml4IiwgaW5kZXgp
KSk7CiAgICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIHZhbHVl
c1tpbmRleF0sIHN0cmluZykpCiAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAg
fQpAQCAtNjQ2LDYgKzY0OSwyOSBAQCB2b2lkIFRlc3RBUEk6Om1hcmtlZEpTVmFsdWVBcnJheUFu
ZEdDKCkKICAgICB0ZXN0TWFya2VkSlNWYWx1ZUFycmF5KDEwMDApOwogfQogCit2b2lkIFRlc3RB
UEk6OmNsYXNzRGVmaW5pdGlvbldpdGhKU1N1YmNsYXNzKCkKK3sKKyAgICBhdXRvIGNvbnN0cnVj
dG9yID0gW10gKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGNvbnN0cnVjdG9yLCBzaXpl
X3QsIGNvbnN0IEpTVmFsdWVSZWYqLCBKU1ZhbHVlUmVmKikgLT4gSlNPYmplY3RSZWYgeworICAg
ICAgICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwgSlNPYmplY3RHZXRKU0NsYXNzUmVmRm9yQ29u
c3RydWN0b3IoY3R4LCBjb25zdHJ1Y3RvciksIG51bGxwdHIpOworICAgIH07CisKKyAgICBKU0Ns
YXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAg
ZGVmaW5pdGlvbi5jYWxsQXNDb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yOworCisgICAgSlNDbGFz
c1JlZiBqc0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgSlNPYmplY3RS
ZWYgc3VwZXJDbGFzcyA9IEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKGNvbnRleHQsIGpzQ2xhc3Ms
IGNvbnN0cnVjdG9yKTsKKworICAgIFNjcmlwdFJlc3VsdCByZXN1bHQgPSBjYWxsRnVuY3Rpb24o
IihmdW5jdGlvbiAoU3VwZXJDbGFzcykgeyBjbGFzcyBTdWJDbGFzcyBleHRlbmRzIFN1cGVyQ2xh
c3MgeyBtZXRob2QoKSB7IHJldHVybiAndmFsdWUnOyB9IH07IHJldHVybiBuZXcgU3ViQ2xhc3Mo
KTsgfSkiLCBzdXBlckNsYXNzKTsKKyAgICBjaGVjayghIXJlc3VsdCwgImNyZWF0aW5nIGEgc3Vi
Y2xhc3Mgc2hvdWxkIG5vdCB0aHJvdy4iKTsKKyAgICBjaGVjayhKU1ZhbHVlSXNPYmplY3QoY29u
dGV4dCwgcmVzdWx0LnZhbHVlKCkpLCAicmVzdWx0IG9mIGNvbnN0cnVjdGlvbiBzaG91bGQgaGF2
ZSBiZWVuIGFuIG9iamVjdC4iKTsKKyAgICBKU09iamVjdFJlZiBzdWJDbGFzcyA9IGNvbnN0X2Nh
c3Q8SlNPYmplY3RSZWY+KHJlc3VsdC52YWx1ZSgpKTsKKworICAgIGNoZWNrKEpTT2JqZWN0SGFz
UHJvcGVydHkoY29udGV4dCwgc3ViQ2xhc3MsIEFQSVN0cmluZygibWV0aG9kIikpLCAic3ViQ2xh
c3Mgc2hvdWxkIGhhdmUgZGVyaXZlZCBjbGFzc2VzIGZ1bmN0aW9ucy4iKTsKKyAgICBmdW5jdGlv
blJldHVybnNUcnVlKCIoZnVuY3Rpb24gKHN1YkNsYXNzLCBTdXBlckNsYXNzKSB7IHJldHVybiBz
dWJDbGFzcyBpbnN0YW5jZW9mIFN1cGVyQ2xhc3M7IH0pIiwgc3ViQ2xhc3MsIHN1cGVyQ2xhc3Mp
OworCisgICAgSlNDbGFzc1JlbGVhc2UoanNDbGFzcyk7Cit9CisKIHZvaWQgY29uZmlndXJlSlND
Rm9yVGVzdGluZygpCiB7CiAgICAgSlNDOjpDb25maWc6OmNvbmZpZ3VyZUZvclRlc3RpbmcoKTsK
QEAgLTY4Niw2ICs3MTIsNyBAQCBpbnQgdGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVy
KQogICAgIFJVTihwcm9taXNlVW5oYW5kbGVkUmVqZWN0aW9uRnJvbVVuaGFuZGxlZFJlamVjdGlv
bkNhbGxiYWNrKCkpOwogICAgIFJVTihwcm9taXNlRWFybHlIYW5kbGVkUmVqZWN0aW9ucygpKTsK
ICAgICBSVU4obWFya2VkSlNWYWx1ZUFycmF5QW5kR0MoKSk7CisgICAgUlVOKGNsYXNzRGVmaW5p
dGlvbldpdGhKU1N1YmNsYXNzKCkpOwogCiAgICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkgewogICAg
ICAgICBkYXRhTG9nTG4oIkZpbHRlcmVkIGFsbCB0ZXN0czogRVJST1IiKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQppbmRleCA0MjJjYmE1N2Y5NDE1MDc3MzAy
NzQ0MjlhMThjNDQxODlkOTczMWEyLi44Zjg3NTdiNGM1YzFjNjIyM2RiOWQ5NjgzMzc1MzI1MTEy
Y2ViMmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3Rh
cGkubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCkBA
IC0yODU5LDcgKzI4NTksOCBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqIGZp
bHRlcikKICAgICBSVU4ocHJvbWlzZUNyZWF0ZVJlamVjdGVkKCkpOwogICAgIFJVTihwYXJhbGxl
bFByb21pc2VSZXNvbHZlVGVzdCgpKTsKIAotICAgIHRlc3RPYmplY3RpdmVDQVBJTWFpbigpOwor
ICAgIGlmICghZmlsdGVyKQorICAgICAgICB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKTsKIH0KIAog
I2Vsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407201</attachid>
            <date>2020-08-25 10:00:29 -0700</date>
            <delta_ts>2020-08-25 13:30:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215047-20200825100028.patch</filename>
            <type>text/plain</type>
            <size>8652</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MTc0YmQxNGEyNmNlYzRkYjJlYjg1ZmZkNDVkYjJkMjRiZDU0ZDMyLi43MDc4ZTNjNGVlZGY3NGQ5
YzU0NWQ0NjM2ZmZkNjg0MTA4YWE2YTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAyMC0wOC0yNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0NsYXNzUmVmIHNob3VsZCB3b3JrIHdpdGggSlMgY2xhc3Mgc3lu
dGF4IGFuZCBzaG91bGQgYmUgcmV0cmlldmFibGUgdmlhIEFQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDQ3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5o
OgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QpOgorICAgICAg
ICAqIEFQSS90ZXN0cy90ZXN0YXBpLmNwcDoKKyAgICAgICAgKEFQSVN0cmluZzo6QVBJU3RyaW5n
KToKKyAgICAgICAgKFRlc3RBUEk6Om1hcmtlZEpTVmFsdWVBcnJheUFuZEdDKToKKyAgICAgICAg
KFRlc3RBUEk6OmNsYXNzRGVmaW5pdGlvbldpdGhKU1N1YmNsYXNzKToKKyAgICAgICAgKHRlc3RD
QVBJVmlhQ3BwKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAgICAgICAgKHRl
c3RPYmplY3RpdmVDQVBJKToKKwogMjAyMC0wOC0yNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEFkZCBjb25jdXJyZW5jeS1hd2FyZSB2ZXJzaW9u
IG9mIGlzQ2FsbGFibGUgLyBpc0NvbnN0cnVjdG9yIHRvIG1ha2UgaXQgdXNhYmxlIGluIERGRyBj
b21waWxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYWxsYmFj
a0Z1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxiYWNrRnVuY3Rp
b24uaAppbmRleCA4Y2MzY2ViNGMzODgzMTdjZjEzZWNhZDFhYzdhMDlmNmUyMjAzZDZkLi5kNGQx
ZDA4ZGU1MDA1NTc0YmUwYjI4ZWE2YjM5MTBkMGEwMWFmNzYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxiYWNrRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxiYWNrRnVuY3Rpb24uaApAQCAtNzksMTIgKzc5LDIxIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2tGdW5jdGlvbjo6Y29uc3Ry
dWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iCiB7CiAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNP
YmplY3QqIGNvbnN0cnVjdG9yID0gY2FsbEZyYW1lLT5qc0NhbGxlZSgpOworICAgIEpTVmFsdWUg
Y2FsbGVlID0gY2FsbEZyYW1lLT5qc0NhbGxlZSgpOworICAgIFQqIGNvbnN0cnVjdG9yID0ganND
YXN0PFQqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEpTQ29udGV4dFJlZiBjdHggPSB0
b1JlZihnbG9iYWxPYmplY3QpOwogICAgIEpTT2JqZWN0UmVmIGNvbnN0cnVjdG9yUmVmID0gdG9S
ZWYoY29uc3RydWN0b3IpOwogCi0gICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNr
IGNhbGxiYWNrID0ganNDYXN0PFQqPihjb25zdHJ1Y3RvciktPmNvbnN0cnVjdENhbGxiYWNrKCk7
CisgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrID0gY29uc3Ry
dWN0b3ItPmNvbnN0cnVjdENhbGxiYWNrKCk7CiAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlOworICAgICAgICBKU1ZhbHVlIG5ld1RhcmdldCA9IGNhbGxGcmFt
ZS0+bmV3VGFyZ2V0KCk7CisgICAgICAgIC8vIElmIHdlIGFyZSBkb2luZyBhIGRlcml2ZWQgY2xh
c3MgY29uc3RydWN0aW9uIGdldCB0aGUgLnByb3RvdHlwZSBwcm9wZXJ0eSBvZmYgdGhlIG5ldyB0
YXJnZXQgZmlyc3Qgc28gd2UgbG9vayBiZWhhdmUgY2xvc2VyIHRvIG5vcm1hbCBKUy4KKyAgICAg
ICAgaWYgKG5ld1RhcmdldCAhPSBjb25zdHJ1Y3RvcikgeworICAgICAgICAgICAgcHJvdG90eXBl
ID0gbmV3VGFyZ2V0LmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAg
ICB9CisKICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKTsKICAgICAgICAgVmVjdG9yPEpTVmFsdWVSZWYsIDE2PiBhcmd1bWVudHM7CiAgICAg
ICAgIGFyZ3VtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3VtZW50Q291bnQpOwpAQCAt
OTcsNiArMTA2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBBUElDYWxsYmFja0Z1
bmN0aW9uOjpjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2IKICAgICAgICAgICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAg
cmVzdWx0ID0gY2FsbGJhY2soY3R4LCBjb25zdHJ1Y3RvclJlZiwgYXJndW1lbnRDb3VudCwgYXJn
dW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CiAgICAgICAgIH0KKwogICAgICAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3Bl
LCB0b0pTKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTA0LDEwICsxMTQsMTkgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBBUElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QoSlNH
bG9iYWxPYmplY3QqIGdsb2IKICAgICAgICAgLy8gcmVzdWx0IG11c3QgYmUgYSB2YWxpZCBKU1Zh
bHVlLgogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlMocmVzdWx0KSk7CisKKyAgICAgICAgSlNPYmplY3QqIG5ld09iamVjdCA9IHRvSlMo
cmVzdWx0KTsKKyAgICAgICAgLy8gVGhpcyB3b24ndCB0cmlnZ2VyIHByb3h5IHRyYXBzIG9uIG5l
d09iamVjdCdzIHByb3RvdHlwZSBoYW5kbGVyIGJ1dCB0aGF0J3MgcHJvYmFibHkgZGVzaXJhYmxl
IGhlcmUgYW55d2F5LgorICAgICAgICBpZiAobmV3VGFyZ2V0ICE9IGNvbnN0cnVjdG9yICYmIG5l
d09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKSA9PSBjb25zdHJ1Y3Rvci0+Z2V0KGdsb2Jh
bE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKSkgeworICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgIG5ld09iamVjdC0+c2V0
UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSk7CisgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShuZXdPYmplY3QpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlMoSlNPYmplY3RNYWtlKGN0eCwganNDYXN0PEpTQ2FsbGJhY2tDb25z
dHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+Y2xhc3NSZWYoKSwgbnVsbHB0cikpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoSlNPYmplY3RNYWtlKGN0eCwganNDYXN0PEpTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvcio+KGNhbGxlZSktPmNsYXNzUmVmKCksIG51bGxwdHIpKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy90ZXN0YXBpLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jcHAKaW5kZXggOTQwMWViZjFmYjFhYzQ5OTE0ZDUyYjA4ODMwYjYxNTVkMTAwNzk3NS4uZGUz
ZGM3NGM2YzQ1OTk2ODJmZjcyODY3ZDNhYTI0ZGEwMzQ4OGYzNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkSlNWYWx1ZVJlZkFy
cmF5LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmUHJpdmF0ZS5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmUHJpdmF0ZS5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgog
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgpAQCAtNTAsNiArNTEsMTEgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAKKyAgICBBUElTdHJpbmcoU3RyaW5nIHN0cmluZykKKyAgICAgICAgOiBBUElT
dHJpbmcoc3RyaW5nLmFzY2lpKCkuZGF0YSgpKQorICAgIHsKKyAgICB9CisKICAgICB+QVBJU3Ry
aW5nKCkKICAgICB7CiAgICAgICAgIEpTU3RyaW5nUmVsZWFzZShtX3N0cmluZyk7CkBAIC0xNDMs
NiArMTQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJvbWlzZUVhcmx5SGFuZGxlZFJlamVjdGlv
bnMoKTsKICAgICB2b2lkIHRvcENhbGxGcmFtZUFjY2VzcygpOwogICAgIHZvaWQgbWFya2VkSlNW
YWx1ZUFycmF5QW5kR0MoKTsKKyAgICB2b2lkIGNsYXNzRGVmaW5pdGlvbldpdGhKU1N1YmNsYXNz
KCk7CiAKICAgICBpbnQgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KIApAQCAt
NjIxLDIyICs2MjgsMTggQEAgdm9pZCBUZXN0QVBJOjp0b3BDYWxsRnJhbWVBY2Nlc3MoKQogCiB2
b2lkIFRlc3RBUEk6Om1hcmtlZEpTVmFsdWVBcnJheUFuZEdDKCkKIHsKLSAgICBhdXRvIHRlc3RN
YXJrZWRKU1ZhbHVlQXJyYXkgPSBbJl0odW5zaWduZWQgY291bnQpIHsKKyAgICBhdXRvIHRlc3RN
YXJrZWRKU1ZhbHVlQXJyYXkgPSBbJl0gKHVuc2lnbmVkIGNvdW50KSB7CiAgICAgICAgIGF1dG8q
IGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CiAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2tlcihnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgICAgICBKU0M6Ok1hcmtlZEpTVmFsdWVS
ZWZBcnJheSB2YWx1ZXMoY29udGV4dCwgY291bnQpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAgU3RyaW5nIHRh
cmdldCA9IG1ha2VTdHJpbmcoIlByZWZpeCIsIGluZGV4KTsKLSAgICAgICAgICAgIGF1dG8gaG9s
ZGVyID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZSh0YXJnZXQpOwotICAgICAgICAgICAgSlNW
YWx1ZVJlZiBzdHJpbmcgPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBob2xkZXIuZ2V0KCkp
OworICAgICAgICAgICAgSlNWYWx1ZVJlZiBzdHJpbmcgPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250
ZXh0LCBBUElTdHJpbmcobWFrZVN0cmluZygiUHJlZml4IiwgaW5kZXgpKSk7CiAgICAgICAgICAg
ICB2YWx1ZXNbaW5kZXhdID0gc3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIEpTU3luY2hyb25v
dXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhjb250ZXh0KTsKICAgICAgICAgYm9vbCBvayA9
IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBTdHJpbmcgdGFyZ2V0ID0gbWFrZVN0cmluZygiUHJlZml4
IiwgaW5kZXgpOwotICAgICAgICAgICAgYXV0byBob2xkZXIgPSBPcGFxdWVKU1N0cmluZzo6dHJ5
Q3JlYXRlKHRhcmdldCk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVmIHN0cmluZyA9IEpTVmFsdWVN
YWtlU3RyaW5nKGNvbnRleHQsIGhvbGRlci5nZXQoKSk7CisgICAgICAgICAgICBKU1ZhbHVlUmVm
IHN0cmluZyA9IEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIEFQSVN0cmluZyhtYWtlU3RyaW5n
KCJQcmVmaXgiLCBpbmRleCkpKTsKICAgICAgICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaWN0RXF1
YWwoY29udGV4dCwgdmFsdWVzW2luZGV4XSwgc3RyaW5nKSkKICAgICAgICAgICAgICAgICBvayA9
IGZhbHNlOwogICAgICAgICB9CkBAIC02NDYsNiArNjQ5LDMxIEBAIHZvaWQgVGVzdEFQSTo6bWFy
a2VkSlNWYWx1ZUFycmF5QW5kR0MoKQogICAgIHRlc3RNYXJrZWRKU1ZhbHVlQXJyYXkoMTAwMCk7
CiB9CiAKK3ZvaWQgVGVzdEFQSTo6Y2xhc3NEZWZpbml0aW9uV2l0aEpTU3ViY2xhc3MoKQorewor
ICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0
eTsKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc0NsYXNzOworCisgICAgYXV0byBjb25zdHJ1Y3Rv
ciA9IFtdIChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1Zh
bHVlUmVmKiwgSlNWYWx1ZVJlZiopIC0+IEpTT2JqZWN0UmVmIHsKKworICAgICAgICByZXR1cm4g
SlNPYmplY3RNYWtlKGN0eCwganNDbGFzcywgbnVsbHB0cik7CisgICAgfTsKKworICAgIGRlZmlu
aXRpb24uY2FsbEFzQ29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjsKKyAgICBqc0NsYXNzID0gSlND
bGFzc0NyZWF0ZSgmZGVmaW5pdGlvbik7CisgICAgSlNPYmplY3RSZWYgc3VwZXJDbGFzcyA9IEpT
T2JqZWN0TWFrZUNvbnN0cnVjdG9yKGNvbnRleHQsIGpzQ2xhc3MsIGNvbnN0cnVjdG9yKTsKKwor
ICAgIFNjcmlwdFJlc3VsdCByZXN1bHQgPSBjYWxsRnVuY3Rpb24oIihmdW5jdGlvbiAoU3VwZXJD
bGFzcykgeyBjbGFzcyBTdWJDbGFzcyBleHRlbmRzIFN1cGVyQ2xhc3MgeyBtZXRob2QoKSB7IHJl
dHVybiAndmFsdWUnOyB9IH07IHJldHVybiBuZXcgU3ViQ2xhc3MoKTsgfSkiLCBzdXBlckNsYXNz
KTsKKyAgICBjaGVjayghIXJlc3VsdCwgImNyZWF0aW5nIGEgc3ViY2xhc3Mgc2hvdWxkIG5vdCB0
aHJvdy4iKTsKKyAgICBjaGVjayhKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgcmVzdWx0LnZhbHVl
KCkpLCAicmVzdWx0IG9mIGNvbnN0cnVjdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGFuIG9iamVjdC4i
KTsKKyAgICBKU09iamVjdFJlZiBzdWJDbGFzcyA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KHJl
c3VsdC52YWx1ZSgpKTsKKworICAgIGNoZWNrKEpTT2JqZWN0SGFzUHJvcGVydHkoY29udGV4dCwg
c3ViQ2xhc3MsIEFQSVN0cmluZygibWV0aG9kIikpLCAic3ViQ2xhc3Mgc2hvdWxkIGhhdmUgZGVy
aXZlZCBjbGFzc2VzIGZ1bmN0aW9ucy4iKTsKKyAgICBmdW5jdGlvblJldHVybnNUcnVlKCIoZnVu
Y3Rpb24gKHN1YkNsYXNzLCBTdXBlckNsYXNzKSB7IHJldHVybiBzdWJDbGFzcyBpbnN0YW5jZW9m
IFN1cGVyQ2xhc3M7IH0pIiwgc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOworCisgICAgSlNDbGFzc1Jl
bGVhc2UoanNDbGFzcyk7Cit9CisKIHZvaWQgY29uZmlndXJlSlNDRm9yVGVzdGluZygpCiB7CiAg
ICAgSlNDOjpDb25maWc6OmNvbmZpZ3VyZUZvclRlc3RpbmcoKTsKQEAgLTY4Niw2ICs3MTQsNyBA
QCBpbnQgdGVzdENBUElWaWFDcHAoY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTihwcm9taXNl
VW5oYW5kbGVkUmVqZWN0aW9uRnJvbVVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKCkpOwogICAg
IFJVTihwcm9taXNlRWFybHlIYW5kbGVkUmVqZWN0aW9ucygpKTsKICAgICBSVU4obWFya2VkSlNW
YWx1ZUFycmF5QW5kR0MoKSk7CisgICAgUlVOKGNsYXNzRGVmaW5pdGlvbldpdGhKU1N1YmNsYXNz
KCkpOwogCiAgICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkgewogICAgICAgICBkYXRhTG9nTG4oIkZp
bHRlcmVkIGFsbCB0ZXN0czogRVJST1IiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5tbQppbmRleCA4ZjYzNmM2NDE4YjZmNzgyOTlmYmE4ZWRiZDUzNDk3ZWFiNDA1
M2YxLi5iNzlhYjJiYzNhZjFiYzUzZThjODE4YTIzM2RiMDczNjg0YmViMWQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCkBAIC0yODU5LDcgKzI4NTksOCBA
QCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4ocHJv
bWlzZUNyZWF0ZVJlamVjdGVkKCkpOwogICAgIFJVTihwYXJhbGxlbFByb21pc2VSZXNvbHZlVGVz
dCgpKTsKIAotICAgIHRlc3RPYmplY3RpdmVDQVBJTWFpbigpOworICAgIGlmICghZmlsdGVyKQor
ICAgICAgICB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKTsKIH0KIAogI2Vsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407223</attachid>
            <date>2020-08-25 13:30:38 -0700</date>
            <delta_ts>2020-08-27 09:07:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215047-20200825133037.patch</filename>
            <type>text/plain</type>
            <size>11887</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MTc0YmQxNGEyNmNlYzRkYjJlYjg1ZmZkNDVkYjJkMjRiZDU0ZDMyLi5iNWNiZDI3MThmZDZjMWUw
NWZlMmIwNjgwM2Q3ZWQ4ZTczOWU4M2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAyMC0wOC0yNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0NsYXNzUmVmIHNob3VsZCB3b3JrIHdpdGggSlMgY2xhc3Mgc3lu
dGF4LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1
MDQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBpcyBkb25lIGJ5IGNoZWNraW5nIGlmIHZhbHVlIHJldHVybmVkIGJ5IHRoZQorICAgICAgICBj
YWxsQXNDb25zdHJ1Y3RvciBwYXJhbWV0ZXIgdG8gSlNPYmplY3RNYWtlQ29uc3RydWN0b3IgcmV0
dXJucyBhbgorICAgICAgICBvYmplY3QgYWxsb2NhdGVkIGFzIHRoZSBqc0NsYXNzIHBhcmFtZXRl
ci4gV2hlbiB0aGF0IGhhcHBlbnMgd2UKKyAgICAgICAgcmVwbGFjZSB0aGUgcHJvdG90eXBlIG9m
IHRoZSByZXR1cm5lZCBvYmplY3Qgd2l0aCB0aGUgcHJvdG90eXBlIG9mCisgICAgICAgIHRoZSBu
ZXcudGFyZ2V0LiBJZGVhbGx5IHdlIHdvdWxkIGhhdmUgcGFzc2VkIHRoZSBkZXJpdmVkIGNsYXNz
ZXMKKyAgICAgICAgY29uc3RydWN0b3IgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIG91ciBzdXBwb3J0
IGZvciBKUyBzdWJjbGFzc2luZworICAgICAgICBidXQgYXQgdGhpcyBwb2ludCB0aGF0J3MgcHJv
YmFibHkgbm90IGNvbXBhdGlibGUgd2l0aCB0b28gbWFueQorICAgICAgICBhcHBsaWNhdGlvbnMu
CisKKyAgICAgICAgKiBBUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpB
UElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIEFQSS9KU09iamVjdFJl
Zi5oOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmNwcDoKKyAgICAgICAgKEFQSVN0cmlu
Zzo6QVBJU3RyaW5nKToKKyAgICAgICAgKFRlc3RBUEk6Om1hcmtlZEpTVmFsdWVBcnJheUFuZEdD
KToKKyAgICAgICAgKFRlc3RBUEk6OmNsYXNzRGVmaW5pdGlvbldpdGhKU1N1YmNsYXNzKToKKyAg
ICAgICAgKHRlc3RDQVBJVmlhQ3BwKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToK
KyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKwogMjAyMC0wOC0yNSAgWXVzdWtlIFN1enVr
aSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEFkZCBjb25jdXJyZW5jeS1h
d2FyZSB2ZXJzaW9uIG9mIGlzQ2FsbGFibGUgLyBpc0NvbnN0cnVjdG9yIHRvIG1ha2UgaXQgdXNh
YmxlIGluIERGRyBjb21waWxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElDYWxsYmFja0Z1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNh
bGxiYWNrRnVuY3Rpb24uaAppbmRleCA4Y2MzY2ViNGMzODgzMTdjZjEzZWNhZDFhYzdhMDlmNmUy
MjAzZDZkLi5kNGQxZDA4ZGU1MDA1NTc0YmUwYjI4ZWE2YjM5MTBkMGEwMWFmNzYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxiYWNrRnVuY3Rpb24uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxiYWNrRnVuY3Rpb24uaApAQCAtNzks
MTIgKzc5LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2tGdW5j
dGlvbjo6Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iCiB7CiAgICAgVk0mIHZtID0gZ2V0
Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gY2FsbEZyYW1lLT5qc0NhbGxlZSgpOwor
ICAgIEpTVmFsdWUgY2FsbGVlID0gY2FsbEZyYW1lLT5qc0NhbGxlZSgpOworICAgIFQqIGNvbnN0
cnVjdG9yID0ganNDYXN0PFQqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEpTQ29udGV4
dFJlZiBjdHggPSB0b1JlZihnbG9iYWxPYmplY3QpOwogICAgIEpTT2JqZWN0UmVmIGNvbnN0cnVj
dG9yUmVmID0gdG9SZWYoY29uc3RydWN0b3IpOwogCi0gICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1
Y3RvckNhbGxiYWNrIGNhbGxiYWNrID0ganNDYXN0PFQqPihjb25zdHJ1Y3RvciktPmNvbnN0cnVj
dENhbGxiYWNrKCk7CisgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxi
YWNrID0gY29uc3RydWN0b3ItPmNvbnN0cnVjdENhbGxiYWNrKCk7CiAgICAgaWYgKGNhbGxiYWNr
KSB7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOworICAgICAgICBKU1ZhbHVlIG5ld1Rhcmdl
dCA9IGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCk7CisgICAgICAgIC8vIElmIHdlIGFyZSBkb2luZyBh
IGRlcml2ZWQgY2xhc3MgY29uc3RydWN0aW9uIGdldCB0aGUgLnByb3RvdHlwZSBwcm9wZXJ0eSBv
ZmYgdGhlIG5ldyB0YXJnZXQgZmlyc3Qgc28gd2UgbG9vayBiZWhhdmUgY2xvc2VyIHRvIG5vcm1h
bCBKUy4KKyAgICAgICAgaWYgKG5ld1RhcmdldCAhPSBjb25zdHJ1Y3RvcikgeworICAgICAgICAg
ICAgcHJvdG90eXBlID0gbmV3VGFyZ2V0LmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgICAgICB9CisKICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKTsKICAgICAgICAgVmVjdG9yPEpTVmFsdWVSZWYsIDE2PiBhcmd1
bWVudHM7CiAgICAgICAgIGFyZ3VtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3VtZW50
Q291bnQpOwpAQCAtOTcsNiArMTA2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBB
UElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2IKICAgICAg
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhnbG9iYWxPYmplY3QpOwog
ICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soY3R4LCBjb25zdHJ1Y3RvclJlZiwgYXJndW1l
bnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CiAgICAgICAgIH0KKwogICAg
ICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIHNjb3BlLCB0b0pTKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSk7CiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTA0LDEwICsxMTQs
MTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBBUElDYWxsYmFja0Z1bmN0aW9uOjpj
b25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2IKICAgICAgICAgLy8gcmVzdWx0IG11c3QgYmUg
YSB2YWxpZCBKU1ZhbHVlLgogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlMocmVzdWx0KSk7CisKKyAgICAgICAgSlNPYmplY3QqIG5ld09i
amVjdCA9IHRvSlMocmVzdWx0KTsKKyAgICAgICAgLy8gVGhpcyB3b24ndCB0cmlnZ2VyIHByb3h5
IHRyYXBzIG9uIG5ld09iamVjdCdzIHByb3RvdHlwZSBoYW5kbGVyIGJ1dCB0aGF0J3MgcHJvYmFi
bHkgZGVzaXJhYmxlIGhlcmUgYW55d2F5LgorICAgICAgICBpZiAobmV3VGFyZ2V0ICE9IGNvbnN0
cnVjdG9yICYmIG5ld09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKSA9PSBjb25zdHJ1Y3Rv
ci0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKSkgeworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgIG5l
d09iamVjdC0+c2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSk7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuZXdPYmplY3QpOwogICAgIH0KICAgICAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoSlNPYmplY3RNYWtlKGN0eCwganNDYXN0PEpT
Q2FsbGJhY2tDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+Y2xhc3NSZWYoKSwgbnVsbHB0cikp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoSlNPYmplY3RNYWtlKGN0eCwganND
YXN0PEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcio+KGNhbGxlZSktPmNsYXNzUmVmKCksIG51bGxwdHIp
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU09iamVjdFJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09i
amVjdFJlZi5oCmluZGV4IDMzMGY1ZTNiZTUwODRjYjM5N2Q4ZDQ2ZTg4NDIyMDVlZGQ1YzBlOGIu
LjYwYmFlOTU5YjY4MTBkZmExZDA3NWI3ZGZkNzQwOTBhZGIxMTVhYTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmgKQEAgLTMzOSw2ICszMzksOCBAQCBKU1N0YXRpY1Zh
bHVlIFN0YXRpY1ZhbHVlQXJyYXlbXSA9IHsKIFN0YW5kYXJkIEphdmFTY3JpcHQgcHJhY3RpY2Ug
Y2FsbHMgZm9yIHN0b3JpbmcgZnVuY3Rpb24gb2JqZWN0cyBpbiBwcm90b3R5cGVzLCBzbyB0aGV5
IGNhbiBiZSBzaGFyZWQuIFRoZSBkZWZhdWx0IEpTQ2xhc3MgY3JlYXRlZCBieSBKU0NsYXNzQ3Jl
YXRlIGZvbGxvd3MgdGhpcyBpZGlvbSwgaW5zdGFudGlhdGluZyBvYmplY3RzIHdpdGggYSBzaGFy
ZWQsIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGluZyBwcm90b3R5cGUgY29udGFpbmluZyB0aGUgY2xh
c3MncyBmdW5jdGlvbiBvYmplY3RzLiBUaGUga0pTQ2xhc3NBdHRyaWJ1dGVOb0F1dG9tYXRpY1By
b3RvdHlwZSBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoYXQgYSBKU0NsYXNzIHNob3VsZCBub3QgYXV0
b21hdGljYWxseSBnZW5lcmF0ZSBzdWNoIGEgcHJvdG90eXBlLiBUaGUgcmVzdWx0aW5nIEpTQ2xh
c3MgaW5zdGFudGlhdGVzIG9iamVjdHMgd2l0aCB0aGUgZGVmYXVsdCBvYmplY3QgcHJvdG90eXBl
LCBhbmQgZ2l2ZXMgZWFjaCBpbnN0YW5jZSBvYmplY3QgaXRzIG93biBjb3B5IG9mIHRoZSBjbGFz
cydzIGZ1bmN0aW9uIG9iamVjdHMuCiAKIEEgTlVMTCBjYWxsYmFjayBzcGVjaWZpZXMgdGhhdCB0
aGUgZGVmYXVsdCBvYmplY3QgY2FsbGJhY2sgc2hvdWxkIHN1YnN0aXR1dGUsIGV4Y2VwdCBpbiB0
aGUgY2FzZSBvZiBoYXNQcm9wZXJ0eSwgd2hlcmUgaXQgc3BlY2lmaWVzIHRoYXQgZ2V0UHJvcGVy
dHkgc2hvdWxkIHN1YnN0aXR1dGUuCisKK1doZW4gc2V0dGluZyBjYWxsQXNDb25zdHJ1Y3RvciBp
dCBzaG91bGQgYmUgbm90ZWQgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gc3VwcG9ydCBKUyBz
dWJjbGFzc2luZyB2aWEgdGhlIGV4dGVuZHMgY2xhdXNlIG9mIEpTIGNsYXNzIHN5bnRheC4gVGhp
cyBpcyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdheSB0byB2ZW5k
IHRoZSBkZXJpdmVkIGNsYXNzJ3MgY29uc3RydWN0b3IgdG8gY2FsbEFzQ29uc3RydWN0b3IuIElm
IHlvdSBpbnRlbmQgdG8gc3ViY2xhc3MgaXQncyByZWNvbWVuZGVkIHRvIHVzZSBKU09iamVjdE1h
a2VDb25zdHJ1Y3Rvci4KICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgaW50ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjsgLyogY3VycmVudCAoYW5kIG9ubHkpIHZlcnNp
b24gaXMgMCAqLwpAQCAtNDI2LDcgKzQyOCw3IEBAIEpTX0VYUE9SVCBKU09iamVjdFJlZiBKU09i
amVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluCiBA
cGFyYW0ganNDbGFzcyBBIEpTQ2xhc3MgdGhhdCBpcyB0aGUgY2xhc3MgeW91ciBjb25zdHJ1Y3Rv
ciB3aWxsIGFzc2lnbiB0byB0aGUgb2JqZWN0cyBpdHMgY29uc3RydWN0cy4ganNDbGFzcyB3aWxs
IGJlIHVzZWQgdG8gc2V0IHRoZSBjb25zdHJ1Y3RvcidzIC5wcm90b3R5cGUgcHJvcGVydHksIGFu
ZCB0byBldmFsdWF0ZSAnaW5zdGFuY2VvZicgZXhwcmVzc2lvbnMuIFBhc3MgTlVMTCB0byB1c2Ug
dGhlIGRlZmF1bHQgb2JqZWN0IGNsYXNzLgogQHBhcmFtIGNhbGxBc0NvbnN0cnVjdG9yIEEgSlNP
YmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHlvdXIgY29uc3Ry
dWN0b3IgaXMgdXNlZCBpbiBhICduZXcnIGV4cHJlc3Npb24uIFBhc3MgTlVMTCB0byB1c2UgdGhl
IGRlZmF1bHQgb2JqZWN0IGNvbnN0cnVjdG9yLgogQHJlc3VsdCBBIEpTT2JqZWN0IHRoYXQgaXMg
YSBjb25zdHJ1Y3Rvci4gVGhlIG9iamVjdCdzIHByb3RvdHlwZSB3aWxsIGJlIHRoZSBkZWZhdWx0
IG9iamVjdCBwcm90b3R5cGUuCi1AZGlzY3Vzc2lvbiBUaGUgZGVmYXVsdCBvYmplY3QgY29uc3Ry
dWN0b3IgdGFrZXMgbm8gYXJndW1lbnRzIGFuZCBjb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFz
cyBqc0NsYXNzIHdpdGggbm8gcHJpdmF0ZSBkYXRhLgorQGRpc2N1c3Npb24gVGhlIGRlZmF1bHQg
b2JqZWN0IGNvbnN0cnVjdG9yIHRha2VzIG5vIGFyZ3VtZW50cyBhbmQgY29uc3RydWN0cyBhbiBv
YmplY3Qgb2YgY2xhc3MganNDbGFzcyB3aXRoIG5vIHByaXZhdGUgZGF0YS4gSWYgdGhlIGNvbnN0
cnVjdG9yIGlzIGluaGVyaXRlZCB2aWEgSlMgc3ViY2xhc3NpbmcgYW5kIHRoZSB2YWx1ZSByZXR1
cm5lZCBmcm9tIGNhbGxBc0NvbnN0cnVjdG9yIHdhcyBjcmVhdGVkIHdpdGgganNDbGFzcywgdGhl
biB0aGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgaGF2ZSBpdCdzIHByb3RvdHlwZSBvdmVycmlkZGVu
IHRvIHRoZSBkZXJpdmVkIGNsYXNzJ3MgcHJvdG90eXBlLgogKi8KIEpTX0VYUE9SVCBKU09iamVj
dFJlZiBKU09iamVjdE1ha2VDb25zdHJ1Y3RvcihKU0NvbnRleHRSZWYgY3R4LCBKU0NsYXNzUmVm
IGpzQ2xhc3MsIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsQXNDb25zdHJ1
Y3Rvcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVz
dGFwaS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCmlu
ZGV4IDk0MDFlYmYxZmIxYWM0OTkxNGQ1MmIwODgzMGI2MTU1ZDEwMDc5NzUuLmU4M2I1YzZlNWI5
ODY4OTY1ODZmNjUxMTI0ZGQ5MzQ3MTNmMGQ1MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0SW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEpTVmFsdWVSZWZBcnJheS5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZlByaXZhdGUuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZlByaXZhdGUuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KQEAgLTUwLDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCisgICAgQVBJU3RyaW5nKFN0cmluZyBzdHJpbmcpCisgICAgICAgIDogQVBJU3RyaW5nKHN0
cmluZy5hc2NpaSgpLmRhdGEoKSkKKyAgICB7CisgICAgfQorCiAgICAgfkFQSVN0cmluZygpCiAg
ICAgewogICAgICAgICBKU1N0cmluZ1JlbGVhc2UobV9zdHJpbmcpOwpAQCAtMTQzLDYgKzE0OSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHByb21pc2VFYXJseUhhbmRsZWRSZWplY3Rpb25zKCk7CiAg
ICAgdm9pZCB0b3BDYWxsRnJhbWVBY2Nlc3MoKTsKICAgICB2b2lkIG1hcmtlZEpTVmFsdWVBcnJh
eUFuZEdDKCk7CisgICAgdm9pZCBjbGFzc0RlZmluaXRpb25XaXRoSlNTdWJjbGFzcygpOwogCiAg
ICAgaW50IGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CiAKQEAgLTYyMSwyMiAr
NjI4LDE4IEBAIHZvaWQgVGVzdEFQSTo6dG9wQ2FsbEZyYW1lQWNjZXNzKCkKIAogdm9pZCBUZXN0
QVBJOjptYXJrZWRKU1ZhbHVlQXJyYXlBbmRHQygpCiB7Ci0gICAgYXV0byB0ZXN0TWFya2VkSlNW
YWx1ZUFycmF5ID0gWyZdKHVuc2lnbmVkIGNvdW50KSB7CisgICAgYXV0byB0ZXN0TWFya2VkSlNW
YWx1ZUFycmF5ID0gWyZdICh1bnNpZ25lZCBjb3VudCkgewogICAgICAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSB0b0pTKGNvbnRleHQpOwogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
Z2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICAgICAgSlNDOjpNYXJrZWRKU1ZhbHVlUmVmQXJyYXkg
dmFsdWVzKGNvbnRleHQsIGNvdW50KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFN0cmluZyB0YXJnZXQgPSBt
YWtlU3RyaW5nKCJQcmVmaXgiLCBpbmRleCk7Ci0gICAgICAgICAgICBhdXRvIGhvbGRlciA9IE9w
YXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUodGFyZ2V0KTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYg
c3RyaW5nID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgaG9sZGVyLmdldCgpKTsKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWYgc3RyaW5nID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgQVBJ
U3RyaW5nKG1ha2VTdHJpbmcoIlByZWZpeCIsIGluZGV4KSkpOwogICAgICAgICAgICAgdmFsdWVz
W2luZGV4XSA9IHN0cmluZzsKICAgICAgICAgfQogICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFn
ZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoY29udGV4dCk7CiAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkg
ewotICAgICAgICAgICAgU3RyaW5nIHRhcmdldCA9IG1ha2VTdHJpbmcoIlByZWZpeCIsIGluZGV4
KTsKLSAgICAgICAgICAgIGF1dG8gaG9sZGVyID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZSh0
YXJnZXQpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZiBzdHJpbmcgPSBKU1ZhbHVlTWFrZVN0cmlu
Zyhjb250ZXh0LCBob2xkZXIuZ2V0KCkpOworICAgICAgICAgICAgSlNWYWx1ZVJlZiBzdHJpbmcg
PSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBBUElTdHJpbmcobWFrZVN0cmluZygiUHJlZml4
IiwgaW5kZXgpKSk7CiAgICAgICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRl
eHQsIHZhbHVlc1tpbmRleF0sIHN0cmluZykpCiAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsK
ICAgICAgICAgfQpAQCAtNjQ2LDYgKzY0OSwyOSBAQCB2b2lkIFRlc3RBUEk6Om1hcmtlZEpTVmFs
dWVBcnJheUFuZEdDKCkKICAgICB0ZXN0TWFya2VkSlNWYWx1ZUFycmF5KDEwMDApOwogfQogCit2
b2lkIFRlc3RBUEk6OmNsYXNzRGVmaW5pdGlvbldpdGhKU1N1YmNsYXNzKCkKK3sKKyAgICBKU0Ns
YXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CisgICAg
c3RhdGljIEpTQ2xhc3NSZWYganNDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmRlZmluaXRpb24pOwor
CisgICAgYXV0byBjb25zdHJ1Y3RvciA9IFtdIChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJl
Ziwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmKiwgSlNWYWx1ZVJlZiopIC0+IEpTT2JqZWN0UmVm
IHsKKworICAgICAgICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNDbGFzcywgbnVsbHB0cik7
CisgICAgfTsKKworICAgIEpTT2JqZWN0UmVmIHN1cGVyQ2xhc3MgPSBKU09iamVjdE1ha2VDb25z
dHJ1Y3Rvcihjb250ZXh0LCBqc0NsYXNzLCBjb25zdHJ1Y3Rvcik7CisKKyAgICBTY3JpcHRSZXN1
bHQgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKCIoZnVuY3Rpb24gKFN1cGVyQ2xhc3MpIHsgY2xhc3Mg
U3ViQ2xhc3MgZXh0ZW5kcyBTdXBlckNsYXNzIHsgbWV0aG9kKCkgeyByZXR1cm4gJ3ZhbHVlJzsg
fSB9OyByZXR1cm4gbmV3IFN1YkNsYXNzKCk7IH0pIiwgc3VwZXJDbGFzcyk7CisgICAgY2hlY2so
ISFyZXN1bHQsICJjcmVhdGluZyBhIHN1YmNsYXNzIHNob3VsZCBub3QgdGhyb3cuIik7CisgICAg
Y2hlY2soSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHJlc3VsdC52YWx1ZSgpKSwgInJlc3VsdCBv
ZiBjb25zdHJ1Y3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBhbiBvYmplY3QuIik7CisgICAgSlNPYmpl
Y3RSZWYgc3ViQ2xhc3MgPSBjb25zdF9jYXN0PEpTT2JqZWN0UmVmPihyZXN1bHQudmFsdWUoKSk7
CisKKyAgICBjaGVjayhKU09iamVjdEhhc1Byb3BlcnR5KGNvbnRleHQsIHN1YkNsYXNzLCBBUElT
dHJpbmcoIm1ldGhvZCIpKSwgInN1YkNsYXNzIHNob3VsZCBoYXZlIGRlcml2ZWQgY2xhc3NlcyBm
dW5jdGlvbnMuIik7CisgICAgZnVuY3Rpb25SZXR1cm5zVHJ1ZSgiKGZ1bmN0aW9uIChzdWJDbGFz
cywgU3VwZXJDbGFzcykgeyByZXR1cm4gc3ViQ2xhc3MgaW5zdGFuY2VvZiBTdXBlckNsYXNzOyB9
KSIsIHN1YkNsYXNzLCBzdXBlckNsYXNzKTsKKworICAgIEpTQ2xhc3NSZWxlYXNlKGpzQ2xhc3Mp
OworfQorCiB2b2lkIGNvbmZpZ3VyZUpTQ0ZvclRlc3RpbmcoKQogewogICAgIEpTQzo6Q29uZmln
Ojpjb25maWd1cmVGb3JUZXN0aW5nKCk7CkBAIC02ODYsNiArNzEyLDcgQEAgaW50IHRlc3RDQVBJ
VmlhQ3BwKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4ocHJvbWlzZVVuaGFuZGxlZFJlamVj
dGlvbkZyb21VbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjaygpKTsKICAgICBSVU4ocHJvbWlzZUVh
cmx5SGFuZGxlZFJlamVjdGlvbnMoKSk7CiAgICAgUlVOKG1hcmtlZEpTVmFsdWVBcnJheUFuZEdD
KCkpOworICAgIFJVTihjbGFzc0RlZmluaXRpb25XaXRoSlNTdWJjbGFzcygpKTsKIAogICAgIGlm
ICh0YXNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZGF0YUxvZ0xuKCJGaWx0ZXJlZCBhbGwgdGVz
dHM6IEVSUk9SIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0K
aW5kZXggOGY2MzZjNjQxOGI2Zjc4Mjk5ZmJhOGVkYmQ1MzQ5N2VhYjQwNTNmMS4uYjc5YWIyYmMz
YWYxYmM1M2U4YzgxOGEyMzNkYjA3MzY4NGJlYjFkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQpAQCAtMjg1OSw3ICsyODU5LDggQEAgdm9pZCB0ZXN0T2Jq
ZWN0aXZlQ0FQSShjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHByb21pc2VDcmVhdGVSZWpl
Y3RlZCgpKTsKICAgICBSVU4ocGFyYWxsZWxQcm9taXNlUmVzb2x2ZVRlc3QoKSk7CiAKLSAgICB0
ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKTsKKyAgICBpZiAoIWZpbHRlcikKKyAgICAgICAgdGVzdE9i
amVjdGl2ZUNBUElNYWluKCk7CiB9CiAKICNlbHNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407405</attachid>
            <date>2020-08-27 09:07:57 -0700</date>
            <delta_ts>2020-08-27 09:41:33 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-215047-20200827090756.patch</filename>
            <type>text/plain</type>
            <size>14413</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MTc0YmQxNGEyNmNlYzRkYjJlYjg1ZmZkNDVkYjJkMjRiZDU0ZDMyLi5hZjkxMDhlZTZkNmNkYmNl
OGNjMzQ4YWY4M2UxMWI0ZmIxZjdlMDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAyMC0wOC0yNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0NsYXNzUmVmIHNob3VsZCB3b3JrIHdpdGggSlMgY2xhc3Mgc3lu
dGF4LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1
MDQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgVGhpcyBp
cyBkb25lIGJ5IGNoZWNraW5nIGlmIHZhbHVlIHJldHVybmVkIGJ5IHRoZQorICAgICAgICBjYWxs
QXNDb25zdHJ1Y3RvciBwYXJhbWV0ZXIgdG8gSlNPYmplY3RNYWtlQ29uc3RydWN0b3IgcmV0dXJu
cyBhbgorICAgICAgICBvYmplY3QgYWxsb2NhdGVkIGFzIHRoZSBqc0NsYXNzIHBhcmFtZXRlci4g
V2hlbiB0aGF0IGhhcHBlbnMgd2UKKyAgICAgICAgcmVwbGFjZSB0aGUgcHJvdG90eXBlIG9mIHRo
ZSByZXR1cm5lZCBvYmplY3Qgd2l0aCB0aGUgcHJvdG90eXBlIG9mCisgICAgICAgIHRoZSBuZXcu
dGFyZ2V0LiBJZGVhbGx5IHdlIHdvdWxkIGhhdmUgcGFzc2VkIHRoZSBkZXJpdmVkIGNsYXNzZXMK
KyAgICAgICAgY29uc3RydWN0b3IgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIG91ciBzdXBwb3J0IGZv
ciBKUyBzdWJjbGFzc2luZworICAgICAgICBidXQgYXQgdGhpcyBwb2ludCB0aGF0J3MgcHJvYmFi
bHkgbm90IGNvbXBhdGlibGUgd2l0aCB0b28gbWFueQorICAgICAgICBhcHBsaWNhdGlvbnMuCisK
KyAgICAgICAgKiBBUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpBUElD
YWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5o
OgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmNwcDoKKyAgICAgICAgKEFQSVN0cmluZzo6
QVBJU3RyaW5nKToKKyAgICAgICAgKFRlc3RBUEk6Om1hcmtlZEpTVmFsdWVBcnJheUFuZEdDKToK
KyAgICAgICAgKFRlc3RBUEk6OmNsYXNzRGVmaW5pdGlvbldpdGhKU1N1YmNsYXNzKToKKyAgICAg
ICAgKHRlc3RDQVBJVmlhQ3BwKToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAg
ICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKwogMjAyMC0wOC0yNSAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEFkZCBjb25jdXJyZW5jeS1hd2Fy
ZSB2ZXJzaW9uIG9mIGlzQ2FsbGFibGUgLyBpc0NvbnN0cnVjdG9yIHRvIG1ha2UgaXQgdXNhYmxl
IGluIERGRyBjb21waWxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9B
UElDYWxsYmFja0Z1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxi
YWNrRnVuY3Rpb24uaAppbmRleCA4Y2MzY2ViNGMzODgzMTdjZjEzZWNhZDFhYzdhMDlmNmUyMjAz
ZDZkLi5lNmMzZWE4MTVmOWViY2FhZTY0OGU3NGM3Yjg5OGRjZWMwYjhhMmZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxiYWNrRnVuY3Rpb24uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxiYWNrRnVuY3Rpb24uaApAQCAtNzksMTIg
Kzc5LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2tGdW5jdGlv
bjo6Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iCiB7CiAgICAgVk0mIHZtID0gZ2V0Vk0o
Z2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gY2FsbEZyYW1lLT5qc0NhbGxlZSgpOworICAg
IEpTVmFsdWUgY2FsbGVlID0gY2FsbEZyYW1lLT5qc0NhbGxlZSgpOworICAgIFQqIGNvbnN0cnVj
dG9yID0ganNDYXN0PFQqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEpTQ29udGV4dFJl
ZiBjdHggPSB0b1JlZihnbG9iYWxPYmplY3QpOwogICAgIEpTT2JqZWN0UmVmIGNvbnN0cnVjdG9y
UmVmID0gdG9SZWYoY29uc3RydWN0b3IpOwogCi0gICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rv
ckNhbGxiYWNrIGNhbGxiYWNrID0ganNDYXN0PFQqPihjb25zdHJ1Y3RvciktPmNvbnN0cnVjdENh
bGxiYWNrKCk7CisgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNr
ID0gY29uc3RydWN0b3ItPmNvbnN0cnVjdENhbGxiYWNrKCk7CiAgICAgaWYgKGNhbGxiYWNrKSB7
CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOworICAgICAgICBKU1ZhbHVlIG5ld1RhcmdldCA9
IGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCk7CisgICAgICAgIC8vIElmIHdlIGFyZSBkb2luZyBhIGRl
cml2ZWQgY2xhc3MgY29uc3RydWN0aW9uIGdldCB0aGUgLnByb3RvdHlwZSBwcm9wZXJ0eSBvZmYg
dGhlIG5ldyB0YXJnZXQgZmlyc3Qgc28gd2UgYmVoYXZlIGNsb3NlciB0byBub3JtYWwgSlMuCisg
ICAgICAgIGlmIChuZXdUYXJnZXQgIT0gY29uc3RydWN0b3IpIHsKKyAgICAgICAgICAgIHByb3Rv
dHlwZSA9IG5ld1RhcmdldC5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCk7CiAgICAgICAgIFZlY3RvcjxKU1ZhbHVlUmVmLCAxNj4gYXJndW1lbnRzOwog
ICAgICAgICBhcmd1bWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudENvdW50KTsK
QEAgLTk3LDYgKzEwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJh
Y2tGdW5jdGlvbjo6Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgICAgICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
ICAgIHJlc3VsdCA9IGNhbGxiYWNrKGN0eCwgY29uc3RydWN0b3JSZWYsIGFyZ3VtZW50Q291bnQs
IGFyZ3VtZW50cy5kYXRhKCksICZleGNlcHRpb24pOwogICAgICAgICB9CisKICAgICAgICAgaWYg
KGV4Y2VwdGlvbikgewogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgdG9KUyhnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikpOwogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTEwNCwxMCArMTE0LDE5IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgICAgIC8vIHJlc3VsdCBtdXN0IGJlIGEgdmFsaWQg
SlNWYWx1ZS4KICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTKHJlc3VsdCkpOworCisgICAgICAgIEpTT2JqZWN0KiBuZXdPYmplY3QgPSB0
b0pTKHJlc3VsdCk7CisgICAgICAgIC8vIFRoaXMgd29uJ3QgdHJpZ2dlciBwcm94eSB0cmFwcyBv
biBuZXdPYmplY3QncyBwcm90b3R5cGUgaGFuZGxlciBidXQgdGhhdCdzIHByb2JhYmx5IGRlc2ly
YWJsZSBoZXJlIGFueXdheS4KKyAgICAgICAgaWYgKG5ld1RhcmdldCAhPSBjb25zdHJ1Y3RvciAm
JiBuZXdPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSkgPT0gY29uc3RydWN0b3ItPmdldChn
bG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSkpIHsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICBuZXdPYmplY3Qt
PnNldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUpOworICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUobmV3T2JqZWN0KTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTKEpTT2JqZWN0TWFrZShjdHgsIGpzQ2FzdDxKU0NhbGxiYWNr
Q29uc3RydWN0b3IqPihjb25zdHJ1Y3RvciktPmNsYXNzUmVmKCksIG51bGxwdHIpKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKEpTT2JqZWN0TWFrZShjdHgsIGpzQ2FzdDxKU0Nh
bGxiYWNrQ29uc3RydWN0b3IqPihjYWxsZWUpLT5jbGFzc1JlZigpLCBudWxscHRyKSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYu
aAppbmRleCAzMzBmNWUzYmU1MDg0Y2IzOTdkOGQ0NmU4ODQyMjA1ZWRkNWMwZThiLi42ZjFhN2Jh
NmM5MDYyZTkzNzk0NDA0N2FlNzQwODU5ZjM4YjZmYzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU09iamVjdFJlZi5oCkBAIC0zMzksNiArMzM5LDggQEAgSlNTdGF0aWNWYWx1ZSBTdGF0
aWNWYWx1ZUFycmF5W10gPSB7CiBTdGFuZGFyZCBKYXZhU2NyaXB0IHByYWN0aWNlIGNhbGxzIGZv
ciBzdG9yaW5nIGZ1bmN0aW9uIG9iamVjdHMgaW4gcHJvdG90eXBlcywgc28gdGhleSBjYW4gYmUg
c2hhcmVkLiBUaGUgZGVmYXVsdCBKU0NsYXNzIGNyZWF0ZWQgYnkgSlNDbGFzc0NyZWF0ZSBmb2xs
b3dzIHRoaXMgaWRpb20sIGluc3RhbnRpYXRpbmcgb2JqZWN0cyB3aXRoIGEgc2hhcmVkLCBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRpbmcgcHJvdG90eXBlIGNvbnRhaW5pbmcgdGhlIGNsYXNzJ3MgZnVu
Y3Rpb24gb2JqZWN0cy4gVGhlIGtKU0NsYXNzQXR0cmlidXRlTm9BdXRvbWF0aWNQcm90b3R5cGUg
YXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IGEgSlNDbGFzcyBzaG91bGQgbm90IGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGUgc3VjaCBhIHByb3RvdHlwZS4gVGhlIHJlc3VsdGluZyBKU0NsYXNzIGluc3Rh
bnRpYXRlcyBvYmplY3RzIHdpdGggdGhlIGRlZmF1bHQgb2JqZWN0IHByb3RvdHlwZSwgYW5kIGdp
dmVzIGVhY2ggaW5zdGFuY2Ugb2JqZWN0IGl0cyBvd24gY29weSBvZiB0aGUgY2xhc3MncyBmdW5j
dGlvbiBvYmplY3RzLgogCiBBIE5VTEwgY2FsbGJhY2sgc3BlY2lmaWVzIHRoYXQgdGhlIGRlZmF1
bHQgb2JqZWN0IGNhbGxiYWNrIHNob3VsZCBzdWJzdGl0dXRlLCBleGNlcHQgaW4gdGhlIGNhc2Ug
b2YgaGFzUHJvcGVydHksIHdoZXJlIGl0IHNwZWNpZmllcyB0aGF0IGdldFByb3BlcnR5IHNob3Vs
ZCBzdWJzdGl0dXRlLgorCitJdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIEpTIHN1YmNsYXNzaW5n
IHdpdGggb2JqZWN0cyBjcmVhdGVkIGZyb20gYSBjbGFzcyBkZWZpbml0aW9uIHRoYXQgc2V0cyBj
YWxsQXNDb25zdHJ1Y3RvciBieSBkZWZhdWx0LiBTdWJjbGFzc2luZyBpcyBzdXBwb3J0ZWQgdmlh
IHRoZSBKU09iamVjdE1ha2VDb25zdHJ1Y3RvciBmdW5jdGlvbiwgaG93ZXZlci4KICovCiB0eXBl
ZGVmIHN0cnVjdCB7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVy
c2lvbjsgLyogY3VycmVudCAoYW5kIG9ubHkpIHZlcnNpb24gaXMgMCAqLwpAQCAtNDI2LDcgKzQy
OCw3IEBAIEpTX0VYUE9SVCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxs
YmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluCiBAcGFyYW0ganNDbGFzcyBBIEpTQ2xhc3Mg
dGhhdCBpcyB0aGUgY2xhc3MgeW91ciBjb25zdHJ1Y3RvciB3aWxsIGFzc2lnbiB0byB0aGUgb2Jq
ZWN0cyBpdHMgY29uc3RydWN0cy4ganNDbGFzcyB3aWxsIGJlIHVzZWQgdG8gc2V0IHRoZSBjb25z
dHJ1Y3RvcidzIC5wcm90b3R5cGUgcHJvcGVydHksIGFuZCB0byBldmFsdWF0ZSAnaW5zdGFuY2Vv
ZicgZXhwcmVzc2lvbnMuIFBhc3MgTlVMTCB0byB1c2UgdGhlIGRlZmF1bHQgb2JqZWN0IGNsYXNz
LgogQHBhcmFtIGNhbGxBc0NvbnN0cnVjdG9yIEEgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNh
bGxiYWNrIHRvIGludm9rZSB3aGVuIHlvdXIgY29uc3RydWN0b3IgaXMgdXNlZCBpbiBhICduZXcn
IGV4cHJlc3Npb24uIFBhc3MgTlVMTCB0byB1c2UgdGhlIGRlZmF1bHQgb2JqZWN0IGNvbnN0cnVj
dG9yLgogQHJlc3VsdCBBIEpTT2JqZWN0IHRoYXQgaXMgYSBjb25zdHJ1Y3Rvci4gVGhlIG9iamVj
dCdzIHByb3RvdHlwZSB3aWxsIGJlIHRoZSBkZWZhdWx0IG9iamVjdCBwcm90b3R5cGUuCi1AZGlz
Y3Vzc2lvbiBUaGUgZGVmYXVsdCBvYmplY3QgY29uc3RydWN0b3IgdGFrZXMgbm8gYXJndW1lbnRz
IGFuZCBjb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyBqc0NsYXNzIHdpdGggbm8gcHJpdmF0
ZSBkYXRhLgorQGRpc2N1c3Npb24gVGhlIGRlZmF1bHQgb2JqZWN0IGNvbnN0cnVjdG9yIHRha2Vz
IG5vIGFyZ3VtZW50cyBhbmQgY29uc3RydWN0cyBhbiBvYmplY3Qgb2YgY2xhc3MganNDbGFzcyB3
aXRoIG5vIHByaXZhdGUgZGF0YS4gSWYgdGhlIGNvbnN0cnVjdG9yIGlzIGluaGVyaXRlZCB2aWEg
SlMgc3ViY2xhc3NpbmcgYW5kIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGNhbGxBc0NvbnN0cnVj
dG9yIHdhcyBjcmVhdGVkIHdpdGgganNDbGFzcywgdGhlbiB0aGUgcmV0dXJuZWQgb2JqZWN0IHdp
bGwgaGF2ZSBpdCdzIHByb3RvdHlwZSBvdmVycmlkZGVuIHRvIHRoZSBkZXJpdmVkIGNsYXNzJ3Mg
cHJvdG90eXBlLgogKi8KIEpTX0VYUE9SVCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VDb25zdHJ1
Y3RvcihKU0NvbnRleHRSZWYgY3R4LCBKU0NsYXNzUmVmIGpzQ2xhc3MsIEpTT2JqZWN0Q2FsbEFz
Q29uc3RydWN0b3JDYWxsYmFjayBjYWxsQXNDb25zdHJ1Y3Rvcik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwCmluZGV4IDk0MDFlYmYxZmIxYWM0OTkxNGQ1
MmIwODgzMGI2MTU1ZDEwMDc5NzUuLjhjMTlmNTNkNGI2NDQ5YjI2YjE3OTIyNmUyNDVmZTlmNzYz
ZDgwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcApA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk1hcmtlZEpTVmFsdWVSZWZBcnJheS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ29udGV4dFJlZlByaXZhdGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVj
dFJlZlByaXZhdGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAj
aW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KQEAgLTUw
LDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgQVBJU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQorICAgICAgICA6IEFQSVN0cmluZyhzdHJpbmcudXRmOCgpLmRhdGEo
KSkKKyAgICB7CisgICAgfQorCiAgICAgfkFQSVN0cmluZygpCiAgICAgewogICAgICAgICBKU1N0
cmluZ1JlbGVhc2UobV9zdHJpbmcpOwpAQCAtMTQzLDYgKzE0OSw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHByb21pc2VFYXJseUhhbmRsZWRSZWplY3Rpb25zKCk7CiAgICAgdm9pZCB0b3BDYWxsRnJh
bWVBY2Nlc3MoKTsKICAgICB2b2lkIG1hcmtlZEpTVmFsdWVBcnJheUFuZEdDKCk7CisgICAgdm9p
ZCBjbGFzc0RlZmluaXRpb25XaXRoSlNTdWJjbGFzcygpOworICAgIHZvaWQgcHJveHlSZXR1cm5l
ZFdpdGhKU1N1YmNsYXNzaW5nKCk7CiAKICAgICBpbnQgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4g
bV9mYWlsZWQ7IH0KIApAQCAtMTYyLDYgKzE3MCw4IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KICAgICBib29sIGZ1bmN0aW9uUmV0dXJuc1RydWUo
Y29uc3QgY2hhciogZnVuY3Rpb25Tb3VyY2UsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKTsK
IAorICAgIGJvb2wgc2NyaXB0UmVzdWx0SXMoU2NyaXB0UmVzdWx0LCBKU1ZhbHVlUmVmKTsKKwog
ICAgIC8vIFdheXMgdG8gbWFrZSBzZXRzIG9mIGludGVyZXN0aW5nIHRoaW5ncy4KICAgICBBUElW
ZWN0b3I8SlNPYmplY3RSZWY+IGludGVyZXN0aW5nT2JqZWN0cygpOwogICAgIEFQSVZlY3RvcjxK
U1ZhbHVlUmVmPiBpbnRlcmVzdGluZ0tleXMoKTsKQEAgLTIzOCw2ICsyNDgsMTMgQEAgYm9vbCBU
ZXN0QVBJOjpmdW5jdGlvblJldHVybnNUcnVlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uU291cmNlLCBB
cmd1bWVudFR5cGVzLi4uIGEKICAgICByZXR1cm4gSlNWYWx1ZUlzU3RyaWN0RXF1YWwoY29udGV4
dCwgdHJ1ZVZhbHVlLCByZXN1bHQudmFsdWUoKSk7CiB9CiAKK2Jvb2wgVGVzdEFQSTo6c2NyaXB0
UmVzdWx0SXMoU2NyaXB0UmVzdWx0IHJlc3VsdCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBKU1ZhbHVlSXNT
dHJpY3RFcXVhbChjb250ZXh0LCByZXN1bHQudmFsdWUoKSwgdmFsdWUpOworfQorCiB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBTdHJpbmdzPgogYm9vbCBUZXN0QVBJOjpjaGVjayhib29sIGNvbmRpdGlv
biwgU3RyaW5ncy4uLiBtZXNzYWdlcykKIHsKQEAgLTYyMSwyMiArNjM4LDE4IEBAIHZvaWQgVGVz
dEFQSTo6dG9wQ2FsbEZyYW1lQWNjZXNzKCkKIAogdm9pZCBUZXN0QVBJOjptYXJrZWRKU1ZhbHVl
QXJyYXlBbmRHQygpCiB7Ci0gICAgYXV0byB0ZXN0TWFya2VkSlNWYWx1ZUFycmF5ID0gWyZdKHVu
c2lnbmVkIGNvdW50KSB7CisgICAgYXV0byB0ZXN0TWFya2VkSlNWYWx1ZUFycmF5ID0gWyZdICh1
bnNpZ25lZCBjb3VudCkgewogICAgICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRl
eHQpOwogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsT2JqZWN0LT52bSgp
KTsKICAgICAgICAgSlNDOjpNYXJrZWRKU1ZhbHVlUmVmQXJyYXkgdmFsdWVzKGNvbnRleHQsIGNv
dW50KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsr
aW5kZXgpIHsKLSAgICAgICAgICAgIFN0cmluZyB0YXJnZXQgPSBtYWtlU3RyaW5nKCJQcmVmaXgi
LCBpbmRleCk7Ci0gICAgICAgICAgICBhdXRvIGhvbGRlciA9IE9wYXF1ZUpTU3RyaW5nOjp0cnlD
cmVhdGUodGFyZ2V0KTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWYgc3RyaW5nID0gSlNWYWx1ZU1h
a2VTdHJpbmcoY29udGV4dCwgaG9sZGVyLmdldCgpKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWYg
c3RyaW5nID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgQVBJU3RyaW5nKG1ha2VTdHJpbmco
IlByZWZpeCIsIGluZGV4KSkpOwogICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHN0cmluZzsK
ICAgICAgICAgfQogICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dp
bmcoY29udGV4dCk7CiAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewotICAgICAgICAgICAgU3Ry
aW5nIHRhcmdldCA9IG1ha2VTdHJpbmcoIlByZWZpeCIsIGluZGV4KTsKLSAgICAgICAgICAgIGF1
dG8gaG9sZGVyID0gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZSh0YXJnZXQpOwotICAgICAgICAg
ICAgSlNWYWx1ZVJlZiBzdHJpbmcgPSBKU1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBob2xkZXIu
Z2V0KCkpOworICAgICAgICAgICAgSlNWYWx1ZVJlZiBzdHJpbmcgPSBKU1ZhbHVlTWFrZVN0cmlu
Zyhjb250ZXh0LCBBUElTdHJpbmcobWFrZVN0cmluZygiUHJlZml4IiwgaW5kZXgpKSk7CiAgICAg
ICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmljdEVxdWFsKGNvbnRleHQsIHZhbHVlc1tpbmRleF0s
IHN0cmluZykpCiAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgfQpAQCAtNjQ2
LDYgKzY1OSw1MiBAQCB2b2lkIFRlc3RBUEk6Om1hcmtlZEpTVmFsdWVBcnJheUFuZEdDKCkKICAg
ICB0ZXN0TWFya2VkSlNWYWx1ZUFycmF5KDEwMDApOwogfQogCit2b2lkIFRlc3RBUEk6OmNsYXNz
RGVmaW5pdGlvbldpdGhKU1N1YmNsYXNzKCkKK3sKKyAgICBjb25zdCBzdGF0aWMgSlNDbGFzc0Rl
ZmluaXRpb24gZGVmaW5pdGlvbiA9IGtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5OworICAgIHN0YXRp
YyBKU0NsYXNzUmVmIGpzQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZkZWZpbml0aW9uKTsKKworICAg
IGF1dG8gY29uc3RydWN0b3IgPSBbXSAoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIHNp
emVfdCwgY29uc3QgSlNWYWx1ZVJlZiosIEpTVmFsdWVSZWYqKSAtPiBKU09iamVjdFJlZiB7Cisg
ICAgICAgIHJldHVybiBKU09iamVjdE1ha2UoY3R4LCBqc0NsYXNzLCBudWxscHRyKTsKKyAgICB9
OworCisgICAgSlNPYmplY3RSZWYgU3VwZXJjbGFzcyA9IEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9y
KGNvbnRleHQsIGpzQ2xhc3MsIGNvbnN0cnVjdG9yKTsKKworICAgIFNjcmlwdFJlc3VsdCByZXN1
bHQgPSBjYWxsRnVuY3Rpb24oIihmdW5jdGlvbiAoU3VwZXJjbGFzcykgeyBjbGFzcyBTdWJjbGFz
cyBleHRlbmRzIFN1cGVyY2xhc3MgeyBtZXRob2QoKSB7IHJldHVybiAndmFsdWUnOyB9IH07IHJl
dHVybiBuZXcgU3ViY2xhc3MoKTsgfSkiLCBTdXBlcmNsYXNzKTsKKyAgICBjaGVjayghIXJlc3Vs
dCwgImNyZWF0aW5nIGEgc3ViY2xhc3Mgc2hvdWxkIG5vdCB0aHJvdy4iKTsKKyAgICBjaGVjayhK
U1ZhbHVlSXNPYmplY3QoY29udGV4dCwgcmVzdWx0LnZhbHVlKCkpLCAicmVzdWx0IG9mIGNvbnN0
cnVjdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGFuIG9iamVjdC4iKTsKKyAgICBKU09iamVjdFJlZiBz
dWJjbGFzcyA9IGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KHJlc3VsdC52YWx1ZSgpKTsKKworICAg
IGNoZWNrKEpTT2JqZWN0SGFzUHJvcGVydHkoY29udGV4dCwgc3ViY2xhc3MsIEFQSVN0cmluZygi
bWV0aG9kIikpLCAic3ViY2xhc3Mgc2hvdWxkIGhhdmUgZGVyaXZlZCBjbGFzc2VzIGZ1bmN0aW9u
cy4iKTsKKyAgICBjaGVjayhmdW5jdGlvblJldHVybnNUcnVlKCIoZnVuY3Rpb24gKHN1YmNsYXNz
LCBTdXBlcmNsYXNzKSB7IHJldHVybiBzdWJjbGFzcyBpbnN0YW5jZW9mIFN1cGVyY2xhc3M7IH0p
Iiwgc3ViY2xhc3MsIFN1cGVyY2xhc3MpLCAiSlMgc3ViY2xhc3Mgc2hvdWxkIGluc3RhbmNlb2Yg
dGhlIFN1cGVyY2xhc3MiKTsKKworICAgIEpTQ2xhc3NSZWxlYXNlKGpzQ2xhc3MpOworfQorCit2
b2lkIFRlc3RBUEk6OnByb3h5UmV0dXJuZWRXaXRoSlNTdWJjbGFzc2luZygpCit7CisgICAgY29u
c3Qgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRp
b25FbXB0eTsKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgm
ZGVmaW5pdGlvbik7CisgICAgc3RhdGljIFRlc3RBUEkmIHRlc3QgPSAqdGhpczsKKworICAgIGF1
dG8gY29uc3RydWN0b3IgPSBbXSAoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIHNpemVf
dCwgY29uc3QgSlNWYWx1ZVJlZiosIEpTVmFsdWVSZWYqKSAtPiBKU09iamVjdFJlZiB7CisgICAg
ICAgIFNjcmlwdFJlc3VsdCByZXN1bHQgPSB0ZXN0LmNhbGxGdW5jdGlvbigiKGZ1bmN0aW9uIChv
YmplY3QpIHsgcmV0dXJuIG5ldyBQcm94eShvYmplY3QsIHsgZ2V0UHJvdG90eXBlT2Y6ICgpID0+
IHsgZ2xvYmFsVGhpcy50cmlnZ2VyZWRQcm94eSA9IHRydWU7IHJldHVybiBvYmplY3QuX19wcm90
b19fOyB9fSk7IH0pIiwgSlNPYmplY3RNYWtlKGN0eCwganNDbGFzcywgbnVsbHB0cikpOworICAg
ICAgICB0ZXN0LmNoZWNrKCEhcmVzdWx0LCAiY3JlYXRpbmcgYSBwcm94eSBzaG91bGQgbm90IHRo
cm93Iik7CisgICAgICAgIHRlc3QuY2hlY2soSlNWYWx1ZUlzT2JqZWN0KGN0eCwgcmVzdWx0LnZh
bHVlKCkpLCAicmVzdWx0IG9mIHByb3h5IGNyZWF0aW9uIHNob3VsZCBoYXZlIGJlZW4gYW4gb2Jq
ZWN0LiIpOworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdFJlZj4ocmVzdWx0LnZh
bHVlKCkpOworICAgIH07CisKKyAgICBKU09iamVjdFJlZiBTdXBlcmNsYXNzID0gSlNPYmplY3RN
YWtlQ29uc3RydWN0b3IoY29udGV4dCwganNDbGFzcywgY29uc3RydWN0b3IpOworCisgICAgU2Ny
aXB0UmVzdWx0IHJlc3VsdCA9IGNhbGxGdW5jdGlvbigiKGZ1bmN0aW9uIChTdXBlcmNsYXNzKSB7
IGNsYXNzIFN1YmNsYXNzIGV4dGVuZHMgU3VwZXJjbGFzcyB7IG1ldGhvZCgpIHsgcmV0dXJuICd2
YWx1ZSc7IH0gfTsgcmV0dXJuIG5ldyBTdWJjbGFzcygpOyB9KSIsIFN1cGVyY2xhc3MpOworICAg
IGNoZWNrKCEhcmVzdWx0LCAiY3JlYXRpbmcgYSBzdWJjbGFzcyBzaG91bGQgbm90IHRocm93LiIp
OworICAgIGNoZWNrKEpTVmFsdWVJc09iamVjdChjb250ZXh0LCByZXN1bHQudmFsdWUoKSksICJy
ZXN1bHQgb2YgY29uc3RydWN0aW9uIHNob3VsZCBoYXZlIGJlZW4gYW4gb2JqZWN0LiIpOworICAg
IEpTT2JqZWN0UmVmIHN1YmNsYXNzID0gY29uc3RfY2FzdDxKU09iamVjdFJlZj4ocmVzdWx0LnZh
bHVlKCkpOworCisgICAgY2hlY2soc2NyaXB0UmVzdWx0SXMoZXZhbHVhdGVTY3JpcHQoImdsb2Jh
bFRoaXMudHJpZ2dlcmVkUHJveHkiKSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpLCAi
Y3JlYXRpbmcgYSBzdWJjbGFzcyBzaG91bGQgbm90IGhhdmUgdHJpZ2dlcmVkIHRoZSBwcm94eSIp
OworICAgIGNoZWNrKGZ1bmN0aW9uUmV0dXJuc1RydWUoIihmdW5jdGlvbiAoc3ViY2xhc3MsIFN1
cGVyY2xhc3MpIHsgcmV0dXJuIHN1YmNsYXNzLl9fcHJvdG9fXyA9PSBTdXBlcmNsYXNzLnByb3Rv
dHlwZTsgfSkiLCBzdWJjbGFzcywgU3VwZXJjbGFzcyksICJwcm94eSdzIHByb3RvdHlwZSBzaG91
bGQgbWF0Y2ggU3VwZXJjbGFzcy5wcm90b3R5cGUiKTsKK30KKwogdm9pZCBjb25maWd1cmVKU0NG
b3JUZXN0aW5nKCkKIHsKICAgICBKU0M6OkNvbmZpZzo6Y29uZmlndXJlRm9yVGVzdGluZygpOwpA
QCAtNjg2LDYgKzc0NSw4IEBAIGludCB0ZXN0Q0FQSVZpYUNwcChjb25zdCBjaGFyKiBmaWx0ZXIp
CiAgICAgUlVOKHByb21pc2VVbmhhbmRsZWRSZWplY3Rpb25Gcm9tVW5oYW5kbGVkUmVqZWN0aW9u
Q2FsbGJhY2soKSk7CiAgICAgUlVOKHByb21pc2VFYXJseUhhbmRsZWRSZWplY3Rpb25zKCkpOwog
ICAgIFJVTihtYXJrZWRKU1ZhbHVlQXJyYXlBbmRHQygpKTsKKyAgICBSVU4oY2xhc3NEZWZpbml0
aW9uV2l0aEpTU3ViY2xhc3MoKSk7CisgICAgUlVOKHByb3h5UmV0dXJuZWRXaXRoSlNTdWJjbGFz
c2luZygpKTsKIAogICAgIGlmICh0YXNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZGF0YUxvZ0xu
KCJGaWx0ZXJlZCBhbGwgdGVzdHM6IEVSUk9SIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGkubW0KaW5kZXggOGY2MzZjNjQxOGI2Zjc4Mjk5ZmJhOGVkYmQ1MzQ5N2Vh
YjQwNTNmMS4uYjc5YWIyYmMzYWYxYmM1M2U4YzgxOGEyMzNkYjA3MzY4NGJlYjFkMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQpAQCAtMjg1OSw3ICsyODU5
LDggQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVO
KHByb21pc2VDcmVhdGVSZWplY3RlZCgpKTsKICAgICBSVU4ocGFyYWxsZWxQcm9taXNlUmVzb2x2
ZVRlc3QoKSk7CiAKLSAgICB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKTsKKyAgICBpZiAoIWZpbHRl
cikKKyAgICAgICAgdGVzdE9iamVjdGl2ZUNBUElNYWluKCk7CiB9CiAKICNlbHNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>