<?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>167274</bug_id>
          
          <creation_ts>2017-01-20 18:08:16 -0800</creation_ts>
          <short_desc>[WebIDL] Add support for inherit serializer attribute</short_desc>
          <delta_ts>2017-01-30 23:21:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Bindings</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1268686</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-20 18:08:16 -0800</bug_when>
    <thetext>Add support for inherit serializer attribute

Also extend support for detecting if attributes are serializable.

WebIDL Spec:
https://heycam.github.io/webidl/#idl-serializers

---

Resource Timing wants serializer { inherit }:
https://w3c.github.io/resource-timing/

&gt; interface PerformanceResourceTiming : PerformanceEntry {
&gt;     ...
&gt;     serializer = {inherit, attribute};
&gt; };

The Performance API also has non-simple attributes that can be serialized:

&gt; interface Performance : EventTarget {
&gt;    readonly attribute PerformanceNavigation navigation;
&gt;    readonly attribute PerformanceTiming timing;
&gt;    ...
&gt;    serializer = {attribute};
&gt; };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268688</commentid>
    <comment_count>1</comment_count>
      <attachid>299416</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-20 18:18:11 -0800</bug_when>
    <thetext>Created attachment 299416
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268720</commentid>
    <comment_count>2</comment_count>
      <attachid>299416</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-20 21:14:27 -0800</bug_when>
    <thetext>Comment on attachment 299416
[PATCH] Proposed Fix

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

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:941
&gt; +    my $interface = GetInterfaceForAttribute($object, $currentInterface, $attribute);
&gt; +    return 1 if $interface &amp;&amp; $interface-&gt;serializable;

Seems EventHandler makes it down to here and we try to look up EventHandler type and fail. I can easily bail above, but maybe there is a better list of non-Interface built-in types.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp:424
&gt; +    auto sixthNodeAttributeValue = jsTestSerializationSixthNodeAttributeGetter(*state, *thisObject, throwScope);
&gt; +    ASSERT(!throwScope.exception());
&gt; +    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;sixthNodeAttribute&quot;), sixthNodeAttributeValue);

r- For interface types that are serializable, I should be serializing them. So I should be doing a toJSON on thing, not putting the value directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271006</commentid>
    <comment_count>3</comment_count>
      <attachid>300039</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-28 09:34:44 -0800</bug_when>
    <thetext>Created attachment 300039
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271098</commentid>
    <comment_count>4</comment_count>
      <attachid>300039</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-28 23:28:47 -0800</bug_when>
    <thetext>Comment on attachment 300039
[PATCH] Proposed Fix

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        serializing and attribute that is itself a serializable interface.

an attribute

&gt; Source/WebCore/ChangeLog:29
&gt; +        special strings. The spec does not accurately define where the
&gt; +        special &quot;attribute&quot; keyword is allowed.

What does &quot;accurately&quot; mean here? Do you mean &quot;precisely&quot;?

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:945
&gt; +    my $interface = GetInterfaceForAttribute($object, $currentInterface, $attribute);
&gt; +    if ($interface &amp;&amp; $interface-&gt;serializable) {
&gt; +        die &quot;Serializer for non-primitive types is not currently supported&quot;;
&gt; +    }

Should this have a newline at the end of the die message? How useful is this error when it happens? Is it easy to understand what type we are talking about and what we did wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271103</commentid>
    <comment_count>5</comment_count>
      <attachid>300039</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-29 00:14:43 -0800</bug_when>
    <thetext>Comment on attachment 300039
[PATCH] Proposed Fix

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

&gt;&gt; Source/WebCore/ChangeLog:29
&gt;&gt; +        special &quot;attribute&quot; keyword is allowed.
&gt; 
&gt; What does &quot;accurately&quot; mean here? Do you mean &quot;precisely&quot;?

&quot;precisely&quot; is much better.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:945
&gt;&gt; +    }
&gt; 
&gt; Should this have a newline at the end of the die message? How useful is this error when it happens? Is it easy to understand what type we are talking about and what we did wrong?

It should have a newline.

Here we are bailing when you reach unimplemented functionality in our generator. Previously `inherit` was unsupported and just did the same thing `die &quot;Serializer inherit keyword is not currently supported.&quot;;`. This patch gets inherit working for primitive types, but not Interfaces that are serializable.

When the time comes that someone needs serialization functionality for Interfaces:

    interface SerializableObject {
        attribute long timestamp;
        serializer = { attribute };
    };

    interface SomeInterface {
        attribute SerializableObject object;
        serializer = { attribute };
    };

Then they will need to extend our generator to support it, and that is what this die case if fore. No such case exists yet.

--

Thinking deeper, we probably need to group sequence/dictionary in with Interface and bail. Since none of these cases exist I didn&apos;t have a real JavaScript case to test with, but it looks like the generation would just put the object there instead of a serialized version of the object. I&apos;ll change this to be more conservative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271592</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-30 23:21:15 -0800</bug_when>
    <thetext>&lt;https://trac.webkit.org/changeset/211409&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299416</attachid>
            <date>2017-01-20 18:18:11 -0800</date>
            <delta_ts>2017-01-28 09:34:44 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>serializer-inherit-1.patch</filename>
            <type>text/plain</type>
            <size>55639</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NzZmYjIwZjA4Ny4uNzI1NDdlMDA3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw1NCBAQAogMjAxNy0wMS0yMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgogCisgICAgICAgIFtXZWJJRExdIEFkZCBzdXBwb3J0IGZvciBpbmhlcml0IHNlcmlhbGl6
ZXIgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjcyNzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTdXBwb3J0IGZvciBzZXJpYWxpemVyIHsgaW5oZXJpdCB9LCB3aGljaCB3aWxsIGJlIHVz
ZWQgYnkgUmVzb3VyY2UgVGltaW5nLgorICAgICAgICBodHRwczovL2hleWNhbS5naXRodWIuaW8v
d2ViaWRsLyNpZGwtc2VyaWFsaXplcnMKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvci5wbToKKyAgICAgICAgKEdldEludGVyZmFjZUZvckF0dHJpYnV0ZSk6CisgICAg
ICAgIChJc1NlcmlhbGl6YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIERldGVybWluZSBpZiBhbiBh
dHRyaWJ1dGUgaXMgc2VyaWFsaXphYmxlIGF0IGdlbmVyYXRpb24gdGltZSBzbyB3ZSBjYW4KKyAg
ICAgICAgdmVyaWZ5IGlmIGF0dHJpYnV0ZSBpbnRlcmZhY2VzIGFyZSBzZXJpYWxpemFibGUuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAg
KEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlU2VyaWFsaXpl
ckF0dHJpYnV0ZXNGb3JJbnRlcmZhY2UpOgorICAgICAgICBHZW5lcmF0ZSBpbmhlcml0ZWQgYXR0
cmlidXRlcyBmaXJzdCwgdGhlbiBnZW5lcmF0ZSBvdXIgb3duIGxpc3QuCisgICAgICAgIEV4cGxp
Y2l0bHkgcHJvdmlkZWQgYXR0cmlidXRlIG5hbWVzIGFyZSBleHBlY3RlZCB0byBiZSBzZXJpYWxp
emFibGUsCisgICAgICAgIHNvIHByb2R1Y2UgYW4gZXJyb3IgaWYgdGhleSBhcmUgbm90LgorCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06CisgICAgICAgIChwYXJzZVNl
cmlhbGl6YXRpb25BdHRyaWJ1dGVzKToKKyAgICAgICAgVXBkYXRlIHBhcnNpbmcgb2Ygc2VyaWFs
aXplciBhdHRyaWJ1dGVzIHRvIGFsbG93IGZvciBtdWx0aXBsZQorICAgICAgICBzcGVjaWFsIHN0
cmluZ3MuIFRoZSBzcGVjIGRvZXMgbm90IGFjY3VyYXRlbHkgZGVmaW5lIHdoZXJlIHRoZQorICAg
ICAgICBzcGVjaWFsICJhdHRyaWJ1dGUiIGtleXdvcmQgaXMgYWxsb3dlZC4KKworICAgICAgICAo
YXBwbHlNZW1iZXJMaXN0KToKKyAgICAgICAgKGlzU2VyaWFsaXphYmxlQXR0cmlidXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgTW92ZSBzZXJpYWxpemFibGUgYXR0cmlidXRlIGNoZWNraW5nIHRvIGdl
bmVyYXRpb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXphdGlvbi5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Lmg6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaDogQWRkZWQuCisgICAgICAgIFRoZSB0b0pTT04g
aW1wbGVtZW50YXRpb25zIGFyZSB0aGUgbW9zdCBpbnRlcmVzdGluZy4KKworICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGw6CisgICAgICAgIEV4dGVu
ZCB0aGlzIHRlc3QgZm9yIGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VyaWFsaXphYmxlIGFuZCB1bnNl
cmlhbGl6YWJsZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuaWRsOgorICAgICAgICBUZXN0IGZvciB7IGluaGVyaXQsIGF0dHJpYnV0
ZSB9LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsLmlkbDoKKyAgICAgICAgVGVzdCBmb3IgeyBpbmhlcml0LCBhdHRyaWJ1dGVf
bmFtZXMuLi4gfSwgYW5kIG11bHRpLWxldmVsIGluaGVyaXQuCisKKzIwMTctMDEtMjAgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKwogICAgICAgICBSZW1vdmUgb3V0ZGF0
ZWQgRU5BQkxFKENTUF9ORVhUKSBidWlsZCBmbGFnCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjcyNTIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCmluZGV4IGVkNDczNTY3Y2QzLi45YmEzN2Q3
YmI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvci5wbQpAQCAtMzE0LDYgKzMxNCwxNSBAQCBzdWIgSURMRmlsZUZvckludGVyZmFjZQogICAg
IHJldHVybiAkaWRsRmlsZXMtPnskaW50ZXJmYWNlTmFtZX07CiB9CiAKK3N1YiBHZXRJbnRlcmZh
Y2VGb3JBdHRyaWJ1dGUKK3sKKyAgICBteSAoJG9iamVjdCwgJGN1cnJlbnRJbnRlcmZhY2UsICRh
dHRyaWJ1dGUpID0gQF87CisKKyAgICByZXR1cm4gdW5kZWYgdW5sZXNzICRvYmplY3QtPklzSW50
ZXJmYWNlVHlwZSgkYXR0cmlidXRlLT50eXBlKTsKKworICAgIHJldHVybiAkb2JqZWN0LT5QYXJz
ZUludGVyZmFjZSgkY3VycmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZS0+dHlwZS0+bmFtZSk7Cit9
CisKIHN1YiBHZXRBdHRyaWJ1dGVGcm9tSW50ZXJmYWNlCiB7CiAgICAgbXkgKCRvYmplY3QsICRv
dXRlckludGVyZmFjZSwgJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGVOYW1lKSA9IEBfOwpAQCAt
OTEzLDYgKzkyMiwyNyBAQCBzdWIgSXNXcmFwcGVyVHlwZQogICAgIHJldHVybiAwOwogfQogCitz
dWIgSXNTZXJpYWxpemFibGVBdHRyaWJ1dGUKK3sKKyAgICBteSAoJG9iamVjdCwgJGN1cnJlbnRJ
bnRlcmZhY2UsICRhdHRyaWJ1dGUpID0gQF87CisKKyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1
Yi5pby93ZWJpZGwvI2Rmbi1zZXJpYWxpemFibGUtdHlwZQorCisgICAgbXkgJHR5cGUgPSAkYXR0
cmlidXRlLT50eXBlOworICAgIHJldHVybiAxIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsK
KyAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc051bWVyaWNUeXBlKCR0eXBlKTsKKyAgICByZXR1
cm4gMSBpZiAkb2JqZWN0LT5Jc0VudW1UeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gMSBpZiAkb2Jq
ZWN0LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJldHVybiAxIGlmICR0eXBlLT5pc1VuaW9u
OworICAgIHJldHVybiAxIGlmICRvYmplY3QtPklzU2VxdWVuY2VUeXBlKCR0eXBlKTsKKyAgICBy
ZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc0RpY3Rpb25hcnlUeXBlKCR0eXBlKTsKKworICAgIG15ICRp
bnRlcmZhY2UgPSBHZXRJbnRlcmZhY2VGb3JBdHRyaWJ1dGUoJG9iamVjdCwgJGN1cnJlbnRJbnRl
cmZhY2UsICRhdHRyaWJ1dGUpOworICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2UgJiYgJGludGVy
ZmFjZS0+c2VyaWFsaXphYmxlOworCisgICAgcmV0dXJuIDA7Cit9CisKIHN1YiBHZXRJbnRlcmZh
Y2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9tTmFtZQogewogICAgICMgRklYTUU6IEl0J3MgYmFkIHRv
IGhhdmUgYSBmdW5jdGlvbiBsaWtlIHRoaXMgdGhhdCBvcGVucyBhbm90aGVyIElETCBmaWxlIHRv
IGFuc3dlciBhIHF1ZXN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCBiMjA1OTYzMWIyYi4uMzA5MTQ3YTFjNzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCkBAIC00MzY2LDE4ICs0MzY2LDU1IEBAIHN1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlv
bgogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KHN0YXRlKTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKIAor
ICAgIEdlbmVyYXRlU2VyaWFsaXplckF0dHJpYnV0ZXNGb3JJbnRlcmZhY2UoJGludGVyZmFjZSwg
JGNsYXNzTmFtZSk7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1l
fShFeGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKUyRpbnRl
cmZhY2VOYW1lPjo6Y2FsbE9wZXJhdGlvbjwke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9
Q2FsbGVyPihzdGF0ZSwgXCIkc2VyaWFsaXplckZ1bmN0aW9uTmFtZVwiKTtcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAifVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwor
fQorCitzdWIgR2VuZXJhdGVTZXJpYWxpemVyQXR0cmlidXRlc0ZvckludGVyZmFjZQoreworICAg
IG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOworCisgICAgbXkgJGludGVyZmFjZU5h
bWUgPSAkaW50ZXJmYWNlLT50eXBlLT5uYW1lOworCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZS0+aGFzSW5oZXJpdCkgeworICAgICAgICBteSAkcGFyZW50U2VyaWFsaXplckludGVy
ZmFjZSA9IDA7CisgICAgICAgICRjb2RlR2VuZXJhdG9yLT5Gb3JBbGxQYXJlbnRzKCRpbnRlcmZh
Y2UsIHN1YiB7CisgICAgICAgICAgICBteSAkcGFyZW50SW50ZXJmYWNlID0gc2hpZnQ7CisgICAg
ICAgICAgICBpZiAoJHBhcmVudEludGVyZmFjZS0+c2VyaWFsaXphYmxlICYmICEkcGFyZW50U2Vy
aWFsaXplckludGVyZmFjZSkgeworICAgICAgICAgICAgICAgICRwYXJlbnRTZXJpYWxpemVySW50
ZXJmYWNlID0gJHBhcmVudEludGVyZmFjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgMCk7
CisKKyAgICAgICAgZGllICJGYWlsZWQgdG8gZmluZCBwYXJlbnQgaW50ZXJmYWNlIHdpdGggXCJz
ZXJpYWxpemVyXCIgZm9yIFwiaW5oZXJpdFwiIHNlcmlhbGl6ZXIgaW4gJGludGVyZmFjZU5hbWVc
biIgaWYgISRwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlOworCisgICAgICAgIEdlbmVyYXRlU2Vy
aWFsaXplckF0dHJpYnV0ZXNGb3JJbnRlcmZhY2UoJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2Us
ICRjbGFzc05hbWUpOworICAgIH0KKwogICAgIG15IEBzZXJpYWxpemVkQXR0cmlidXRlcyA9ICgp
OworCiAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlTmFtZSAoQHskaW50ZXJmYWNlLT5zZXJpYWxp
emFibGUtPmF0dHJpYnV0ZXN9KSB7CiAgICAgICAgIG15ICRmb3VuZEF0dHJpYnV0ZSA9IDA7CiAg
ICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkg
ewogICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGVOYW1lIGVxICRhdHRyaWJ1dGUtPm5hbWUpIHsK
LSAgICAgICAgICAgICAgICBwdXNoIEBzZXJpYWxpemVkQXR0cmlidXRlcywgJGF0dHJpYnV0ZTsK
ICAgICAgICAgICAgICAgICAkZm91bmRBdHRyaWJ1dGUgPSAxOworICAgICAgICAgICAgICAgIGlm
ICgkY29kZUdlbmVyYXRvci0+SXNTZXJpYWxpemFibGVBdHRyaWJ1dGUoJGludGVyZmFjZSwgJGF0
dHJpYnV0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAc2VyaWFsaXplZEF0dHJpYnV0
ZXMsICRhdHRyaWJ1dGUpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbGFz
dDsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBkaWUgIkV4cGxpY2l0IFwic2VyaWFsaXplclwiIGF0dHJpYnV0ZSBcIiRhdHRyaWJ1dGVOYW1l
XCIgaXMgbm90IHNlcmlhbGl6YWJsZVxuIiBpZiAhJGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5o
YXNBdHRyaWJ1dGU7CiAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgZGllICJGYWlsZWQgdG8gZmluZCBcInNlcmlhbGl6ZXJc
IiBhdHRyaWJ1dGUgXCIkYXR0cmlidXRlTmFtZVwiIGluICRpbnRlcmZhY2VOYW1lIiBpZiAhJGZv
dW5kQXR0cmlidXRlOworICAgICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIFwic2VyaWFsaXplclwi
IGF0dHJpYnV0ZSBcIiRhdHRyaWJ1dGVOYW1lXCIgaW4gJGludGVyZmFjZU5hbWVcbiIgaWYgISRm
b3VuZEF0dHJpYnV0ZTsKICAgICB9CiAKICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBzZXJp
YWxpemVkQXR0cmlidXRlcykgewpAQCAtNDM4OSwxNSArNDQyNiw2IEBAIHN1YiBHZW5lcmF0ZVNl
cmlhbGl6ZXJGdW5jdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwiKSwg
JHtuYW1lfVZhbHVlKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAg
ICAgfQotCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0
YXRlKiBzdGF0ZSlcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlMkaW50ZXJmYWNlTmFt
ZT46OmNhbGxPcGVyYXRpb248JHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfUNhbGxlcj4o
c3RhdGUsIFwiJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWVcIik7XG4iKTsKLSAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKIH0KIAogc3Vi
IEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXggOTc5YmUzM2I5NjkuLjQ1NDRiYjEwZTVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQpAQCAtMTIz
NiwyOCArMTIzNiwzMCBAQCBzdWIgcGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcwogewogICAg
IG15ICRzZWxmID0gc2hpZnQ7CiAgICAgbXkgJHNlcmlhbGl6YWJsZSA9IHNoaWZ0OwotICAgIG15
ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tlbigpOwotCi0gICAgaWYgKCR0b2tlbi0+dmFsdWUoKSBl
cSAiZ2V0dGVyIikgewotICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNHZXR0ZXIoMSk7Ci0gICAg
ICAgIGRpZSAiU2VyaWFsaXplciBnZXR0ZXIga2V5d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBv
cnRlZC4iOwotCi0gICAgfQotICAgIGlmICgkdG9rZW4tPnZhbHVlKCkgZXEgImluaGVyaXQiKSB7
Ci0gICAgICAgICRzZXJpYWxpemFibGUtPmhhc0luaGVyaXQoMSk7Ci0gICAgICAgIGRpZSAiU2Vy
aWFsaXplciBpbmhlcml0IGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsKLSAg
ICB9Ci0KLSAgICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJhdHRyaWJ1dGUiKSB7Ci0gICAgICAg
ICRzZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZSgxKTsKLSAgICAgICAgIyBBdHRyaWJ1dGVzIHdp
bGwgYmUgZmlsbGVkIGluIHZpYSBhcHBseU1lbWJlckxpc3QoKQotICAgICAgICByZXR1cm47Ci0g
ICAgfQogCiAgICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKLSAgICAkc2VsZi0+YXNzZXJ0VG9rZW5U
eXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKLSAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9r
ZW4tPnZhbHVlKCkpOwotICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JHNlbGYtPnBhcnNlSWRlbnRp
ZmllcnMoKX0pOworICAgIG15IEBpZGVudGlmaWVycyA9ICRzZWxmLT5wYXJzZUlkZW50aWZpZXJM
aXN0KCk7CisKKyAgICBmb3IgbXkgJGlkZW50aWZpZXIgKEBpZGVudGlmaWVycykgeworICAgICAg
ICBpZiAoJGlkZW50aWZpZXIgZXEgImdldHRlciIpIHsKKyAgICAgICAgICAgICRzZXJpYWxpemFi
bGUtPmhhc0dldHRlcigxKTsKKyAgICAgICAgICAgIGRpZSAiU2VyaWFsaXplciBnZXR0ZXIga2V5
d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCRpZGVudGlmaWVyIGVxICJpbmhlcml0IikgeworICAgICAgICAgICAgJHNlcmlhbGl6YWJs
ZS0+aGFzSW5oZXJpdCgxKTsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoJGlkZW50aWZpZXIgZXEgImF0dHJpYnV0ZSIpIHsKKyAgICAgICAgICAgICRzZXJpYWxp
emFibGUtPmhhc0F0dHJpYnV0ZSgxKTsKKyAgICAgICAgICAgICMgQXR0cmlidXRlcyB3aWxsIGJl
IGZpbGxlZCBpbiB2aWEgYXBwbHlNZW1iZXJMaXN0KCkKKyAgICAgICAgICAgIG5leHQ7CisgICAg
ICAgIH0KKworICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkaWRlbnRpZmllcik7CisgICAgfQor
CiAgICAgJHNlcmlhbGl6YWJsZS0+YXR0cmlidXRlcyhcQGF0dHJpYnV0ZXMpOwogfQogCkBAIC0y
Mzc3LDE3ICsyMzc5LDYgQEAgc3ViIHBhcnNlTmFtZQogICAgICRzZWxmLT5hc3NlcnRVbmV4cGVj
dGVkVG9rZW4oJG5leHQtPnZhbHVlKCkpOwogfQogCi1zdWIgaXNTZXJpYWxpemFibGVBdHRyaWJ1
dGUKLXsKLSAgICBteSAkYXR0cmlidXRlID0gc2hpZnQ7Ci0KLSAgICAjIEZJWE1FOiBOZWVkIHRv
IHN1cHBvcnQgbW9yZSB0aGFuIHByaW1pdGl2ZSBzZXJpYWxpemFibGUgdHlwZXMuCi0gICAgIyBU
aGlzIGNoZWNrIG1heSBoYXZlIHRvIG1vdmUgdG8gdGhlIGNvZGUgZ2VuZXJhdG9yLCBpZiB3ZSBk
b24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbgotICAgICMgaGVyZSB0byBkZXRlcm1pbmUgc2Vy
aWFsaXphYmlsaXR5OiBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtc2VyaWFs
aXplcnMKLSAgICBteSAkc2VyaWFsaXphYmxlX3R5cGVzID0gJ14oXChieXRlfG9jdGV0fHNob3J0
fHVuc2lnbmVkIHNob3J0fGxvbmd8dW5zaWduZWQgbG9uZ3xsb25nIGxvbmd8dW5zaWduZWQgbG9u
ZyBsb25nfGZsb2F0fHVucmVzdHJpY3RlZCBmbG9hdHxkb3VibGV8dW5yZXN0cmljdGVkIGRvdWJs
ZXxib29sZWFufERPTVN0cmluZ3xCeXRlU3RyaW5nfFVTVlN0cmluZykkJzsKLSAgICByZXR1cm4g
JGF0dHJpYnV0ZS0+dHlwZS0+bmFtZSA9fiAvJHNlcmlhbGl6YWJsZV90eXBlcy87Ci19Ci0KIHN1
YiBhcHBseU1lbWJlckxpc3QKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CkBAIC0yNDI0
LDkgKzI0MTUsNyBAQCBzdWIgYXBwbHlNZW1iZXJMaXN0CiAgICAgICAgIG15ICRudW1TZXJpYWxp
emVyQXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfTsK
ICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzQXR0cmlidXRlKSB7CiAg
ICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRl
c30pIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNTZXJpYWxpemFibGVBdHRyaWJ1dGUoJGF0dHJp
YnV0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6
YWJsZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1
dGVzfSwgJGF0dHJpYnV0ZS0+bmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzaWYg
KCRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAwKSB7CiAgICAgICAgICAgICBmb3JlYWNoIG15
ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemF0aW9uLmNwcAppbmRleCBmYzBiNTBkZWE4OS4uOWU1MzEzNDEzMTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXphdGlvbi5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01D
b252ZXJ0LmgiCisjaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNUZXN0
Tm9kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KICNpbmNsdWRl
IDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CkBAIC00OSw2ICs1MCw4IEBAIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0
dHJpYnV0ZShKU0M6OkV4CiBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZp
ZnRoTG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uU2l4dGhOb2RlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhO
b2RlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25D
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAK
QEAgLTEwNCw2ICsxMDcsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0U2Vy
aWFsaXphdGlvblByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQogICAgIHsgInRoaXJkVW5zZXJpYWxp
emFibGVBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0
aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGly
ZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKSB9IH0sCiAgICAgeyAiZm91cnRoVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlIiwgQ3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXph
dGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGlj
X2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRp
b25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpIH0gfSwKICAgICB7ICJmaWZ0aExv
bmdBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9u
RmlmdGhMb25nQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNs
b3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0
ZSkgfSB9LAorICAgIHsgInNpeHRoTm9kZUF0dHJpYnV0ZSIsIEN1c3RvbUFjY2Vzc29yLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aE5vZGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uU2l4dGhOb2RlQXR0cmlidXRlKSB9IH0sCiAgICAgeyAidG9KU09OIiwgSlNDOjpGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3Qp
ICgwKSB9IH0sCiB9OwogCkBAIC0xOTksNyArMjAzLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKEV4
ZWMKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0Tm9kZT4+KHN0YXRlLCAqdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSwgaW1wbC50aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdEV4Y2VwdGlvbj4+KHN0YXRl
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgaW1wbC50aGlyZFVuc2VyaWFsaXphYmxlQXR0
cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIzNSw2ICsyMzksMjIgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNpeHRoTm9kZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aE5vZGVBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbj46OmF0
dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhOb2RlQXR0cmlidXRlR2V0dGVyPihzdGF0
ZSwgdGhpc1ZhbHVlLCAic2l4dGhOb2RlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhOb2RlQXR0cmlidXRlR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE5vZGU+PihzdGF0ZSwg
KnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwuc2l4dGhOb2RlQXR0cmlidXRlKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTMwOSw3ICsz
MjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5z
ZXJpYWxpemFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeAogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZh
Y2U8VGVzdE5vZGU+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJ0aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlIiwg
IlRlc3ROb2RlIik7IH0pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVy
ZmFjZTxUZXN0RXhjZXB0aW9uPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJp
YnV0ZSIsICJUZXN0RXhjZXB0aW9uIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwogICAgIGltcGwuc2V0VGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSgqbmF0aXZlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzU0LDYgKzM3NCwyNSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgcwogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uU2l4dGhOb2RlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiwgSlNU
ZXN0U2VyaWFsaXphdGlvbiYsIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKworYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uU2l4dGhOb2RlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoTm9kZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzaXh0aE5vZGVBdHRyaWJ1dGUiKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aE5vZGVBdHRyaWJ1dGVG
dW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExJbnRlcmZhY2U8VGVzdE5vZGU+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJzaXh0aE5vZGVBdHRyaWJ1dGUi
LCAiVGVzdE5vZGUiKTsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CisgICAgaW1wbC5zZXRTaXh0aE5vZGVBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVlKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworCiBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb246OmdldENv
bnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
ICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVj
dG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkp
OwpAQCAtMzgwLDYgKzQxOSwxMCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihFeAogICAgIEFTU0VS
VCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlmdGhMb25nQXR0cmlidXRlIiksIGZpZnRoTG9u
Z0F0dHJpYnV0ZVZhbHVlKTsKIAorICAgIGF1dG8gc2l4dGhOb2RlQXR0cmlidXRlVmFsdWUgPSBq
c1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhOb2RlQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNP
YmplY3QsIHRocm93U2NvcGUpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
c2l4dGhOb2RlQXR0cmlidXRlIiksIHNpeHRoTm9kZUF0dHJpYnV0ZVZhbHVlKTsKKwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmMwNmFlY2IzNDFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcApAQCAtMCww
ICsxLDIzOSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaCIKKworI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNP
TihKU0M6OkV4ZWNTdGF0ZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2NsYXNz
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25G
aW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9i
amVjdDsKKyAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUqIGNy
ZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwor
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5m
byhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD47CisKK3RlbXBsYXRlPD4gSlNW
YWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb246OmdldENvbnN0cnVjdG9yKHZt
LCAmZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnByb3RvdHlw
ZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0
cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIp
KSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisKK3Rl
bXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3Ry
dWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25z
dHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBj
b25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZVRh
YmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0sIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGlj
X2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0Q29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIs
IEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJp
dExvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0
cmlidXRlKSB9IH0sCisgICAgeyAidG9KU09OIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAor
fTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBl
OjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUiLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
UHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQpIH07CisKK0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4mJiBpbXBsKQor
ICAgIDogSlNUZXN0U2VyaWFsaXphdGlvbihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92
ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CisKK30KKworSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0OjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3Rv
dHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFs
aXphdGlvbjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7Cit9CisKK0pTT2JqZWN0KiBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6cHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXQ+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisK
K3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6Y2FzdEZvck9wZXJhdGlvbihFeGVjU3Rh
dGUmIHN0YXRlKQoreworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdCo+KHN0YXRlLnRoaXNWYWx1ZSgpKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKKworRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJ
bmhlcml0TG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdD46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiaW5oZXJpdExv
bmdBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmluaGVyaXRMb25nQXR0cmlidXRlKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0KSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKHN0
YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90
eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghZG9t
T2JqZWN0KSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0o
KSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0
dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Jiwg
SlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0SW5oZXJpdExvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhl
cml0TG9uZ0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldEluaGVyaXRMb25nQXR0cmlidXRlKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitKU1ZhbHVlIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVj
dG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNv
bnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5j
dGlvblRvSlNPTkNhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIGF1
dG8mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3Qoc3RhdGUpOworCisgICAgYXV0byBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZhbHVlID0ganNU
ZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNP
YmplY3QsIHRocm93U2NvcGUpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
Zmlyc3RTdHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSk7CisKKyAg
ICBhdXRvIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNv
bmRMb25nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOwor
ICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIp
LCBzZWNvbmRMb25nQXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byBmb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29w
ZSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGUiKSwgZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlVmFs
dWUpOworCisgICAgYXV0byBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6
YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dT
Y29wZSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaWZ0aExvbmdBdHRy
aWJ1dGUiKSwgZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byBzaXh0aE5vZGVB
dHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aE5vZGVBdHRyaWJ1dGVHZXR0
ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgQVNTRVJUKCF0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJzaXh0aE5vZGVBdHRyaWJ1dGUiKSwgc2l4dGhOb2RlQXR0cmlidXRl
VmFsdWUpOworCisgICAgYXV0byBpbmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlcigqc3RhdGUsICp0aGlz
T2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkp
OworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
ImluaGVyaXRMb25nQXR0cmlidXRlIiksIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUpOworCisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25U
b0pTT04oRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OmNhbGxPcGVyYXRpb248anNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcj4oc3RhdGUsICJ0b0pTT04iKTsK
K30KKworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZGUxZGIyN2NjNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9uLmgiCisj
aW5jbHVkZSAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgOiBwdWJsaWMgSlNUZXN0U2Vy
aWFsaXphdGlvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTVGVzdFNlcmlhbGl6YXRp
b247CisgICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDsKKyAg
ICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIGNyZWF0ZShKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0PiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdChzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1w
bCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7Cisg
ICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNy
ZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOworICAgIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgd3JhcHBl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0Jj4oQmFzZTo6d3JhcHBlZCgpKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFJlZjxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+JiYpOworCisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+IHsKKyAgICB1c2lu
ZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDsKKyAgICB1c2luZyBU
b1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ZGNhNjNjYzQyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAKQEAgLTAs
MCArMSwyODEgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaCIKKworI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKEpTQzo6RXhlY1N0YXRlKik7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0
cmlidXRlRm9vKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxM
b25nQXR0cmlidXRlRm9vKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xh
c3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9u
RmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQ
cm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBl
Pih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbD47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKHZtLCAm
Z2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpw
cm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250
RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRy
aXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbCIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51
bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBm
b3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAi
Y29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xv
dDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3Ry
dWN0b3IpIH0gfSwKKyAgICB7ICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iLCBDdXN0b21BY2Nlc3Nv
ciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmli
dXRlRm9vKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0
ZUZvbykgfSB9LAorICAgIHsgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIsIEN1c3RvbUFjY2Vzc29y
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1
dGVCYXIpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRl
QmFyKSB9IH0sCisgICAgeyAidG9KU09OIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0s
Cit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFBy
b3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5
cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMp
OworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6
c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiLCAmQmFzZTo6c19pbmZv
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwp
IH07CisKK0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OkpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4mJiBpbXBsKQor
ICAgIDogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQoc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qs
IFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CisKK30KKworSlNPYmplY3QqIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IGdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0KSkpOworfQorCitKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbDo6cHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWw+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw+OjpjYXN0Rm9yQXR0cmlidXRlKEV4ZWNTdGF0ZSYsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30K
KwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Y2FzdEZvck9wZXJh
dGlvbihFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKj4oc3RhdGUudGhpc1ZhbHVlKCkpOworfQor
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZp
bmFsTG9uZ0F0dHJpYnV0ZUZvb0dldHRlcihFeGVjU3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsJiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CisKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28oRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bD46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0
cmlidXRlRm9vR2V0dGVyPihzdGF0ZSwgdGhpc1ZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlRm9v
Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihpbXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUZvbygp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcihFeGVj
U3RhdGUmLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSk7CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OmF0dHJpYnV0ZTxqc1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVyPihzdGF0ZSwgdGhpc1Zh
bHVlLCAiZmluYWxMb25nQXR0cmlidXRlQmFyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihp
bXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUJhcigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIWRvbU9iamVjdCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgp
LCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlKiBkb21P
YmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
UHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VM
WSghZG9tT2JqZWN0KSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0
ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZp
bmFsTG9uZ0F0dHJpYnV0ZUZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKK2Jvb2wgc2V0SlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK3sKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxGaW5hbExvbmdBdHRyaWJ1dGVGb29GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlRm9vIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9v
RnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CisgICAgaW1wbC5zZXRGaW5hbExvbmdBdHRyaWJ1dGVGb28oV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOworICAgIHJldHVybiB0cnVlOworfQorCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyRnVu
Y3Rpb24oRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYsIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsRmluYWxMb25nQXR0cmlidXRlQmFyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJh
ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaW5hbExvbmdBdHRy
aWJ1dGVCYXIiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJGdW5jdGlvbihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25n
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNl
dEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKworSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpn
ZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpKTsKK30KKworc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05DYWxsZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogdGhpc09i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIGF1dG8mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUp
OworCisgICAgYXV0byBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXph
dGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93
U2NvcGUpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlyc3RTdHJpbmdB
dHRyaWJ1dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSk7CisKKyAgICBhdXRvIHNlY29u
ZExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmli
dXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIEFTU0VSVCgh
dGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25n
QXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgQVNT
RVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGUiKSwgZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlVmFsdWUpOworCisgICAg
YXV0byBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExv
bmdBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAg
QVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwgZmlm
dGhMb25nQXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byBzaXh0aE5vZGVBdHRyaWJ1dGVWYWx1
ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aE5vZGVBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAq
dGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJzaXh0aE5vZGVBdHRyaWJ1dGUiKSwgc2l4dGhOb2RlQXR0cmlidXRlVmFsdWUpOworCisg
ICAgYXV0byBpbmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJv
d1Njb3BlKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImluaGVyaXRMb25n
QXR0cmlidXRlIiksIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byBmaW5h
bExvbmdBdHRyaWJ1dGVCYXJWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29w
ZSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaW5hbExvbmdBdHRyaWJ1
dGVCYXIiKSwgZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUpOworCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVj
U3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcj4oc3RhdGUsICJ0b0pTT04iKTsK
K30KKworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjI4YmY3ODQxM2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdC5oIgorI2luY2x1ZGUgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbCA6IHB1YmxpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCB7CitwdWJs
aWM6CisgICAgdXNpbmcgQmFzZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OworICAgIHVz
aW5nIERPTVdyYXBwZWQgPSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDsKKyAgICBzdGF0
aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogY3JlYXRlKEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbD4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPihnbG9iYWxPYmplY3QtPnZtKCku
aGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwoc3RydWN0dXJlLCAqZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3Io
SlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbCYgd3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmPihCYXNlOjp3cmFwcGVk
KCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4geworICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw7CisgICAgdXNpbmcgVG9XcmFwcGVk
UmV0dXJuVHlwZSA9IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRsCmluZGV4IDk1MWFkNDRhY2NkLi41
MzA3NTA2NGUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRsCkBAIC0yNiw5ICsyNiwxMCBAQAogaW50
ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uIHsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICAgICAgIGZpcnN0U3RyaW5nQXR0cmlidXRlOwogICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAg
ICAgICAgICAgc2Vjb25kTG9uZ0F0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUgVGVzdE5vZGUgICAg
ICAgICAgICAgIHRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlIFRl
c3RFeGNlcHRpb24gICAgICAgICB0aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlOwogICAgIGF0
dHJpYnV0ZSB1bnJlc3RyaWN0ZWQgZG91YmxlICAgZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0
cmlidXRlOwogICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgZmlmdGhMb25nQXR0
cmlidXRlOworICAgIGF0dHJpYnV0ZSBUZXN0Tm9kZSAgICAgICAgICAgICAgc2l4dGhOb2RlQXR0
cmlidXRlOyAvLyBUZXN0Tm9kZSBpcyBzZXJpYWxpemFibGUuCiAKICAgICBzZXJpYWxpemVyID0g
eyBhdHRyaWJ1dGUgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaWRsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NjNhZDY5ODIzNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuaWRsCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdCA6IFRlc3RTZXJpYWxpemF0aW9uIHsKKyAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAg
ICAgICAgIGluaGVyaXRMb25nQXR0cmlidXRlOworCisgICAgc2VyaWFsaXplciA9IHsgaW5oZXJp
dCwgYXR0cmlidXRlIH07Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQzZjBmZGRlOGJi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmlkbApAQCAtMCwwICsxLDMxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK2ludGVyZmFjZSBUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCA6IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCB7Cisg
ICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaW5hbExvbmdBdHRyaWJ1dGVGb287
CisgICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICBmaW5hbExvbmdBdHRyaWJ1dGVC
YXI7CisKKyAgICBzZXJpYWxpemVyID0geyBpbmhlcml0LCBmaW5hbExvbmdBdHRyaWJ1dGVCYXIg
fTsKK307Cg==
</data>
<flag name="review"
          id="321367"
          type_id="1"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300039</attachid>
            <date>2017-01-28 09:34:44 -0800</date>
            <delta_ts>2017-01-28 23:28:47 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>inherit-1.patch</filename>
            <type>text/plain</type>
            <size>56130</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYWUxMDZhMzc2NC4uNGRhNjkwYTQ5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw1OCBAQAogMjAxNy0wMS0yOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgogCisgICAgICAgIFtXZWJJRExdIEFkZCBzdXBwb3J0IGZvciBpbmhlcml0IHNlcmlhbGl6
ZXIgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjcyNzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTdXBwb3J0IGZvciBzZXJpYWxpemVyIHsgaW5oZXJpdCB9LCB3aGljaCB3aWxsIGJlIHVz
ZWQgYnkgUmVzb3VyY2UgVGltaW5nLgorICAgICAgICBodHRwczovL2hleWNhbS5naXRodWIuaW8v
d2ViaWRsLyNpZGwtc2VyaWFsaXplcnMKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvci5wbToKKyAgICAgICAgKEdldEludGVyZmFjZUZvckF0dHJpYnV0ZSk6CisgICAg
ICAgIChJc1NlcmlhbGl6YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIERldGVybWluZSBpZiBhbiBh
dHRyaWJ1dGUgaXMgc2VyaWFsaXphYmxlIGF0IGdlbmVyYXRpb24gdGltZSBzbyB3ZSBjYW4KKyAg
ICAgICAgdmVyaWZ5IHR5cGVzLiBUaGlzIGFsbG93cyB1cyB0byBzdXBwb3J0IHR5cGVkZWZzLiBX
ZSBkb24ndCB5ZXQgc3VwcG9ydAorICAgICAgICBzZXJpYWxpemluZyBhbmQgYXR0cmlidXRlIHRo
YXQgaXMgaXRzZWxmIGEgc2VyaWFsaXphYmxlIGludGVyZmFjZS4KKworICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVTZXJpYWxp
emVyRnVuY3Rpb24pOgorICAgICAgICAoR2VuZXJhdGVTZXJpYWxpemVyQXR0cmlidXRlc0Zvcklu
dGVyZmFjZSk6CisgICAgICAgIEdlbmVyYXRlIGluaGVyaXRlZCBhdHRyaWJ1dGVzIGZpcnN0LCB0
aGVuIGdlbmVyYXRlIG91ciBvd24gbGlzdC4KKyAgICAgICAgRXhwbGljaXRseSBwcm92aWRlZCBh
dHRyaWJ1dGUgbmFtZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHNlcmlhbGl6YWJsZSwKKyAgICAgICAg
c28gcHJvZHVjZSBhbiBlcnJvciBpZiB0aGV5IGFyZSBub3QuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0lETFBhcnNlci5wbToKKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvbkF0dHJp
YnV0ZXMpOgorICAgICAgICBVcGRhdGUgcGFyc2luZyBvZiBzZXJpYWxpemVyIGF0dHJpYnV0ZXMg
dG8gYWxsb3cgZm9yIG11bHRpcGxlCisgICAgICAgIHNwZWNpYWwgc3RyaW5ncy4gVGhlIHNwZWMg
ZG9lcyBub3QgYWNjdXJhdGVseSBkZWZpbmUgd2hlcmUgdGhlCisgICAgICAgIHNwZWNpYWwgImF0
dHJpYnV0ZSIga2V5d29yZCBpcyBhbGxvd2VkLgorCisgICAgICAgIChhcHBseU1lbWJlckxpc3Qp
OgorICAgICAgICAoaXNTZXJpYWxpemFibGVBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICBN
b3ZlIHNlcmlhbGl6YWJsZSBhdHRyaWJ1dGUgY2hlY2tpbmcgdG8gZ2VuZXJhdGlvbi4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbC5oOiBBZGRlZC4KKyAgICAgICAgVGhlIHRvSlNPTiBpbXBsZW1lbnRhdGlvbnMg
YXJlIHRoZSBtb3N0IGludGVyZXN0aW5nLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbDoKKyAgICAgICAgRXh0ZW5kIHRoaXMgdGVzdCBmb3Ig
dHlwZWRlZmVkIGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VyaWFsaXphYmxlLgorICAgICAgICBDaGFu
Z2UgVGVzdE5vZGUgKGEgc2VyaWFsaXphYmxlIEludGVyZmFjZSkgdG8gVGVzdEV4Y2VwdGlvbiAo
YW4KKyAgICAgICAgdW5zZXJpYWxpemFibGUgSW50ZXJmYWNlKSBmb3IgZXhwZWN0ZWQgYmVoYXZp
b3Igb2YgYW4KKyAgICAgICAgdW5zZXJpYWxpemFibGUgYXR0cmlidXRlLgorCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5pZGw6CisgICAg
ICAgIFRlc3QgZm9yIHsgaW5oZXJpdCwgYXR0cmlidXRlIH0uCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaWRsOgorICAgICAg
ICBUZXN0IGZvciB7IGluaGVyaXQsIGF0dHJpYnV0ZV9uYW1lcy4uLiB9LCBhbmQgbXVsdGktbGV2
ZWwgaW5oZXJpdC4KKworMjAxNy0wMS0yOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgorCiAgICAgICAgIEltcGxlbWVudCBQZXJmb3JtYW5jZU9ic2VydmVyCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc1NDYKICAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzMwMjQ3OTU5PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCmluZGV4IGVkNDczNTY3Y2QzLi4xOWUyY2I4NGFhZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5w
bQpAQCAtMzE0LDYgKzMxNCwxNSBAQCBzdWIgSURMRmlsZUZvckludGVyZmFjZQogICAgIHJldHVy
biAkaWRsRmlsZXMtPnskaW50ZXJmYWNlTmFtZX07CiB9CiAKK3N1YiBHZXRJbnRlcmZhY2VGb3JB
dHRyaWJ1dGUKK3sKKyAgICBteSAoJG9iamVjdCwgJGN1cnJlbnRJbnRlcmZhY2UsICRhdHRyaWJ1
dGUpID0gQF87CisKKyAgICByZXR1cm4gdW5kZWYgdW5sZXNzICRvYmplY3QtPklzSW50ZXJmYWNl
VHlwZSgkYXR0cmlidXRlLT50eXBlKTsKKworICAgIHJldHVybiAkb2JqZWN0LT5QYXJzZUludGVy
ZmFjZSgkY3VycmVudEludGVyZmFjZSwgJGF0dHJpYnV0ZS0+dHlwZS0+bmFtZSk7Cit9CisKIHN1
YiBHZXRBdHRyaWJ1dGVGcm9tSW50ZXJmYWNlCiB7CiAgICAgbXkgKCRvYmplY3QsICRvdXRlcklu
dGVyZmFjZSwgJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGVOYW1lKSA9IEBfOwpAQCAtOTEzLDYg
KzkyMiwzMSBAQCBzdWIgSXNXcmFwcGVyVHlwZQogICAgIHJldHVybiAwOwogfQogCitzdWIgSXNT
ZXJpYWxpemFibGVBdHRyaWJ1dGUKK3sKKyAgICBteSAoJG9iamVjdCwgJGN1cnJlbnRJbnRlcmZh
Y2UsICRhdHRyaWJ1dGUpID0gQF87CisKKyAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93
ZWJpZGwvI2Rmbi1zZXJpYWxpemFibGUtdHlwZQorCisgICAgbXkgJHR5cGUgPSAkYXR0cmlidXRl
LT50eXBlOworICAgIHJldHVybiAxIGlmICR0eXBlLT5uYW1lIGVxICJib29sZWFuIjsKKyAgICBy
ZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc051bWVyaWNUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gMSBp
ZiAkb2JqZWN0LT5Jc0VudW1UeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5J
c1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJldHVybiAxIGlmICR0eXBlLT5pc1VuaW9uOworICAg
IHJldHVybiAxIGlmICRvYmplY3QtPklzU2VxdWVuY2VUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4g
MSBpZiAkb2JqZWN0LT5Jc0RpY3Rpb25hcnlUeXBlKCR0eXBlKTsKKworICAgIHJldHVybiAwIGlm
ICR0eXBlLT5uYW1lIGVxICJFdmVudEhhbmRsZXIiOworCisgICAgbXkgJGludGVyZmFjZSA9IEdl
dEludGVyZmFjZUZvckF0dHJpYnV0ZSgkb2JqZWN0LCAkY3VycmVudEludGVyZmFjZSwgJGF0dHJp
YnV0ZSk7CisgICAgaWYgKCRpbnRlcmZhY2UgJiYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7
CisgICAgICAgIGRpZSAiU2VyaWFsaXplciBmb3Igbm9uLXByaW1pdGl2ZSB0eXBlcyBpcyBub3Qg
Y3VycmVudGx5IHN1cHBvcnRlZCI7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHN1YiBH
ZXRJbnRlcmZhY2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9tTmFtZQogewogICAgICMgRklYTUU6IEl0
J3MgYmFkIHRvIGhhdmUgYSBmdW5jdGlvbiBsaWtlIHRoaXMgdGhhdCBvcGVucyBhbm90aGVyIElE
TCBmaWxlIHRvIGFuc3dlciBhIHF1ZXN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA3MTIxYmRjYTJlMS4uZmE3OTQ2
M2Y3YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCkBAIC00Mzk0LDE4ICs0Mzk0LDU1IEBAIHN1YiBHZW5lcmF0ZVNlcmlhbGl6
ZXJGdW5jdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAi
XG4iKTsKIAorICAgIEdlbmVyYXRlU2VyaWFsaXplckF0dHJpYnV0ZXNGb3JJbnRlcmZhY2UoJGlu
dGVyZmFjZSwgJGNsYXNzTmFtZSk7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVu
Y3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKUyRpbnRlcmZhY2VOYW1lPjo6Y2FsbE9wZXJhdGlvbjwke3NlcmlhbGl6ZXJOYXRpdmVGdW5j
dGlvbk5hbWV9Q2FsbGVyPihzdGF0ZSwgXCIkc2VyaWFsaXplckZ1bmN0aW9uTmFtZVwiKTtcbiIp
OworICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiIpOworfQorCitzdWIgR2VuZXJhdGVTZXJpYWxpemVyQXR0cmlidXRlc0ZvckludGVyZmFj
ZQoreworICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOworCisgICAgbXkgJGlu
dGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT50eXBlLT5uYW1lOworCisgICAgaWYgKCRpbnRlcmZh
Y2UtPnNlcmlhbGl6YWJsZS0+aGFzSW5oZXJpdCkgeworICAgICAgICBteSAkcGFyZW50U2VyaWFs
aXplckludGVyZmFjZSA9IDA7CisgICAgICAgICRjb2RlR2VuZXJhdG9yLT5Gb3JBbGxQYXJlbnRz
KCRpbnRlcmZhY2UsIHN1YiB7CisgICAgICAgICAgICBteSAkcGFyZW50SW50ZXJmYWNlID0gc2hp
ZnQ7CisgICAgICAgICAgICBpZiAoJHBhcmVudEludGVyZmFjZS0+c2VyaWFsaXphYmxlICYmICEk
cGFyZW50U2VyaWFsaXplckludGVyZmFjZSkgeworICAgICAgICAgICAgICAgICRwYXJlbnRTZXJp
YWxpemVySW50ZXJmYWNlID0gJHBhcmVudEludGVyZmFjZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwgMCk7CisKKyAgICAgICAgZGllICJGYWlsZWQgdG8gZmluZCBwYXJlbnQgaW50ZXJmYWNl
IHdpdGggXCJzZXJpYWxpemVyXCIgZm9yIFwiaW5oZXJpdFwiIHNlcmlhbGl6ZXIgaW4gJGludGVy
ZmFjZU5hbWVcbiIgaWYgISRwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlOworCisgICAgICAgIEdl
bmVyYXRlU2VyaWFsaXplckF0dHJpYnV0ZXNGb3JJbnRlcmZhY2UoJHBhcmVudFNlcmlhbGl6ZXJJ
bnRlcmZhY2UsICRjbGFzc05hbWUpOworICAgIH0KKwogICAgIG15IEBzZXJpYWxpemVkQXR0cmli
dXRlcyA9ICgpOworCiAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlTmFtZSAoQHskaW50ZXJmYWNl
LT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9KSB7CiAgICAgICAgIG15ICRmb3VuZEF0dHJpYnV0
ZSA9IDA7CiAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRy
aWJ1dGVzfSkgewogICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGVOYW1lIGVxICRhdHRyaWJ1dGUt
Pm5hbWUpIHsKLSAgICAgICAgICAgICAgICBwdXNoIEBzZXJpYWxpemVkQXR0cmlidXRlcywgJGF0
dHJpYnV0ZTsKICAgICAgICAgICAgICAgICAkZm91bmRBdHRyaWJ1dGUgPSAxOworICAgICAgICAg
ICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTZXJpYWxpemFibGVBdHRyaWJ1dGUoJGludGVy
ZmFjZSwgJGF0dHJpYnV0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAc2VyaWFsaXpl
ZEF0dHJpYnV0ZXMsICRhdHRyaWJ1dGUpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgbGFzdDsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBkaWUgIkV4cGxpY2l0IFwic2VyaWFsaXplclwiIGF0dHJpYnV0ZSBcIiRhdHRy
aWJ1dGVOYW1lXCIgaXMgbm90IHNlcmlhbGl6YWJsZVxuIiBpZiAhJGludGVyZmFjZS0+c2VyaWFs
aXphYmxlLT5oYXNBdHRyaWJ1dGU7CiAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZGllICJGYWlsZWQgdG8gZmluZCBcInNl
cmlhbGl6ZXJcIiBhdHRyaWJ1dGUgXCIkYXR0cmlidXRlTmFtZVwiIGluICRpbnRlcmZhY2VOYW1l
IiBpZiAhJGZvdW5kQXR0cmlidXRlOworICAgICAgICBkaWUgIkZhaWxlZCB0byBmaW5kIFwic2Vy
aWFsaXplclwiIGF0dHJpYnV0ZSBcIiRhdHRyaWJ1dGVOYW1lXCIgaW4gJGludGVyZmFjZU5hbWVc
biIgaWYgISRmb3VuZEF0dHJpYnV0ZTsKICAgICB9CiAKICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1
dGUgKEBzZXJpYWxpemVkQXR0cmlidXRlcykgewpAQCAtNDQxNywxNSArNDQ1NCw2IEBAIHN1YiBH
ZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtu
YW1lfVwiKSwgJHtuYW1lfVZhbHVlKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IlxuIik7CiAgICAgfQotCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFt
ZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlMkaW50
ZXJmYWNlTmFtZT46OmNhbGxPcGVyYXRpb248JHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1l
fUNhbGxlcj4oc3RhdGUsIFwiJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWVcIik7XG4iKTsKLSAgICBw
dXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsK
IH0KIAogc3ViIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXggOTc5YmUzM2I5NjkuLjQ1NDRi
YjEwZTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBh
cnNlci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5w
bQpAQCAtMTIzNiwyOCArMTIzNiwzMCBAQCBzdWIgcGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRl
cwogewogICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAgbXkgJHNlcmlhbGl6YWJsZSA9IHNoaWZ0
OwotICAgIG15ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tlbigpOwotCi0gICAgaWYgKCR0b2tlbi0+
dmFsdWUoKSBlcSAiZ2V0dGVyIikgewotICAgICAgICAkc2VyaWFsaXphYmxlLT5oYXNHZXR0ZXIo
MSk7Ci0gICAgICAgIGRpZSAiU2VyaWFsaXplciBnZXR0ZXIga2V5d29yZCBpcyBub3QgY3VycmVu
dGx5IHN1cHBvcnRlZC4iOwotCi0gICAgfQotICAgIGlmICgkdG9rZW4tPnZhbHVlKCkgZXEgImlu
aGVyaXQiKSB7Ci0gICAgICAgICRzZXJpYWxpemFibGUtPmhhc0luaGVyaXQoMSk7Ci0gICAgICAg
IGRpZSAiU2VyaWFsaXplciBpbmhlcml0IGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0
ZWQuIjsKLSAgICB9Ci0KLSAgICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJhdHRyaWJ1dGUiKSB7
Ci0gICAgICAgICRzZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZSgxKTsKLSAgICAgICAgIyBBdHRy
aWJ1dGVzIHdpbGwgYmUgZmlsbGVkIGluIHZpYSBhcHBseU1lbWJlckxpc3QoKQotICAgICAgICBy
ZXR1cm47Ci0gICAgfQogCiAgICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKLSAgICAkc2VsZi0+YXNz
ZXJ0VG9rZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKLSAgICBwdXNoKEBhdHRyaWJ1
dGVzLCAkdG9rZW4tPnZhbHVlKCkpOwotICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JHNlbGYtPnBh
cnNlSWRlbnRpZmllcnMoKX0pOworICAgIG15IEBpZGVudGlmaWVycyA9ICRzZWxmLT5wYXJzZUlk
ZW50aWZpZXJMaXN0KCk7CisKKyAgICBmb3IgbXkgJGlkZW50aWZpZXIgKEBpZGVudGlmaWVycykg
eworICAgICAgICBpZiAoJGlkZW50aWZpZXIgZXEgImdldHRlciIpIHsKKyAgICAgICAgICAgICRz
ZXJpYWxpemFibGUtPmhhc0dldHRlcigxKTsKKyAgICAgICAgICAgIGRpZSAiU2VyaWFsaXplciBn
ZXR0ZXIga2V5d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCRpZGVudGlmaWVyIGVxICJpbmhlcml0IikgeworICAgICAgICAgICAgJHNl
cmlhbGl6YWJsZS0+aGFzSW5oZXJpdCgxKTsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoJGlkZW50aWZpZXIgZXEgImF0dHJpYnV0ZSIpIHsKKyAgICAgICAgICAg
ICRzZXJpYWxpemFibGUtPmhhc0F0dHJpYnV0ZSgxKTsKKyAgICAgICAgICAgICMgQXR0cmlidXRl
cyB3aWxsIGJlIGZpbGxlZCBpbiB2aWEgYXBwbHlNZW1iZXJMaXN0KCkKKyAgICAgICAgICAgIG5l
eHQ7CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkaWRlbnRpZmllcik7
CisgICAgfQorCiAgICAgJHNlcmlhbGl6YWJsZS0+YXR0cmlidXRlcyhcQGF0dHJpYnV0ZXMpOwog
fQogCkBAIC0yMzc3LDE3ICsyMzc5LDYgQEAgc3ViIHBhcnNlTmFtZQogICAgICRzZWxmLT5hc3Nl
cnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCkpOwogfQogCi1zdWIgaXNTZXJpYWxpemFi
bGVBdHRyaWJ1dGUKLXsKLSAgICBteSAkYXR0cmlidXRlID0gc2hpZnQ7Ci0KLSAgICAjIEZJWE1F
OiBOZWVkIHRvIHN1cHBvcnQgbW9yZSB0aGFuIHByaW1pdGl2ZSBzZXJpYWxpemFibGUgdHlwZXMu
Ci0gICAgIyBUaGlzIGNoZWNrIG1heSBoYXZlIHRvIG1vdmUgdG8gdGhlIGNvZGUgZ2VuZXJhdG9y
LCBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbgotICAgICMgaGVyZSB0byBkZXRl
cm1pbmUgc2VyaWFsaXphYmlsaXR5OiBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNp
ZGwtc2VyaWFsaXplcnMKLSAgICBteSAkc2VyaWFsaXphYmxlX3R5cGVzID0gJ14oXChieXRlfG9j
dGV0fHNob3J0fHVuc2lnbmVkIHNob3J0fGxvbmd8dW5zaWduZWQgbG9uZ3xsb25nIGxvbmd8dW5z
aWduZWQgbG9uZyBsb25nfGZsb2F0fHVucmVzdHJpY3RlZCBmbG9hdHxkb3VibGV8dW5yZXN0cmlj
dGVkIGRvdWJsZXxib29sZWFufERPTVN0cmluZ3xCeXRlU3RyaW5nfFVTVlN0cmluZykkJzsKLSAg
ICByZXR1cm4gJGF0dHJpYnV0ZS0+dHlwZS0+bmFtZSA9fiAvJHNlcmlhbGl6YWJsZV90eXBlcy87
Ci19Ci0KIHN1YiBhcHBseU1lbWJlckxpc3QKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7
CkBAIC0yNDI0LDkgKzI0MTUsNyBAQCBzdWIgYXBwbHlNZW1iZXJMaXN0CiAgICAgICAgIG15ICRu
dW1TZXJpYWxpemVyQXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRy
aWJ1dGVzfTsKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+aGFzQXR0cmli
dXRlKSB7CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+
YXR0cmlidXRlc30pIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNTZXJpYWxpemFibGVBdHRyaWJ1
dGUoJGF0dHJpYnV0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2Ut
PnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxl
LT5hdHRyaWJ1dGVzfSwgJGF0dHJpYnV0ZS0+bmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzaWYgKCRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAwKSB7CiAgICAgICAgICAgICBm
b3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemF0aW9uLmNwcAppbmRleCBiOTNkOWJmZDJmYi4uMDc5YjVhYWFkYzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiSlNET01Db252ZXJ0LmgiCi0jaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgorI2luY2x1ZGUgIkpT
VGVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4K
ICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgpAQCAtNDksNiArNDksOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUoSlNDOjpFeAogYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CiBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCkBAIC0xMDQsNiArMTA2LDcg
QEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5
cGVUYWJsZVZhbHVlc1tdID0KICAgICB7ICJ0aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlIiwg
Q3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxp
emFibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0
dHJpYnV0ZSkgfSB9LAogICAgIHsgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSIs
IEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmlj
dGVkRG91YmxlQXR0cmlidXRlKSB9IH0sCiAgICAgeyAiZmlmdGhMb25nQXR0cmlidXRlIiwgQ3Vz
dG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0
ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJz
aXh0aFR5cGVkZWZBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJp
YWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRo
VHlwZWRlZkF0dHJpYnV0ZSkgfSB9LAogICAgIHsgInRvSlNPTiIsIEpTQzo6RnVuY3Rpb24sIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9
LAogfTsKIApAQCAtMTk5LDcgKzIwMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjCiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExJbnRlcmZhY2U8VGVzdE5vZGU+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCksIGltcGwudGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RFeGNlcHRpb24+PihzdGF0ZSwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIGltcGwudGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMzUsNiArMjM4LDIyIEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbiYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwor
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb24+OjphdHRy
aWJ1dGU8anNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRlcj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRG91YmxlPihpbXBsLnNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CkBAIC0zMDksNyArMzI4LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlRnVuY3Rpb24oRXgKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAidGhpcmRVbnNlcmlh
bGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0Tm9kZSIpOyB9KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdEV4Y2VwdGlvbj4+KHN0YXRlLCB2YWx1ZSwgW10o
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0
cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInRoaXJk
VW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIpOyB9KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpbXBsLnNldFRoaXJkVW5z
ZXJpYWxpemFibGVBdHRyaWJ1dGUoKm5hdGl2ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM1NCw2ICszNzMsMjUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25GaWZ0aExvbmdBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUmIHMKIH0KIAogCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb24mLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CisKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJp
YWxpemF0aW9uPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVk
ZWZBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2l4
dGhUeXBlZGVmQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihzdGF0ZSwgdmFs
dWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIGlt
cGwuc2V0U2l4dGhUeXBlZGVmQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworCiBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6YXRpb246OmdldENvbnN0
cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9y
Pih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwpA
QCAtMzgwLDYgKzQxOCwxMCBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcihFeAogICAgIEFTU0VSVCgh
dGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlmdGhMb25nQXR0cmlidXRlIiksIGZpZnRoTG9uZ0F0
dHJpYnV0ZVZhbHVlKTsKIAorICAgIGF1dG8gc2l4dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUgPSBq
c1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRo
aXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24o
KSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAic2l4dGhUeXBlZGVmQXR0cmlidXRlIiksIHNpeHRoVHlwZWRlZkF0dHJpYnV0ZVZhbHVlKTsK
KwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmQ0ZmIyYzY1ZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNw
cApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaCIKKworI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5j
dGlvblRvSlNPTihKU0M6OkV4ZWNTdGF0ZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CisKK2NsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlIDogcHVibGljIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNO
b25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGU+KHZtLmhlYXApKSBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3Vz
aW5nIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVj
dG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD47CisKK3RlbXBs
YXRlPD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yOjpwcm90
b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb246OmdldENvbnN0
cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6
OnByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdCIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7
Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIsICZC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisK
K3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFBy
b3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0s
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4oanNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvciksIChpbnRwdHJf
dCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJpbmhlcml0TG9uZ0F0
dHJpYnV0ZSIsIEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0SW5oZXJpdExvbmdBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVy
aXRMb25nQXR0cmlidXRlKSB9IH0sCisgICAgeyAidG9KU09OIiwgSlNDOjpGdW5jdGlvbiwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAo
MCkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
UHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUi
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0UHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFz
c0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQpIH07CisKK0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
OjpKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4m
JiBpbXBsKQorICAgIDogSlNUZXN0U2VyaWFsaXphdGlvbihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCit9CisKK0pTT2JqZWN0KiBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3Qs
IEpTVGVzdFNlcmlhbGl6YXRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOworfQor
CitKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnByb3RvdHlwZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3Rv
dHlwZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisK
K3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3Rh
dGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Kj4oc3RhdGUudm0oKSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCogQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdD46OmNhc3RGb3JPcGVyYXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqPihzdGF0ZS52bSgp
LCBzdGF0ZS50aGlzVmFsdWUoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYs
IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CisK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQ+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0
dHJpYnV0ZUdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImluaGVyaXRMb25nQXR0cmlidXRlIik7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdElu
aGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMTG9uZz4oaW1wbC5pbmhlcml0TG9uZ0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0UHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CisgICAgaWYgKFVOTElLRUxZKCFkb21PYmplY3QpKQorICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGUqPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghZG9tT2JqZWN0
KSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3RvcgorICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3Rh
dGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5o
ZXJpdExvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9u
Z0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldEluaGVyaXRMb25nQXR0cmlidXRlKFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitKU1ZhbHVlIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRv
SlNPTkNhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCog
dGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIGF1dG8mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
c3RhdGUpOworCisgICAgYXV0byBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2Vy
aWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3Qs
IHRocm93U2NvcGUpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlyc3RT
dHJpbmdBdHRyaWJ1dGUiKSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSk7CisKKyAgICBhdXRv
IHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25n
QXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIEFT
U0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNv
bmRMb25nQXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byBmb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7Cisg
ICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGUiKSwgZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlVmFsdWUpOwor
CisgICAgYXV0byBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25G
aWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUi
KSwgZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byBzaXh0aFR5cGVkZWZBdHRy
aWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0
ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgQVNTRVJUKCF0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgc2l4dGhUeXBlZGVmQXR0
cmlidXRlVmFsdWUpOworCisgICAgYXV0byBpbmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlcigqc3RhdGUs
ICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0
aW9uKCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImluaGVyaXRMb25nQXR0cmlidXRlIiksIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUp
OworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT04oRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OmNhbGxPcGVyYXRpb248anNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcj4oc3RhdGUsICJ0b0pT
T04iKTsKK30KKworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZGUxZGIyN2NjNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemF0aW9u
LmgiCisjaW5jbHVkZSAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgOiBwdWJsaWMgSlNU
ZXN0U2VyaWFsaXphdGlvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTVGVzdFNlcmlh
bGl6YXRpb247CisgICAgdXNpbmcgRE9NV3JhcHBlZCA9IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dDsKKyAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIGNyZWF0ZShKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0PiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdChzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1v
dmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0o
KSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAg
IHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29u
c3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYg
d3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0Jj4oQmFzZTo6d3JhcHBlZCgpKTsKKyAgICB9Citwcm90ZWN0ZWQ6
CisgICAgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+JiYpOworCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+IHsKKyAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDsKKyAgICB1
c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uMzhlZTI4OTdlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAK
QEAgLTAsMCArMSwyODEgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaCIKKwor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlND
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKEpTQzo6RXhlY1N0YXRlKik7CisKKy8vIEF0dHJpYnV0ZXMKKwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxM
b25nQXR0cmlidXRlRm9vKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
RmluYWxMb25nQXR0cmlidXRlRm9vKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
KworY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6
OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJv
dG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZp
bmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9y
KHZtLCAmZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsOjpwcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbCIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBE
b250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0
YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7Cisg
ICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
Q29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJmaW5hbExvbmdBdHRyaWJ1dGVGb28iLCBDdXN0b21B
Y2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25n
QXR0cmlidXRlRm9vKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0
dHJpYnV0ZUZvbykgfSB9LAorICAgIHsgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIsIEN1c3RvbUFj
Y2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdB
dHRyaWJ1dGVCYXIpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0
cmlidXRlQmFyKSB9IH0sCisgICAgeyAidG9KU09OIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgw
KSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbFByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQ
cm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXMo
dm0sIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVUYWJsZVZhbHVlcywg
KnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbDo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwpIH07CisKK0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OkpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4mJiBp
bXBsKQorICAgIDogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQoc3RydWN0dXJlLCBnbG9iYWxP
YmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCit9CisKK0pT
T2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpjcmVhdGVQcm90b3R5cGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Ojpwcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw6OnByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogQmluZGluZ0NhbGxlcjxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Y2FzdEZvckF0dHJpYnV0ZShFeGVjU3RhdGUmIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihzdGF0ZS52bSgpLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwqIEJpbmRpbmdDYWxsZXI8SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbD46OmNhc3RGb3JPcGVyYXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAg
ICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bCo+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVG
b29HZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpOworCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjphdHRyaWJ1dGU8anNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb0dldHRlcj4o
c3RhdGUsIHRoaXNWYWx1ZSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIpOworfQorCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0
dHJpYnV0ZUZvb0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZz4oaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVGb28oKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoRXhlY1N0YXRlJiwgSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCYsIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmli
dXRlQmFyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw+OjphdHRyaWJ1dGU8anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZp
bmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcj4oc3RhdGUsIHRoaXNWYWx1ZSwgImZpbmFsTG9uZ0F0
dHJpYnV0ZUJhciIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oaW1wbC5maW5hbExvbmdBdHRy
aWJ1dGVCYXIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUqIGRvbU9i
amVjdCA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQ
cm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJ
S0VMWSghZG9tT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+
Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghZG9tT2Jq
ZWN0KSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3RvcgorICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwg
c3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0
dHJpYnV0ZUZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwmLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExv
bmdBdHRyaWJ1dGVGb29GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
ZmluYWxMb25nQXR0cmlidXRlRm9vIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vRnVuY3Rpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CisgICAgaW1wbC5zZXRGaW5hbExvbmdBdHRyaWJ1dGVGb28oV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OworICAgIHJldHVybiB0cnVlOworfQorCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyRnVuY3Rpb24oRXhl
Y1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYsIEpTVmFsdWUsIFRocm93
U2NvcGUmKTsKKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxM
b25nQXR0cmlidXRlQmFyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIi
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJGdW5jdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBpbXBsLnNldEZpbmFsTG9u
Z0F0dHJpYnV0ZUJhcihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKKworSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1
Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxD
b25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QpKTsKK30KKworc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05DYWxsZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogdGhpc09iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOworCisgICAg
YXV0byBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0
U3RyaW5nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOwor
ICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUi
KSwgZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSk7CisKKyAgICBhdXRvIHNlY29uZExvbmdBdHRy
aWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVy
KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIEFTU0VSVCghdGhyb3dTY29w
ZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpLCBzZWNvbmRMb25nQXR0cmlidXRl
VmFsdWUpOworCisgICAgYXV0byBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1
ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVH
ZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgQVNTRVJUKCF0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKSwg
Zm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byBmaWZ0
aExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1
dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgQVNTRVJUKCF0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwgZmlmdGhMb25nQXR0
cmlidXRlVmFsdWUpOworCisgICAgYXV0byBzaXh0aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSA9IGpz
VGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhp
c09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJzaXh0aFR5cGVkZWZBdHRyaWJ1dGUiKSwgc2l4dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUpOwor
CisgICAgYXV0byBpbmhlcml0TG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0
aHJvd1Njb3BlKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImluaGVyaXRM
b25nQXR0cmlidXRlIiksIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUpOworCisgICAgYXV0byBm
aW5hbExvbmdBdHRyaWJ1dGVCYXJWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dT
Y29wZSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaW5hbExvbmdBdHRy
aWJ1dGVCYXIiKSwgZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUpOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTihF
eGVjU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw+OjpjYWxsT3BlcmF0aW9uPGpzVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTkNhbGxlcj4oc3RhdGUsICJ0b0pTT04i
KTsKK30KKworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjI4YmY3ODQxM2MK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8q
CisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5oIgorI2luY2x1ZGUgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbCA6IHB1YmxpYyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCB7Citw
dWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OworICAg
IHVzaW5nIERPTVdyYXBwZWQgPSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDsKKyAgICBz
dGF0aWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogY3JlYXRlKEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPihnbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwoc3RydWN0dXJlLCAqZ2xv
YmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbCYgd3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmPihCYXNlOjp3cmFw
cGVkKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWw+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7Cit9OworCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4geworICAgIHVzaW5nIFdyYXBwZXJD
bGFzcyA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw7CisgICAgdXNpbmcgVG9XcmFw
cGVkUmV0dXJuVHlwZSA9IFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXphdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRsCmluZGV4IDk1MWFkNDRhY2Nk
Li5jODU3MjMxN2MzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb24uaWRsCkBAIC0yMywxMiArMjMsMTUgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKK3R5cGVkZWYgZG91YmxlIFRlc3RUaW1lU3RhbXA7CisK
IGludGVyZmFjZSBUZXN0U2VyaWFsaXphdGlvbiB7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZyAg
ICAgICAgICAgICBmaXJzdFN0cmluZ0F0dHJpYnV0ZTsKICAgICBhdHRyaWJ1dGUgbG9uZyAgICAg
ICAgICAgICAgICAgIHNlY29uZExvbmdBdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlIFRlc3ROb2Rl
ICAgICAgICAgICAgICB0aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlOworICAgIGF0dHJpYnV0
ZSBUZXN0RXhjZXB0aW9uICAgICAgICAgdGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZTsKICAg
ICBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSAgIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZTsKICAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgIGZpZnRoTG9u
Z0F0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgVGVzdFRpbWVTdGFtcCAgICAgICAgIHNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZTsKIAogICAgIHNlcmlhbGl6ZXIgPSB7IGF0dHJpYnV0ZSB9OwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjk2M2FkNjk4MjM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5pZGwKQEAg
LTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCitpbnRlcmZhY2UgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IDogVGVzdFNlcmlhbGl6YXRp
b24geworICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgaW5oZXJpdExvbmdBdHRy
aWJ1dGU7CisKKyAgICBzZXJpYWxpemVyID0geyBpbmhlcml0LCBhdHRyaWJ1dGUgfTsKK307CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWwuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmlkbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDNmMGZkZGU4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwuaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworaW50ZXJmYWNlIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsIDogVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IHsKKyAgICBhdHRyaWJ1dGUgbG9uZyAgICAg
ICAgICAgICAgICAgIGZpbmFsTG9uZ0F0dHJpYnV0ZUZvbzsKKyAgICBhdHRyaWJ1dGUgbG9uZyAg
ICAgICAgICAgICAgICAgIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhcjsKKworICAgIHNlcmlhbGl6ZXIg
PSB7IGluaGVyaXQsIGZpbmFsTG9uZ0F0dHJpYnV0ZUJhciB9OworfTsK
</data>
<flag name="review"
          id="321959"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>