<?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>49704</bug_id>
          
          <creation_ts>2010-11-17 18:04:11 -0800</creation_ts>
          <short_desc>Make binding code generation scripts support &apos;short&apos; type</short_desc>
          <delta_ts>2010-11-18 18:16:22 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</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="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>abarth</cc>
    
    <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>310653</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-11-17 18:04:11 -0800</bug_when>
    <thetext>The current code generation scripts have some handling for &apos;short&apos; type, but incomplete. We need to enhance the scripts to support using &apos;short&apos; type in IDL. This is needed in DataView idl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310665</commentid>
    <comment_count>1</comment_count>
      <attachid>74191</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-11-17 18:49:14 -0800</bug_when>
    <thetext>Created attachment 74191
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311086</commentid>
    <comment_count>2</comment_count>
      <attachid>74191</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-18 13:53:25 -0800</bug_when>
    <thetext>Comment on attachment 74191
Proposed Patch

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

This mostly looks good, but r- for the style issues, and I have a couple of additional questions.

&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:62
&gt; -    WebCore::JSMainThreadNullState state;
&gt;      g_return_val_if_fail(self, 0);
&gt; +    WebCore::JSMainThreadNullState state;

These movements of lines of code are a significant fraction of this patch and don&apos;t seem directly related to this fix. If this is the case then please split them off into a separate patch. It would seem fine to me to check in support for &quot;short&quot; first and then move this code.

&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:920
&gt; -#if ENABLE(Condition1)
&gt;  glong
&gt;  webkit_dom_test_obj_get_conditional_attr1(WebKitDOMTestObj* self)
&gt;  {
&gt; -    WebCore::JSMainThreadNullState state;
&gt; +#if ENABLE(Condition1)
&gt;      g_return_val_if_fail(self, 0);
&gt; +    WebCore::JSMainThreadNullState state;
&gt;      WebCore::TestObj * item = WebKit::core(self);
&gt;      glong res = item-&gt;conditionalAttr1();
&gt;      return res;
&gt; -}
&gt; +#else
&gt; +    return static_cast&lt;glong&gt;(0);
&gt;  #endif /* ENABLE(Condition1) */
&gt; +}

Could you explain why the structures of these #ifs are being changed?

&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:1461
&gt; +                                                           &quot;test_obj_short-attr&quot;, /* short description */
&gt; +                                                           &quot;read-write  gshort TestObj.short-attr&quot;, /* longer - could do with some extra doc stuff here */
&gt; +                                                           G_MININT, /* min */
&gt; +G_MAXINT, /* max */
&gt; +0, /* default */
&gt; +                                                           WEBKIT_PARAM_READWRITE));

Indentation is messed up here.

&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:286
&gt; -    JSValue result = jsNumber(exec, imp-&gt;readOnlyIntAttr());
&gt; +    JSValue result = jsNumber(imp-&gt;readOnlyIntAttr());

How were these changes tested? Clearly the earlier code didn&apos;t compile, and I don&apos;t see any build file changes in this patch.

&gt; WebCore/bindings/scripts/test/JS/JSTestObj.cpp:1513
&gt; +    UNUSED_PARAM(exec);    return jsNumber(static_cast&lt;int&gt;(0));

Minimally you need to split these into two lines. However, a solution that conforms more to WebKit style would be just to declare &quot;ExecState*, (other args)&quot; and remove the UNUSED_PARAM.

&gt; WebCore/bindings/scripts/test/TestObj.idl:38
&gt; +        attribute short                    shortAttr;

I think you should test both short and unsigned short, in particular including boundary conditions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311107</commentid>
    <comment_count>3</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-11-18 15:05:28 -0800</bug_when>
    <thetext>All the changes in *.cpp and *.h are auto-generated by run-binding-tests. The last person who made changes to code generation scripts did not run the script to regenerate the binding test results. So this is the reason that you see quite a few changes in *.cpp and *.h that are unrelated to adding &quot;short&quot; support. Those style errors were introduced by some other people&apos;s changes to code generation scripts, for which I rather not to fix.

(In reply to comment #2)
&gt; (From update of attachment 74191 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74191&amp;action=review
&gt;  
&gt; &gt; WebCore/bindings/scripts/test/TestObj.idl:38
&gt; &gt; +        attribute short                    shortAttr;
&gt; 
&gt; I think you should test both short and unsigned short, in particular including boundary conditions.

I am fixing this and will upload a new patch soo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311109</commentid>
    <comment_count>4</comment_count>
      <attachid>74296</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-11-18 15:06:38 -0800</bug_when>
    <thetext>Created attachment 74296
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311143</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-18 15:58:16 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; All the changes in *.cpp and *.h are auto-generated by run-binding-tests. The last person who made changes to code generation scripts did not run the script to regenerate the binding test results. So this is the reason that you see quite a few changes in *.cpp and *.h that are unrelated to adding &quot;short&quot; support. Those style errors were introduced by some other people&apos;s changes to code generation scripts, for which I rather not to fix.

I see. Looking at CodeGeneratorJS.pm, it would be trivial to at least insert the missing line break after UNUSED_PARAM(exec) (line 2080). If that clears up the style errors I think it is absolutely worth doing. Would you please consider doing this in this patch?

&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 74191 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74191&amp;action=review
&gt; &gt;  
&gt; &gt; &gt; WebCore/bindings/scripts/test/TestObj.idl:38
&gt; &gt; &gt; +        attribute short                    shortAttr;
&gt; &gt; 
&gt; &gt; I think you should test both short and unsigned short, in particular including boundary conditions.
&gt; 
&gt; I am fixing this and will upload a new patch soo.

OK. I don&apos;t see exactly where (for example) it&apos;s tested that setting the unsigned short attribute to 65535 and fetching it results in 65535. Are tests like that handled by the harness?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311157</commentid>
    <comment_count>6</comment_count>
      <attachid>74315</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-11-18 16:21:01 -0800</bug_when>
    <thetext>Created attachment 74315
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311160</commentid>
    <comment_count>7</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-11-18 16:22:31 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; All the changes in *.cpp and *.h are auto-generated by run-binding-tests. The last person who made changes to code generation scripts did not run the script to regenerate the binding test results. So this is the reason that you see quite a few changes in *.cpp and *.h that are unrelated to adding &quot;short&quot; support. Those style errors were introduced by some other people&apos;s changes to code generation scripts, for which I rather not to fix.
&gt; 
&gt; I see. Looking at CodeGeneratorJS.pm, it would be trivial to at least insert the missing line break after UNUSED_PARAM(exec) (line 2080). If that clears up the style errors I think it is absolutely worth doing. Would you please consider doing this in this patch?

Done.

&gt; 
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (From update of attachment 74191 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74191&amp;action=review
&gt; &gt; &gt;  
&gt; &gt; &gt; &gt; WebCore/bindings/scripts/test/TestObj.idl:38
&gt; &gt; &gt; &gt; +        attribute short                    shortAttr;
&gt; &gt; &gt; 
&gt; &gt; &gt; I think you should test both short and unsigned short, in particular including boundary conditions.
&gt; &gt; 
&gt; &gt; I am fixing this and will upload a new patch soo.
&gt; 
&gt; OK. I don&apos;t see exactly where (for example) it&apos;s tested that setting the unsigned short attribute to 65535 and fetching it results in 65535. Are tests like that handled by the harness?

Unfortunately, I think the current binding test is only for visual verification purpose. The generated files are not compiled and ran.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311174</commentid>
    <comment_count>8</comment_count>
      <attachid>74315</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-18 16:46:47 -0800</bug_when>
    <thetext>Comment on attachment 74315
Proposed Patch

(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; All the changes in *.cpp and *.h are auto-generated by run-binding-tests. The last person who made changes to code generation scripts did not run the script to regenerate the binding test results. So this is the reason that you see quite a few changes in *.cpp and *.h that are unrelated to adding &quot;short&quot; support. Those style errors were introduced by some other people&apos;s changes to code generation scripts, for which I rather not to fix.
&gt; &gt; 
&gt; &gt; I see. Looking at CodeGeneratorJS.pm, it would be trivial to at least insert the missing line break after UNUSED_PARAM(exec) (line 2080). If that clears up the style errors I think it is absolutely worth doing. Would you please consider doing this in this patch?
&gt; 
&gt; Done.

Thanks. Unfortunately it doesn&apos;t look like that cleared up everything but it&apos;s still an improvement.

&gt; &gt; 
&gt; &gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; &gt; (From update of attachment 74191 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74191&amp;action=review
&gt; &gt; &gt; &gt;  
&gt; &gt; &gt; &gt; &gt; WebCore/bindings/scripts/test/TestObj.idl:38
&gt; &gt; &gt; &gt; &gt; +        attribute short                    shortAttr;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I think you should test both short and unsigned short, in particular including boundary conditions.
&gt; &gt; &gt; 
&gt; &gt; &gt; I am fixing this and will upload a new patch soo.
&gt; &gt; 
&gt; &gt; OK. I don&apos;t see exactly where (for example) it&apos;s tested that setting the unsigned short attribute to 65535 and fetching it results in 65535. Are tests like that handled by the harness?
&gt; 
&gt; Unfortunately, I think the current binding test is only for visual verification purpose. The generated files are not compiled and ran.

Ah. Well, I suppose it will be tested with the DataView implementation shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311222</commentid>
    <comment_count>9</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-11-18 18:16:22 -0800</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/72358.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74191</attachid>
            <date>2010-11-17 18:49:14 -0800</date>
            <delta_ts>2010-11-18 15:06:38 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>49704</filename>
            <type>text/plain</type>
            <size>65266</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDNmY2IwNi4uMzAzMjRmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMS0xNyAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTWFrZSBiaW5kaW5nIGNvZGUgZ2VuZXJhdGlvbiBzY3JpcHRzIHN1cHBvcnQg
J3Nob3J0JyB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00OTcwNAorCisgICAgICAgIFVwZGF0ZWQgYmluZGluZyB0ZXN0cy4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisKIDIwMTAtMTEtMTcgIERpbWl0cmkgR2xh
emtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmlu
ZGV4IGVhMzI2MTUuLmQ1NDJhNWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQpAQCAtMjM3Niw2ICsyMzc2LDcgQEAgbXkgJW5hdGl2ZVR5cGUgPSAoCiAg
ICAgImJvb2xlYW4iID0+ICJib29sIiwKICAgICAiZG91YmxlIiA9PiAiZG91YmxlIiwKICAgICAi
ZmxvYXQiID0+ICJmbG9hdCIsCisgICAgInNob3J0IiA9PiAic2hvcnQiLAogICAgICJsb25nIiA9
PiAiaW50IiwKICAgICAidW5zaWduZWQgbG9uZyIgPT4gInVuc2lnbmVkIiwKICAgICAidW5zaWdu
ZWQgc2hvcnQiID0+ICJ1bnNpZ25lZCBzaG9ydCIsCkBAIC0yNDQ2LDcgKzI0NDcsNyBAQCBzdWIg
SlNWYWx1ZVRvTmF0aXZlCiAgICAgcmV0dXJuICIkdmFsdWUudG9Cb29sZWFuKGV4ZWMpIiBpZiAk
dHlwZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIkdmFsdWUudG9OdW1iZXIoZXhlYykiIGlm
ICR0eXBlIGVxICJkb3VibGUiOwogICAgIHJldHVybiAiJHZhbHVlLnRvRmxvYXQoZXhlYykiIGlm
ICR0eXBlIGVxICJmbG9hdCI7Ci0gICAgcmV0dXJuICIkdmFsdWUudG9JbnQzMihleGVjKSIgaWYg
JHR5cGUgZXEgImxvbmciOworICAgIHJldHVybiAiJHZhbHVlLnRvSW50MzIoZXhlYykiIGlmICR0
eXBlIGVxICJsb25nIiBvciAkdHlwZSBlcSAic2hvcnQiOwogICAgIHJldHVybiAiJHZhbHVlLnRv
VUludDMyKGV4ZWMpIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgJHR5cGUgZXEgInVu
c2lnbmVkIHNob3J0IjsKICAgICByZXR1cm4gInN0YXRpY19jYXN0PCR0eXBlPigkdmFsdWUudG9J
bnRlZ2VyKGV4ZWMpKSIgaWYgJHR5cGUgZXEgImxvbmcgbG9uZyIgb3IgJHR5cGUgZXEgInVuc2ln
bmVkIGxvbmcgbG9uZyI7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCmluZGV4IDI2YzFkYzcuLjllYzY3NzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjg5OSw3ICsyODk5LDcgQEAgc3ViIEpTVmFsdWVU
b05hdGl2ZQogICAgIHJldHVybiAiJHZhbHVlLT5Cb29sZWFuVmFsdWUoKSIgaWYgJHR5cGUgZXEg
ImJvb2xlYW4iOwogICAgIHJldHVybiAic3RhdGljX2Nhc3Q8JHR5cGU+KCR2YWx1ZS0+TnVtYmVy
VmFsdWUoKSkiIGlmICR0eXBlIGVxICJmbG9hdCIgb3IgJHR5cGUgZXEgImRvdWJsZSI7CiAKLSAg
ICByZXR1cm4gInRvSW50MzIoJHZhbHVlKSIgaWYgJHR5cGUgZXEgImxvbmciOworICAgIHJldHVy
biAidG9JbnQzMigkdmFsdWUpIiBpZiAkdHlwZSBlcSAibG9uZyIgb3IgJHR5cGUgZXEgInNob3J0
IjsKICAgICByZXR1cm4gInRvVUludDMyKCR2YWx1ZSkiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBs
b25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiOwogICAgIHJldHVybiAidG9JbnQ2NCgk
dmFsdWUpIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyBsb25nIiBvciAkdHlwZSBlcSAibG9u
ZyBsb25nIjsKICAgICByZXR1cm4gInN0YXRpY19jYXN0PFJhbmdlOjpDb21wYXJlSG93PigkdmFs
dWUtPkludDMyVmFsdWUoKSkiIGlmICR0eXBlIGVxICJDb21wYXJlSG93IjsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAppbmRleCA1
NzkyOTVmLi5lYWE5MWM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCkBAIC0xMDMsNiArMTAzLDIyIEBAIFdlYkRPTVRlc3RP
YmogV2ViRE9NVGVzdE9iajo6cmVhZE9ubHlUZXN0T2JqQXR0cigpIGNvbnN0CiAgICAgcmV0dXJu
IHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKSk7CiB9
CiAKK3Nob3J0IFdlYkRPTVRlc3RPYmo6OnNob3J0QXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFp
bXBsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGltcGwoKS0+c2hvcnRBdHRy
KCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0U2hvcnRBdHRyKHNob3J0IG5ld1Nob3J0
QXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgp
LT5zZXRTaG9ydEF0dHIobmV3U2hvcnRBdHRyKTsKK30KKwogaW50IFdlYkRPTVRlc3RPYmo6Omlu
dEF0dHIoKSBjb25zdAogewogICAgIGlmICghaW1wbCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKaW5kZXggY2Q2Y2FhYS4uYmI3OWRm
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVz
dE9iai5oCkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKICAgICBpbnQgcmVhZE9ubHlJbnRBdHRy
KCkgY29uc3Q7CiAgICAgV2ViRE9NU3RyaW5nIHJlYWRPbmx5U3RyaW5nQXR0cigpIGNvbnN0Owog
ICAgIFdlYkRPTVRlc3RPYmogcmVhZE9ubHlUZXN0T2JqQXR0cigpIGNvbnN0OworICAgIHNob3J0
IHNob3J0QXR0cigpIGNvbnN0OworICAgIHZvaWQgc2V0U2hvcnRBdHRyKHNob3J0KTsKICAgICBp
bnQgaW50QXR0cigpIGNvbnN0OwogICAgIHZvaWQgc2V0SW50QXR0cihpbnQpOwogICAgIGxvbmcg
bG9uZyBsb25nTG9uZ0F0dHIoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcApp
bmRleCBmYmU1MzhkLi4xOWZmMTY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCkBA
IC01OCw4ICs1OCw4IEBAIGdwb2ludGVyIGtpdChXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIG9iaikK
IGdib29sZWFuCiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9jbGFzczFw
YXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIFdlYktpdERPTUNsYXNzMSogY2xhc3Mx
cGFyYW0pCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNsYXNzMXBhcmFtLCAw
KTsKICAgICBXZWJDb3JlOjpDbGFzczEgKiBjb252ZXJ0ZWRfY2xhc3MxcGFyYW0gPSBOVUxMOwpA
QCAtNzQsOCArNzQsOCBAQCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9j
bGFzczFwYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsCiBnYm9vbGVhbgogd2Via2l0
X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfY2xhc3MycGFyYW0oV2ViS2l0RE9NVGVz
dENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01DbGFzczIqIGNsYXNzMnBhcmFtLCBjb25zdCBnY2hh
ciogc3RyX2FyZykKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY2xhc3MycGFy
YW0sIDApOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDApOwpAQCAtOTIsOCAr
OTIsOCBAQCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9jbGFzczJwYXJh
bShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsCiBnbG9uZwogd2Via2l0X2RvbV90ZXN0X2Nh
bGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0RE9NVGVzdENh
bGxiYWNrKiBzZWxmLCBXZWJLaXRET01DbGFzczMqIGNsYXNzM3BhcmFtKQogewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAg
ICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjbGFzczNwYXJhbSwgMCk7CiAgICAgV2ViQ29yZTo6Q2xh
c3MzICogY29udmVydGVkX2NsYXNzM3BhcmFtID0gTlVMTDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggYWY5MzAwZC4uNzk1NmUz
MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5jcHAKQEAgLTUyLDggKzUyLDggQEAgZ3BvaW50ZXIga2l0KFdlYkNvcmU6OlRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyKiBvYmopCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlf
bGlzdF9saXN0ZW5lcl9tZXRob2QoV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIq
IHNlbGYsIFdlYktpdERPTU1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGxpc3RlbmVyKQogewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAg
ICBXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CiAgICAgZ19yZXR1cm5faWZfZmFpbChsaXN0ZW5lcik7CiAgICAgV2ViQ29yZTo6
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciAqIGNvbnZlcnRlZF9saXN0ZW5lciA9IE5VTEw7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0T2JqLmNwcAppbmRleCBjOWMxMGQ3Li5lMDYzMDhiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5j
cHAKQEAgLTU1LDggKzU1LDggQEAgZ3BvaW50ZXIga2l0KFdlYkNvcmU6OlRlc3RPYmoqIG9iaikK
IHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CiAgICAgaXRlbS0+dm9pZE1ldGhvZCgpOwogfQpAQCAtNjQsOCArNjQsOCBAQCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVz
dE9iaiogb2JqX2FyZykKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzdHJfYXJnKTsKICAgICBnX3JldHVy
bl9pZl9mYWlsKG9ial9hcmcpOwpAQCAtODEsOCArODEsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3ZvaWRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRf
YXJnLAogZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfaW50X21ldGhvZChXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+aW50TWV0aG9kKCk7CiAgICAg
cmV0dXJuIHJlczsKQEAgLTkxLDggKzkxLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9pbnRfbWV0
aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiBnbG9uZwogd2Via2l0X2RvbV90ZXN0X29ial9p
bnRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJn
LCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZykKIHsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDApOwogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKG9ial9hcmcsIDApOwpAQCAtMTA5LDggKzEwOSw4IEBAIHdlYmtpdF9kb21fdGVzdF9v
YmpfaW50X21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50
X2FyZywKIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Qo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVz
dE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5vYmpNZXRob2QoKSk7CiAgICAgV2ViS2l0
RE9NVGVzdE9iaiogcmVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE9iaio+KFdlYktpdDo6
a2l0KGdfcmVzLmdldCgpKSk7CkBAIC0xMjAsOCArMTIwLDggQEAgd2Via2l0X2RvbV90ZXN0X29i
al9vYmpfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiBXZWJLaXRET01UZXN0T2JqKgog
d2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVz
dE9iaiogb2JqX2FyZykKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDAp
OwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9ial9hcmcsIDApOwpAQCAtMTM5LDggKzEzOSw4
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfb2JqX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywKIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnKQog
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7CiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwob2JqX2FyZywgMCk7CkBAIC0xNTgsOCArMTU4LDggQEAgd2Via2l0X2RvbV90
ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1aXJlc19hbGxfYXJncyhXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBjb25zdAogV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyhXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZywgR0Vycm9y
ICoqZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKICAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKQEAgLTE4Myw4ICsxODMsOCBAQCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJv
d3MoV2ViS2l0RE9NVGVzdE9iaiogcwogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxp
emVkX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSogc2VyaWFsaXplZF9hcmcpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VyaWFsaXplZF9h
cmcpOwogICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9zZXJp
YWxpemVkX2FyZyA9IE5VTEw7CkBAIC0xOTgsOCArMTk4LDggQEAgd2Via2l0X2RvbV90ZXN0X29i
al9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlh
bGl6ZWQKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01JREJLZXkqIGtleSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5faWZfZmFpbChrZXkpOwog
ICAgIFdlYkNvcmU6OklEQktleSAqIGNvbnZlcnRlZF9rZXkgPSBOVUxMOwpAQCAtMjEzLDggKzIx
Myw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBXZWJLaXRET01JREJLZXkqIGtleSkKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQog
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpdGVtLT5tZXRob2RXaXRoRXhj
ZXB0aW9uKGVjKTsKQEAgLTIzNCw4ICsyMzQsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcgog
dm9pZAogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2R5bmFtaWNfZnJhbWUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CiAgICAgaXRlbS0+d2l0aER5bmFtaWNGcmFtZSgpOwogfQpAQCAtMjQzLDggKzI0
Myw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9keW5hbWljX2ZyYW1lKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZHluYW1pY19mcmFt
ZV9hbmRfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcpCiB7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0t
PndpdGhEeW5hbWljRnJhbWVBbmRBcmcoaW50X2FyZyk7CiB9CkBAIC0yNTIsOCArMjUyLDggQEAg
d2Via2l0X2RvbV90ZXN0X29ial93aXRoX2R5bmFtaWNfZnJhbWVfYW5kX2FyZyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnQKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9k
eW5hbWljX2ZyYW1lX2FuZF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgaW50X2FyZywgZ2xvbmcgb3B0aW9uYWxfYXJnKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT53aXRoRHluYW1pY0ZyYW1l
QW5kT3B0aW9uYWxBcmcoaW50X2FyZywgb3B0aW9uYWxfYXJnKTsKIH0KQEAgLTI2MSw4ICsyNjEs
OCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZHluYW1pY19mcmFtZV9hbmRfb3B0aW9uYWxf
YXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dp
dGhfZHluYW1pY19mcmFtZV9hbmRfdXNlcl9nZXN0dXJlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIGludF9hcmcsIGdib29sZWFuIGlzVXNlckdlc3R1cmUpCiB7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPndpdGhEeW5h
bWljRnJhbWVBbmRVc2VyR2VzdHVyZShpbnRfYXJnLCBmYWxzZSk7CiB9CkBAIC0yNzAsOCArMjcw
LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2R5bmFtaWNfZnJhbWVfYW5kX3VzZXJfZ2Vz
dHVyZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLAogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial93
aXRoX2R5bmFtaWNfZnJhbWVfYW5kX3VzZXJfZ2VzdHVyZV9hc2FkKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGdsb25nIGludF9hcmcsIGdsb25nIG9wdGlvbmFsX2FyZywgZ2Jvb2xlYW4gaXNVc2Vy
R2VzdHVyZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CiAgICAgaXRlbS0+d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRChpbnRf
YXJnLCBvcHRpb25hbF9hcmcsIGZhbHNlKTsKIH0KQEAgLTI3OSw4ICsyNzksOCBAQCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3dpdGhfZHluYW1pY19mcmFtZV9hbmRfdXNlcl9nZXN0dXJlX2FzYWQoV2Vi
S2l0RE9NVGVzdE9iaiogcwogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9z
dGF0ZV92b2lkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPndpdGhTY3JpcHRTdGF0
ZVZvaWQoKTsKIH0KQEAgLTI4OCw4ICsyODgsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhf
c2NyaXB0X3N0YXRlX3ZvaWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIFdlYktpdERPTVRlc3RP
YmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29iaihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3Jl
cyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZU9iaigpKTsKICAgICBXZWJLaXRE
T01UZXN0T2JqKiByZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0T2JqKj4oV2ViS2l0Ojpr
aXQoZ19yZXMuZ2V0KCkpKTsKQEAgLTI5OSw4ICsyOTksOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3dpdGhfc2NyaXB0X3N0YXRlX29iaihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Vi
a2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkX2V4Y2VwdGlvbihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgaXRlbS0+d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihlYyk7CkBA
IC0zMTQsOCArMzE0LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92
b2lkX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXIKIFdlYktpdERPTVRlc3RP
YmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29ial9leGNlcHRpb24o
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+
IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVj
KSk7CkBAIC0zMzEsOCArMzMxLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9z
dGF0ZV9vYmpfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnIKIHZvaWQKIHdl
YmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHQoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIH0K
QEAgLTM0MCw4ICszNDAsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1
dGlvbl9jb250ZXh0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBn
bG9uZyBvcHQpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwogICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOwogfQpAQCAtMzQ5
LDggKzM0OSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJn
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG9wdCkKIHZvaWQKIHdlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2FyZ19hbmRfb3B0aW9uYWxfYXJnKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbl9vcHQsIGdsb25nIG9wdCkKIHsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+bWV0
aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uX29wdCwgb3B0KTsKIH0KQEAg
LTM1OCw4ICszNTgsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRp
b25hbF9hcmdfYW5kX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0Twogdm9pZAogd2Via2l0X2Rv
bV90ZXN0X29ial9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF90d29fb3B0aW9uYWxf
YXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBub25fb3B0LCBnbG9uZyBvcHQxLCBn
bG9uZyBvcHQyKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKICAgICBpdGVtLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25h
bEFyZ3Mobm9uX29wdCwgb3B0MSwgb3B0Mik7CiB9CkBAIC0zNjcsOCArMzY3LDggQEAgd2Via2l0
X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF90d29fb3B0aW9u
YWxfYXJncyhXZWJLaXRET00KIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9k
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPmNsYXNzTWV0aG9kKCk7CiB9CkBAIC0z
NzYsOCArMzc2LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19tZXRob2QoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93
aXRoX29wdGlvbmFsKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGFyZykKIHsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAg
IGdsb25nIHJlcyA9IGl0ZW0tPmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGFyZyk7CiAgICAgcmV0
dXJuIHJlczsKQEAgLTM4Niw4ICszODYsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21l
dGhvZF93aXRoX29wdGlvbmFsKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGFyZwogZ2xv
bmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9pbnRfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+cmVhZE9ubHlJbnRBdHRy
KCk7CiAgICAgcmV0dXJuIHJlczsKQEAgLTM5Niw4ICszOTYsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWFkX29ubHlfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIGdjaGFy
Kgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3N0cmluZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5yZWFkT25seVN0cmluZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlczsKQEAgLTQwNiwx
OSArNDA2LDM4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3JlYWRfb25seV90ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpn
ZXRQdHIoaXRlbS0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKTsKICAgICBXZWJLaXRET01UZXN0T2Jq
KiByZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0T2JqKj4oV2ViS2l0OjpraXQoZ19yZXMu
Z2V0KCkpKTsKICAgICByZXR1cm4gcmVzOwogfQogCitnc2hvcnQKK3dlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ3Nob3J0IHJlcyA9IGl0ZW0tPnNob3J0QXR0cigpOworICAgIHJldHVybiByZXM7
Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFNo
b3J0QXR0cih2YWx1ZSk7Cit9CisKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pbnRf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+
aW50QXR0cigpOwogICAgIHJldHVybiByZXM7CkBAIC00MjcsOCArNDQ2LDggQEAgd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2ludF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGds
b25nIHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKICAgICBpdGVtLT5zZXRJbnRBdHRyKHZhbHVlKTsKIH0KQEAgLTQzNiw4ICs0NTUs
OCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pbnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyB2YWx1ZSkKIGdpbnQ2NAogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19s
b25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdpbnQ2NCByZXMgPSBp
dGVtLT5sb25nTG9uZ0F0dHIoKTsKICAgICByZXR1cm4gcmVzOwpAQCAtNDQ2LDggKzQ2NSw4IEBA
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9sb25nX2xvbmdfYXR0cihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnaW50NjQgdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPnNldExvbmdMb25nQXR0
cih2YWx1ZSk7CiB9CkBAIC00NTUsOCArNDc0LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
bG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2ludDY0IHZhbHVlKQogZ3Vp
bnQ2NAogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGd1aW50NjQgcmVzID0gaXRlbS0+dW5zaWdu
ZWRMb25nTG9uZ0F0dHIoKTsKICAgICByZXR1cm4gcmVzOwpAQCAtNDY1LDggKzQ4NCw4IEBAIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF91bnNpZ25lZF9sb25n
X2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWludDY0IHZhbHVlKQogewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVt
LT5zZXRVbnNpZ25lZExvbmdMb25nQXR0cih2YWx1ZSk7CiB9CkBAIC00NzQsOCArNDkzLDggQEAg
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ3VpbnQ2NAogZ2NoYXIqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9z
dHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2NoYXIqIHJlcyA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5nQXR0cigpKTsKICAgICByZXR1cm4gcmVz
OwpAQCAtNDg0LDggKzUwMyw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9z
dHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCiB7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CkBAIC00OTUsOCArNTE0LDggQEAgd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQogV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT50ZXN0
T2JqQXR0cigpKTsKICAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBzdGF0aWNfY2FzdDxXZWJL
aXRET01UZXN0T2JqKj4oV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpKTsKQEAgLTUwNiw4ICs1MjUs
OCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF90ZXN0X29ial9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlKQogewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVl
ID0gTlVMTDsKQEAgLTUyMSw4ICs1NDAsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF90ZXN0
X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqCiBXZWJL
aXRET01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+
IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+eG1sT2JqQXR0cigpKTsKICAgICBXZWJLaXRET01U
ZXN0T2JqKiByZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0T2JqKj4oV2ViS2l0OjpraXQo
Z19yZXMuZ2V0KCkpKTsKQEAgLTUzMiw4ICs1NTEsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRE
T01UZXN0T2JqKiB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CiAgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CkBAIC01NDcsOCArNTY2LDggQEAg
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfeG1sX29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTVRlc3RPYmoqIHYKIGdib29sZWFuCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdib29sZWFuIHJlcyA9
IGl0ZW0tPmlzQ3JlYXRlKCk7CiAgICAgcmV0dXJuIHJlczsKQEAgLTU1Nyw4ICs1NzYsOCBAQCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZv
aWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+c2V0Q3JlYXRlKHZhbHVlKTsKIH0KQEAgLTU2Niw4
ICs1ODUsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCiBnY2hhcioKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAg
Z2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0QXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVz
OwpAQCAtNTc2LDggKzU5NSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9z
dHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CiAgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKQEAg
LTU4Nyw4ICs2MDYsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5n
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYQogZ2xvbmcKIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKICAgICBnbG9uZyByZXMgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpOwogICAgIHJldHVy
biByZXM7CkBAIC01OTcsOCArNjE2LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVj
dGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGdsb25nIHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIHZhbHVlKTsKIH0KQEAgLTYw
Niw4ICs2MjUsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfaW50ZWdyYWxf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YQogZ2Jvb2xlYW4KIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwogICAgIGdib29sZWFuIHJlcyA9IGl0ZW0tPmhhc0F0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0cik7CiAgICAgcmV0dXJuIHJlczsK
QEAgLTYxNiw4ICs2MzUsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfYm9v
bGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdi
b29sZWFuIHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKICAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyLCB2YWx1ZSk7CiB9CkBAIC02MjUsOCArNjQ0
LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2Jvb2xlYW5fYXR0cihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbgogZ2NoYXIqCiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9yZWZsZWN0ZWRfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAg
IGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJl
czsKQEAgLTYzNSw4ICs2NTQsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
dXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3JlZmxlY3RlZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwogICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CkBAIC02NDYs
OCArNjY1LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3VybF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKgogZ2NoYXIqCiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWZsZWN0ZWRfbm9uX2VtcHR5X3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKICAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5n
ZXROb25FbXB0eVVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZG5vbmVt
cHR5dXJsYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzOwpAQCAtNjU2LDggKzY3NSw4IEBAIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9ub25fZW1wdHlfdXJsX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF9ub25fZW1wdHlfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKICAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKICAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwpAQCAtNjY3LDggKzY4
Niw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9ub25fZW1wdHlfdXJsX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uCiBnY2hhcioKIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CiAgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0QXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7CiAgICAg
cmV0dXJuIHJlczsKQEAgLTY3Nyw4ICs2OTYsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9y
ZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwog
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CkBAIC02ODgsOCArNzA3LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVj
dGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGEKIGdsb25n
CiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdsb25nIHJlcyA9IGl0ZW0tPmdldElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFs
QXR0ckF0dHIpOwogICAgIHJldHVybiByZXM7CkBAIC02OTgsOCArNzE3LDggQEAgd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3Vz
dG9tX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCiB7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAg
IGl0ZW0tPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudEludGVncmFsQXR0ckF0dHIsIHZhbHVlKTsKIH0KQEAgLTcwNyw4ICs3MjYsOCBAQCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgZwogZ2Jvb2xlYW4KIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Jl
ZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
ICAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKTsKICAgICByZXR1cm4gcmVzOwpAQCAtNzE3
LDggKzczNiw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9v
bGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnYm9vbGVhbiB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIsIHZhbHVlKTsKIH0KQEAg
LTcyNiw4ICs3NDUsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9t
X2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYgogZ2NoYXIqCiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKICAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0
ckF0dHIpKTsKICAgICByZXR1cm4gcmVzOwpAQCAtNzM2LDggKzc1NSw4IEBAIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJs
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQogewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwpAQCAtNzQ3LDggKzc2Niw4IEBAIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgY29uc3QKIGdjaGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVk
X2N1c3RvbV9ub25fZW1wdHlfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwog
ICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5vbkVtcHR5VVJM
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudE5vbkVtcHR5VVJMQXR0
ckF0dHIpKTsKICAgICByZXR1cm4gcmVzOwpAQCAtNzU3LDggKzc3Niw4IEBAIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fbm9uX2VtcHR5X3VybF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3Vz
dG9tX25vbl9lbXB0eV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwogICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CkBAIC03NjgsOCAr
Nzg3LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9ub25fZW1w
dHlfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2UKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBHRXJyb3IgKiplcnJvcikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIGdsb25nIHJlcyA9IGl0ZW0tPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKQEAg
LTc4NCw4ICs4MDMsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVy
X2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJybwogdm9pZAogd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvciAqKmVycm9yKQogewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBpdGVtLT5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbih2YWx1
ZSwgZWMpOwpAQCAtNzk5LDggKzgxOCw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJf
d2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nCiBnbG9u
Zwogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdsb25nIHJlcyA9IGl0ZW0tPmF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlczsKQEAgLTgwOSw4ICs4MjgsOCBAQCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRo
X3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUsIEdF
cnJvciAqKmVycm9yKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpdGVt
LT5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbih2YWx1ZSwgZWMpOwpAQCAtODI0LDggKzg0Myw4
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nCiBnY2hhcioKIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3N0cmluZ19hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBHRXJyb3IgKiplcnJvcikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnN0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CkBAIC04MzUsOCArODU0LDggQEAgd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRy
X3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUsIEdFcnJvciAqKmVycm9yKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKICAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOwpAQCAtODUyLDggKzg3MSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19h
dHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmCiBnY2hhcioK
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlv
bihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CiAgICAg
cmV0dXJuIHJlczsKQEAgLTg2Miw4ICs4ODEsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9z
dHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZgog
dm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhj
ZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9y
ICoqZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwogICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CkBAIC04NzksODcg
Kzg5OCw5MyBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX3NldHRl
cl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZgogZ2NoYXIqCiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9zY3JpcHRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwogICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnNjcmlwdFN0cmlu
Z0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlczsKIH0KIAotI2lmIEVOQUJMRShDb25kaXRpb24xKQog
Z2xvbmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIxKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworI2lmIEVOQUJMRShDb25kaXRpb24xKQogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnbG9uZyBy
ZXMgPSBpdGVtLT5jb25kaXRpb25hbEF0dHIxKCk7CiAgICAgcmV0dXJuIHJlczsKLX0KKyNlbHNl
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKICNlbmRpZiAvKiBFTkFCTEUoQ29u
ZGl0aW9uMSkgKi8KK30KIAotI2lmIEVOQUJMRShDb25kaXRpb24xKQogdm9pZAogd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworI2lmIEVOQUJMRShDb25kaXRpb24xKQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPnNldENvbmRpdGlv
bmFsQXR0cjEodmFsdWUpOwotfQogI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLworfQog
Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQogZ2xvbmcKIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworI2lm
IEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKICAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRyMigpOwogICAgIHJldHVybiBy
ZXM7Ci19CisjZWxzZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7CiAjZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLworfQogCi0jaWYg
RU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQogdm9pZAogd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKICAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
ICAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIyKHZhbHVlKTsKLX0KICNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CiAKLSNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiBnbG9uZwogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisjaWYgRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnbG9uZyBy
ZXMgPSBpdGVtLT5jb25kaXRpb25hbEF0dHIzKCk7CiAgICAgcmV0dXJuIHJlczsKLX0KKyNlbHNl
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKICNlbmRpZiAvKiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CiAKLSNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9jb25kaXRpb25hbF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkK
IHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisjaWYgRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPnNl
dENvbmRpdGlvbmFsQXR0cjModmFsdWUpOwotfQogI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KIAogZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2Rlc2NyaXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnbG9u
ZyByZXMgPSBpdGVtLT5kZXNjcmlwdGlvbigpOwogICAgIHJldHVybiByZXM7CkBAIC05NjgsOCAr
OTkzLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pZChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+aWQoKTsKICAgICByZXR1
cm4gcmVzOwpAQCAtOTc4LDggKzEwMDMsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pZChX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfaWQo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPnNldElkKHZhbHVl
KTsKIH0KQEAgLTk4Nyw4ICsxMDEyLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfaWQoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCiBnY2hhcioKIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2hhc2goV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2Vs
ZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdjaGFyKiBy
ZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmhhc2goKSk7CiAgICAgcmV0dXJuIHJlczsK
QEAgLTEwMTUsNiArMTA0MCw3IEBAIGVudW0gewogICAgIFBST1BfUkVBRF9PTkxZX0lOVF9BVFRS
LAogICAgIFBST1BfUkVBRF9PTkxZX1NUUklOR19BVFRSLAogICAgIFBST1BfUkVBRF9PTkxZX1RF
U1RfT0JKX0FUVFIsCisgICAgUFJPUF9TSE9SVF9BVFRSLAogICAgIFBST1BfSU5UX0FUVFIsCiAg
ICAgUFJPUF9MT05HX0xPTkdfQVRUUiwKICAgICBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRS
LApAQCAtMTIyNCw2ICsxMjUwLDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhCiAgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFBST1BfU0hPUlRfQVRUUjoKKyAgICB7CisgICAg
ICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgY29yZVNlbGYtPnNob3J0QXR0cigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgUFJPUF9JTlRfQVRUUjoKICAgICB7CiAgICAgICAg
IGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5pbnRBdHRyKCkpOwpAQCAtMTQyMCw2
ICsxNDUxLDE1IEBAIEdfTUFYTE9ORywgLyogbWF4ICovCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPTV9URVNU
X09CSiwgLyogZ29iamVjdCB0eXBlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwogICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TSE9SVF9BVFRSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2ludCgic2hvcnQtYXR0ciIsIC8q
IG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRlc3Rfb2JqX3Nob3J0LWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicmVhZC13cml0ZSAgZ3Nob3J0IFRlc3RPYmouc2hvcnQtYXR0ciIsIC8qIGxvbmdlciAt
IGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTklOVCwg
LyogbWluICovCitHX01BWElOVCwgLyogbWF4ICovCiswLCAvKiBkZWZhdWx0ICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KGdvYmplY3RDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1Bf
SU5UX0FUVFIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfbG9uZygiaW50LWF0dHIiLCAvKiBuYW1lICovCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9pbnQtYXR0ciIsIC8q
IHNob3J0IGRlc2NyaXB0aW9uICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IDhlZThmMDQuLmJjMjNm
MGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE9iai5oCkBAIC0xMzksNiArMTM5LDEyIEBAIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsK
IFdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Jl
YWRfb25seV90ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwogCitXRUJLSVRf
QVBJIGdzaG9ydAord2Via2l0X2RvbV90ZXN0X29ial9nZXRfc2hvcnRfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdzaG9ydCB2YWx1ZSk7CisKIFdF
QktJVF9BUEkgZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ludF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpOwogCkBAIC0yNjgsMzUgKzI3NCwyMyBAQCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9i
aiogc2VsZgogV0VCS0lUX0FQSSBnY2hhcioKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Njcmlw
dF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKIAotI2lmIEVOQUJMRShDb25k
aXRpb24xKQogV0VCS0lUX0FQSSBnbG9uZwogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0
aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0jZW5kaWYgLyogRU5BQkxFKENv
bmRpdGlvbjEpICovCiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKIFdFQktJVF9BUEkgdm9pZAog
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ2xvbmcgdmFsdWUpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwog
Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQogV0VCS0lUX0FQ
SSBnbG9uZwogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZik7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJM
RShDb25kaXRpb24yKSAqLwogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25k
aXRpb24yKQogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRp
b25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0jZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwogCi0jaWYgRU5B
QkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogV0VCS0lUX0FQSSBnbG9uZwog
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZik7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKSAqLwogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQog
V0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRy
MyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwogCiBXRUJLSVRfQVBJIGdsb25n
CiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9kZXNjcmlwdGlvbihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
CmluZGV4IDdlMDYwNjguLmNlMmFmZTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtNTQsMTEgKzU0LDEyIEBAIEFTU0VSVF9DTEFTU19G
SVRTX0lOX0NFTEwoSlNUZXN0T2JqKTsKICNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRv
cikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqVGFibGVW
YWx1ZXNbMzRdID0KK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpUYWJsZVZh
bHVlc1szNV0gPQogewogICAgIHsgInJlYWRPbmx5SW50QXR0ciIsIERvbnREZWxldGUgfCBSZWFk
T25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RPYmpSZWFkT25seUludEF0dHIpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkg
fSwKICAgICB7ICJyZWFkT25seVN0cmluZ0F0dHIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2Jq
UmVhZE9ubHlTdHJpbmdBdHRyKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAg
ICAgeyAicmVhZE9ubHlUZXN0T2JqQXR0ciIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpSZWFk
T25seVRlc3RPYmpBdHRyKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAg
eyAic2hvcnRBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpTaG9ydEF0dHIpLCAoaW50cHRyX3Qpc2V0SlNU
ZXN0T2JqU2hvcnRBdHRyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImludEF0dHIiLCBE
b250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdE9iakludEF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqSW50QXR0ciBUSFVO
S19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJsb25nTG9uZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakxv
bmdMb25nQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIgVEhVTktfR0VO
RVJBVE9SKDApIH0sCiAgICAgeyAidW5zaWduZWRMb25nTG9uZ0F0dHIiLCBEb250RGVsZXRlLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9i
alVuc2lnbmVkTG9uZ0xvbmdBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialVuc2lnbmVkTG9u
Z0xvbmdBdHRyIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAtMjgyLDcgKzI4Myw3IEBAIEpTVmFs
dWUganNUZXN0T2JqUmVhZE9ubHlJbnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90
QmFzZSwgY29uc3QgSWRlbnRpCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nh
c3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFSQU0oZXhl
Yyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPnJlYWRP
bmx5SW50QXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+cmVhZE9u
bHlJbnRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMwNCwxMiArMzA1LDIx
IEBAIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorSlNW
YWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNl
LCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+c2hvcnRB
dHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTVmFsdWUganNUZXN0T2JqSW50QXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQog
ewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFz
T2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoq
IGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5pbnRBdHRyKCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5pbnRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTMxOCw3ICszMjgsNyBAQCBKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZQogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNs
b3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0
YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5sb25nTG9uZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXAtPmxvbmdMb25nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC0zMjcsNyArMzM3LDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdM
b25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IEkKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChz
bG90QmFzZSkpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBUZXN0T2JqKiBpbXAgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+dW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTM4MSw3ICszOTEsNyBAQCBKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJh
c2UsIGNvbnN0CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0
T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAg
VGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmdldEludGVncmFsQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cikpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC00MjYsNyArNDM2LDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNl
LAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFz
T2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoq
IGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC00NjIsNyArNDcyLDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNv
bnMKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdChzbG90QmFzZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFRlc3RP
YmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAg
IEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmF0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKGVjKSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+
YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00NzIsNyArNDgyLDcgQEAgSlNWYWx1ZSBq
c1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
c2xvdEJhc2UsIGNvbnMKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
ICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+YXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmF0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUx
Niw3ICs1MjYsNyBAQCBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudAogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoZXhlYywgaW1wLT5jb25kaXRpb25hbEF0dHIxKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoaW1wLT5jb25kaXRpb25hbEF0dHIxKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAjZW5kaWYKQEAgLTUyNyw3ICs1MzcsNyBAQCBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudAogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5jb25kaXRpb25hbEF0dHIyKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5jb25kaXRpb25hbEF0dHIyKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAjZW5kaWYKQEAgLTUzOCw3ICs1NDgsNyBAQCBKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBj
b25zdCBJZGVudAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVz
dE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAg
IFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5jb25kaXRpb25hbEF0
dHIzKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5jb25kaXRpb25hbEF0
dHIzKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYKQEAgLTU0OCw3ICs1NTgsNyBA
QCBKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBz
bG90QmFzZSwgY29uc3QgSWRlbnRpZmllcgogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0
YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1w
LT5kZXNjcmlwdGlvbigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+ZGVz
Y3JpcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTU3LDcgKzU2Nyw3IEBA
IEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBj
b25zdCBJZGVudGlmaWVyJikKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwogICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+aWQoKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmlkKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKQEAgLTU4MCw2ICs1OTAsMTMgQEAgdm9pZCBKU1Rlc3RPYmo6OnB1dChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWwK
ICAgICBsb29rdXBQdXQ8SlNUZXN0T2JqLCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCAmSlNUZXN0T2JqVGFibGUsIHRoaXMsIHNsb3QpOwogfQogCit2b2lkIHNldEpTVGVzdE9ialNo
b3J0QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9i
aio+KHRoaXNPYmplY3QpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGltcC0+c2V0U2hvcnRBdHRyKHZhbHVlLnRvSW50
MzIoZXhlYykpOworfQorCiB2b2lkIHNldEpTVGVzdE9iakludEF0dHIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKQEAgLTgy
MSw3ICs4MzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uSW50TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYwogICAgIFRlc3RPYmoqIGltcCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogCiAKLSAgICBKU0M6
OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5pbnRNZXRob2QoKSk7CisgICAg
SlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+aW50TWV0aG9kKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtODQzLDcgKzg2MCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRN
ZXRob2RXaXRoQXJncyhFeGVjU3RhCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKIAotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVj
LCBpbXAtPmludE1ldGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJnLCBvYmpBcmcpKTsKKyAgICBK
U0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5pbnRNZXRob2RXaXRoQXJncyhpbnRB
cmcsIHN0ckFyZywgb2JqQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogfQogCkBAIC0xNDc2LDcgKzE0OTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoRQogICAg
IGludCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKGFyZ3NDb3Vu
dCA8PSAwKSB7CiAKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMs
IGltcC0+Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoKSk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXAtPmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKCkpOwogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCkBAIC0xNDg1LDcgKzE1
MDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoRQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAKLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIoZXhlYywgaW1wLT5jbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcpKTsKKyAgICBKU0M6
OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5jbGFzc01ldGhvZFdpdGhPcHRpb25hbChh
cmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTE0OTMs
MzIgKzE1MTAsMzIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKEUKIAogSlNWYWx1ZSBqc1Rlc3RP
YmpDT05TVF9WQUxVRV8wKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGludD4oMCkpOwor
ICAgIFVOVVNFRF9QQVJBTShleGVjKTsgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGlu
dD4oMCkpOwogfQogCiBKU1ZhbHVlIGpzVGVzdE9iakNPTlNUX1ZBTFVFXzEoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKIHsKLSAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYywgc3RhdGljX2Nhc3Q8aW50PigxKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOyAgICBy
ZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50PigxKSk7CiB9CiAKIEpTVmFsdWUganNUZXN0
T2JqQ09OU1RfVkFMVUVfMihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZp
ZXImKQogewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2FzdDxpbnQ+KDIpKTsK
KyAgICBVTlVTRURfUEFSQU0oZXhlYyk7ICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxp
bnQ+KDIpKTsKIH0KIAogSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV80KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVy
KGV4ZWMsIHN0YXRpY19jYXN0PGludD4oNCkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsgICAg
cmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludD4oNCkpOwogfQogCiBKU1ZhbHVlIGpzVGVz
dE9iakNPTlNUX1ZBTFVFXzgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJikKIHsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8aW50Pig4KSk7
CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOyAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8
aW50Pig4KSk7CiB9CiAKIEpTVmFsdWUganNUZXN0T2JqQ09OU1RfVkFMVUVfOShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImKQogewotICAgIHJldHVybiBqc051bWJl
cihleGVjLCBzdGF0aWNfY2FzdDxpbnQ+KC0xKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOyAg
ICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50PigtMSkpOwogfQogCiBKU1ZhbHVlIGpz
VGVzdE9iakNPTlNUX1ZBTFVFXzEwKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYpCkBAIC0xNTI4LDIyICsxNTQ1LDIyIEBAIEpTVmFsdWUganNUZXN0T2JqQ09OU1Rf
VkFMVUVfMTAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKIAog
SlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8xMShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImKQogewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNf
Y2FzdDxpbnQ+KDB4ZmZmZmZmZmYpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7ICAgIHJldHVy
biBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDB4ZmZmZmZmZmYpKTsKIH0KIAogSlNWYWx1ZSBq
c1Rlc3RPYmpDT05TVF9WQUxVRV8xMihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImKQogewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2FzdDxpbnQ+
KDB4MDEpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7ICAgIHJldHVybiBqc051bWJlcihzdGF0
aWNfY2FzdDxpbnQ+KDB4MDEpKTsKIH0KIAogSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8x
MyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImKQogewotICAgIHJl
dHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2FzdDxpbnQ+KDBYMjApKTsKKyAgICBVTlVTRURf
UEFSQU0oZXhlYyk7ICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDBYMjApKTsK
IH0KIAogSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8xNChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUsIGNvbnN0IElkZW50aWZpZXImKQogewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBz
dGF0aWNfY2FzdDxpbnQ+KDB4MWFiYykpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsgICAgcmV0
dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludD4oMHgxYWJjKSk7CiB9CiAKIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0T2JqKiBvYmplY3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5oCmluZGV4IDIxNjhiM2YuLjQ3NGYwMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC0xMjYsNiArMTI2LDggQEAgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xh
c3NNZXRob2RXaXRoT3B0aW8KIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUludEF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwog
SlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CiBKU0M6OkpTVmFsdWUganNU
ZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsK
K3ZvaWQgc2V0SlNUZXN0T2JqU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6SlNWYWx1ZSk7CiBKU0M6OkpTVmFsdWUganNUZXN0T2JqSW50QXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CiB2b2lkIHNl
dEpTVGVzdE9iakludEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U1ZhbHVlKTsKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAppbmRleCAxYWQyOWNiLi42
NzhkY2ExIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmouaApAQCAtNTIsNiArNTIsOCBAQCBlbnVtIHsKIC0gKGludClyZWFkT25seUludEF0dHI7
CiAtIChOU1N0cmluZyAqKXJlYWRPbmx5U3RyaW5nQXR0cjsKIC0gKERPTVRlc3RPYmogKilyZWFk
T25seVRlc3RPYmpBdHRyOworLSAoc2hvcnQpc2hvcnRBdHRyOworLSAodm9pZClzZXRTaG9ydEF0
dHI6KHNob3J0KW5ld1Nob3J0QXR0cjsKIC0gKGludClpbnRBdHRyOwogLSAodm9pZClzZXRJbnRB
dHRyOihpbnQpbmV3SW50QXR0cjsKIC0gKGxvbmcgbG9uZylsb25nTG9uZ0F0dHI7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0gYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KaW5kZXggNjc4
ODA3NS4uMTczZGM3YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdE9iai5tbQpAQCAtOTIsNiArOTIsMTggQEAKICAgICByZXR1cm4ga2l0KFdURjo6
Z2V0UHRyKElNUEwtPnJlYWRPbmx5VGVzdE9iakF0dHIoKSkpOwogfQogCistIChzaG9ydClzaG9y
dEF0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
cmV0dXJuIElNUEwtPnNob3J0QXR0cigpOworfQorCistICh2b2lkKXNldFNob3J0QXR0cjooc2hv
cnQpbmV3U2hvcnRBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIElNUEwtPnNldFNob3J0QXR0cihuZXdTaG9ydEF0dHIpOworfQorCiAtIChpbnQp
aW50QXR0cgogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggMjJlZDY4MC4uMTMw
YmQxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5p
ZGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTM1
LDYgKzM1LDcgQEAgbW9kdWxlIHRlc3QgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9u
ZyAgICAgICAgICAgIHJlYWRPbmx5SW50QXR0cjsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyAgICAgICByZWFkT25seVN0cmluZ0F0dHI7CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBUZXN0T2JqICAgICAgICAgcmVhZE9ubHlUZXN0T2JqQXR0cjsKKyAgICAgICAgYXR0
cmlidXRlIHNob3J0ICAgICAgICAgICAgICAgICAgICBzaG9ydEF0dHI7CiAgICAgICAgIGF0dHJp
YnV0ZSBsb25nICAgICAgICAgICAgICAgICAgICAgaW50QXR0cjsKICAgICAgICAgYXR0cmlidXRl
IGxvbmcgbG9uZyAgICAgICAgICAgICAgICBsb25nTG9uZ0F0dHI7CiAgICAgICAgIGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIGxvbmcgICAgICAgdW5zaWduZWRMb25nTG9uZ0F0dHI7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCA0YzkyMWJi
Li42ZWQyYzcyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHAKQEAgLTc5LDYgKzc5LDIyIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
cmVhZE9ubHlUZXN0T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+CiAgICAg
cmV0dXJuIHdyYXBwZXI7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2hvcnRB
dHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNob3J0QXR0ci5f
Z2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKKyAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPnNob3J0QXR0cigpKTsKK30K
Kworc3RhdGljIHZvaWQgc2hvcnRBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zaG9ydEF0dHIuX3NldCIpOwor
ICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Cisg
ICAgaW50IHYgPSB0b0ludDMyKHZhbHVlKTsKKyAgICBpbXAtPnNldFNob3J0QXR0cih2KTsKKyAg
ICByZXR1cm47Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW50QXR0ckF0dHJH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5pbnRBdHRyLl9nZXQiKTsKQEAg
LTEwOTQsNiArMTExMCw4IEBAIHN0YXRpYyBjb25zdCBCYXRjaGVkQXR0cmlidXRlIFRlc3RPYmpB
dHRyc1tdID0gewogICAgIHsicmVhZE9ubHlTdHJpbmdBdHRyIiwgVGVzdE9iakludGVybmFsOjpy
ZWFkT25seVN0cmluZ0F0dHJBdHRyR2V0dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19j
YXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9w
ZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKICAgICAvLyBB
dHRyaWJ1dGUgJ3JlYWRPbmx5VGVzdE9iakF0dHInIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRl
JyBFeHRBdHRyOiAnJykKICAgICB7InJlYWRPbmx5VGVzdE9iakF0dHIiLCBUZXN0T2JqSW50ZXJu
YWw6OnJlYWRPbmx5VGVzdE9iakF0dHJBdHRyR2V0dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0
YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4
OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAg
ICAvLyBBdHRyaWJ1dGUgJ3Nob3J0QXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcn
KQorICAgIHsic2hvcnRBdHRyIiwgVGVzdE9iakludGVybmFsOjpzaG9ydEF0dHJBdHRyR2V0dGVy
LCBUZXN0T2JqSW50ZXJuYWw6OnNob3J0QXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywg
c3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8
djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAog
ICAgIC8vIEF0dHJpYnV0ZSAnaW50QXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcn
KQogICAgIHsiaW50QXR0ciIsIFRlc3RPYmpJbnRlcm5hbDo6aW50QXR0ckF0dHJHZXR0ZXIsIFRl
c3RPYmpJbnRlcm5hbDo6aW50QXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGlj
X2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlBy
b3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAogICAgIC8v
IEF0dHJpYnV0ZSAnbG9uZ0xvbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycp
Cg==
</data>
<flag name="review"
          id="64751"
          type_id="1"
          status="-"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="64752"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74296</attachid>
            <date>2010-11-18 15:06:38 -0800</date>
            <delta_ts>2010-11-18 16:21:01 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>49704_2</filename>
            <type>text/plain</type>
            <size>70516</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDNmY2IwNi4uMzAzMjRmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMS0xNyAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTWFrZSBiaW5kaW5nIGNvZGUgZ2VuZXJhdGlvbiBzY3JpcHRzIHN1cHBvcnQg
J3Nob3J0JyB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00OTcwNAorCisgICAgICAgIFVwZGF0ZWQgYmluZGluZyB0ZXN0cy4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisKIDIwMTAtMTEtMTcgIERpbWl0cmkgR2xh
emtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmlu
ZGV4IGVhMzI2MTUuLmQ1NDJhNWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQpAQCAtMjM3Niw2ICsyMzc2LDcgQEAgbXkgJW5hdGl2ZVR5cGUgPSAoCiAg
ICAgImJvb2xlYW4iID0+ICJib29sIiwKICAgICAiZG91YmxlIiA9PiAiZG91YmxlIiwKICAgICAi
ZmxvYXQiID0+ICJmbG9hdCIsCisgICAgInNob3J0IiA9PiAic2hvcnQiLAogICAgICJsb25nIiA9
PiAiaW50IiwKICAgICAidW5zaWduZWQgbG9uZyIgPT4gInVuc2lnbmVkIiwKICAgICAidW5zaWdu
ZWQgc2hvcnQiID0+ICJ1bnNpZ25lZCBzaG9ydCIsCkBAIC0yNDQ2LDcgKzI0NDcsNyBAQCBzdWIg
SlNWYWx1ZVRvTmF0aXZlCiAgICAgcmV0dXJuICIkdmFsdWUudG9Cb29sZWFuKGV4ZWMpIiBpZiAk
dHlwZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0dXJuICIkdmFsdWUudG9OdW1iZXIoZXhlYykiIGlm
ICR0eXBlIGVxICJkb3VibGUiOwogICAgIHJldHVybiAiJHZhbHVlLnRvRmxvYXQoZXhlYykiIGlm
ICR0eXBlIGVxICJmbG9hdCI7Ci0gICAgcmV0dXJuICIkdmFsdWUudG9JbnQzMihleGVjKSIgaWYg
JHR5cGUgZXEgImxvbmciOworICAgIHJldHVybiAiJHZhbHVlLnRvSW50MzIoZXhlYykiIGlmICR0
eXBlIGVxICJsb25nIiBvciAkdHlwZSBlcSAic2hvcnQiOwogICAgIHJldHVybiAiJHZhbHVlLnRv
VUludDMyKGV4ZWMpIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgJHR5cGUgZXEgInVu
c2lnbmVkIHNob3J0IjsKICAgICByZXR1cm4gInN0YXRpY19jYXN0PCR0eXBlPigkdmFsdWUudG9J
bnRlZ2VyKGV4ZWMpKSIgaWYgJHR5cGUgZXEgImxvbmcgbG9uZyIgb3IgJHR5cGUgZXEgInVuc2ln
bmVkIGxvbmcgbG9uZyI7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCmluZGV4IDI2YzFkYzcuLjllYzY3NzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjg5OSw3ICsyODk5LDcgQEAgc3ViIEpTVmFsdWVU
b05hdGl2ZQogICAgIHJldHVybiAiJHZhbHVlLT5Cb29sZWFuVmFsdWUoKSIgaWYgJHR5cGUgZXEg
ImJvb2xlYW4iOwogICAgIHJldHVybiAic3RhdGljX2Nhc3Q8JHR5cGU+KCR2YWx1ZS0+TnVtYmVy
VmFsdWUoKSkiIGlmICR0eXBlIGVxICJmbG9hdCIgb3IgJHR5cGUgZXEgImRvdWJsZSI7CiAKLSAg
ICByZXR1cm4gInRvSW50MzIoJHZhbHVlKSIgaWYgJHR5cGUgZXEgImxvbmciOworICAgIHJldHVy
biAidG9JbnQzMigkdmFsdWUpIiBpZiAkdHlwZSBlcSAibG9uZyIgb3IgJHR5cGUgZXEgInNob3J0
IjsKICAgICByZXR1cm4gInRvVUludDMyKCR2YWx1ZSkiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBs
b25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiOwogICAgIHJldHVybiAidG9JbnQ2NCgk
dmFsdWUpIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyBsb25nIiBvciAkdHlwZSBlcSAibG9u
ZyBsb25nIjsKICAgICByZXR1cm4gInN0YXRpY19jYXN0PFJhbmdlOjpDb21wYXJlSG93PigkdmFs
dWUtPkludDMyVmFsdWUoKSkiIGlmICR0eXBlIGVxICJDb21wYXJlSG93IjsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAppbmRleCA1
NzkyOTVmLi45YThkOTA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCkBAIC0xMDMsNiArMTAzLDM4IEBAIFdlYkRPTVRlc3RP
YmogV2ViRE9NVGVzdE9iajo6cmVhZE9ubHlUZXN0T2JqQXR0cigpIGNvbnN0CiAgICAgcmV0dXJu
IHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKSk7CiB9
CiAKK3Nob3J0IFdlYkRPTVRlc3RPYmo6OnNob3J0QXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFp
bXBsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGltcGwoKS0+c2hvcnRBdHRy
KCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0U2hvcnRBdHRyKHNob3J0IG5ld1Nob3J0
QXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgp
LT5zZXRTaG9ydEF0dHIobmV3U2hvcnRBdHRyKTsKK30KKwordW5zaWduZWQgc2hvcnQgV2ViRE9N
VGVzdE9iajo6dW5zaWduZWRTaG9ydEF0dHIoKSBjb25zdAoreworICAgIGlmICghaW1wbCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPnVuc2lnbmVkU2hvcnRBdHRy
KCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdE9iajo6c2V0VW5zaWduZWRTaG9ydEF0dHIodW5zaWdu
ZWQgc2hvcnQgbmV3VW5zaWduZWRTaG9ydEF0dHIpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2V0VW5zaWduZWRTaG9ydEF0dHIobmV3VW5zaWdu
ZWRTaG9ydEF0dHIpOworfQorCiBpbnQgV2ViRE9NVGVzdE9iajo6aW50QXR0cigpIGNvbnN0CiB7
CiAgICAgaWYgKCFpbXBsKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL1dlYkRPTVRlc3RPYmouaAppbmRleCBjZDZjYWFhLi5mMjliN2RjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKQEAgLTYwLDYg
KzYwLDEwIEBAIHB1YmxpYzoKICAgICBpbnQgcmVhZE9ubHlJbnRBdHRyKCkgY29uc3Q7CiAgICAg
V2ViRE9NU3RyaW5nIHJlYWRPbmx5U3RyaW5nQXR0cigpIGNvbnN0OwogICAgIFdlYkRPTVRlc3RP
YmogcmVhZE9ubHlUZXN0T2JqQXR0cigpIGNvbnN0OworICAgIHNob3J0IHNob3J0QXR0cigpIGNv
bnN0OworICAgIHZvaWQgc2V0U2hvcnRBdHRyKHNob3J0KTsKKyAgICB1bnNpZ25lZCBzaG9ydCB1
bnNpZ25lZFNob3J0QXR0cigpIGNvbnN0OworICAgIHZvaWQgc2V0VW5zaWduZWRTaG9ydEF0dHIo
dW5zaWduZWQgc2hvcnQpOwogICAgIGludCBpbnRBdHRyKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRJ
bnRBdHRyKGludCk7CiAgICAgbG9uZyBsb25nIGxvbmdMb25nQXR0cigpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Q2FsbGJhY2suY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q2FsbGJhY2suY3BwCmluZGV4IGZiZTUzOGQuLjE5ZmYxNjYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxi
YWNrLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RDYWxsYmFjay5jcHAKQEAgLTU4LDggKzU4LDggQEAgZ3BvaW50ZXIga2l0KFdlYkNv
cmU6OlRlc3RDYWxsYmFjayogb2JqKQogZ2Jvb2xlYW4KIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFj
a19jYWxsYmFja193aXRoX2NsYXNzMXBhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwg
V2ViS2l0RE9NQ2xhc3MxKiBjbGFzczFwYXJhbSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRl
c3RDYWxsYmFjayAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoY2xhc3MxcGFyYW0sIDApOwogICAgIFdlYkNvcmU6OkNsYXNzMSAqIGNvbnZlcnRl
ZF9jbGFzczFwYXJhbSA9IE5VTEw7CkBAIC03NCw4ICs3NCw4IEBAIHdlYmtpdF9kb21fdGVzdF9j
YWxsYmFja19jYWxsYmFja193aXRoX2NsYXNzMXBhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayog
c2VsZiwKIGdib29sZWFuCiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9j
bGFzczJwYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIFdlYktpdERPTUNsYXNzMiog
Y2xhc3MycGFyYW0sIGNvbnN0IGdjaGFyKiBzdHJfYXJnKQogewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29y
ZTo6VGVzdENhbGxiYWNrICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChjbGFzczJwYXJhbSwgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c3RyX2FyZywgMCk7CkBAIC05Miw4ICs5Miw4IEBAIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19j
YWxsYmFja193aXRoX2NsYXNzMnBhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwKIGds
b25nCiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub25fYm9vbF9yZXR1
cm5fdHlwZShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIFdlYktpdERPTUNsYXNzMyogY2xh
c3MzcGFyYW0pCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNsYXNzM3BhcmFt
LCAwKTsKICAgICBXZWJDb3JlOjpDbGFzczMgKiBjb252ZXJ0ZWRfY2xhc3MzcGFyYW0gPSBOVUxM
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cAppbmRleCBhZjkzMDBkLi43OTU2ZTMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtNTIsOCArNTIsOCBAQCBncG9pbnRlciBr
aXQoV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIG9iaikKIHZvaWQKIHdlYmtp
dF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX21ldGhvZChXZWJLaXRET01UZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogc2VsZiwgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl9pZl9mYWlsKGxp
c3RlbmVyKTsKICAgICBXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyICogY29udmVydGVk
X2xpc3RlbmVyID0gTlVMTDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCmluZGV4IGM5YzEwZDcuLjFiZjk5
ODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqLmNwcApAQCAtNTUsOCArNTUsOCBAQCBncG9pbnRlciBraXQo
V2ViQ29yZTo6VGVzdE9iaiogb2JqKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21l
dGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT52b2lkTWV0aG9kKCk7CiB9CkBA
IC02NCw4ICs2NCw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2QoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0
aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFy
KiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnKQogewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl9pZl9mYWls
KHN0cl9hcmcpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwob2JqX2FyZyk7CkBAIC04MSw4ICs4MSw4
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsCiBnbG9uZwogd2Via2l0X2RvbV90ZXN0X29ial9p
bnRfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnbG9uZyByZXMgPSBp
dGVtLT5pbnRNZXRob2QoKTsKICAgICByZXR1cm4gcmVzOwpAQCAtOTEsOCArOTEsOCBAQCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2ludF9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIGdsb25n
CiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2ludF9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01U
ZXN0T2JqKiBvYmpfYXJnKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywg
MCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqX2FyZywgMCk7CkBAIC0xMDksOCArMTA5
LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9pbnRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnLAogV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9k
b21fdGVzdF9vYmpfb2JqX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm9i
ak1ldGhvZCgpKTsKICAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBzdGF0aWNfY2FzdDxXZWJL
aXRET01UZXN0T2JqKj4oV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpKTsKQEAgLTEyMCw4ICsxMjAs
OCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Rfd2l0
aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFy
KiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnKQogewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqX2Fy
ZywgMCk7CkBAIC0xMzksOCArMTM5LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9k
X3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnLAogV2ViS2l0
RE9NVGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNfYWxs
X2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktp
dERPTVRlc3RPYmoqIG9ial9hcmcpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJf
YXJnLCAwKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKQEAgLTE1OCw4
ICsxNTgsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9h
cmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0CiBXZWJLaXRET01UZXN0T2JqKgogd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1aXJlc19hbGxfYXJnc19hbmRfdGhyb3dz
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01U
ZXN0T2JqKiBvYmpfYXJnLCBHRXJyb3IgKiplcnJvcikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHN0cl9hcmcsIDApOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9ial9hcmcsIDAp
OwpAQCAtMTgzLDggKzE4Myw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVx
dWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyhXZWJLaXRET01UZXN0T2JqKiBzCiB2b2lkCiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
V2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzZXJpYWxpemVkX2FyZykKIHsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1
cm5faWZfZmFpbChzZXJpYWxpemVkX2FyZyk7CiAgICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlICogY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnID0gTlVMTDsKQEAgLTE5OCw4ICsxOTgs
OCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZAogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9p
ZGJfa2V5KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTUlEQktleSoga2V5KQogewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9p
Zl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBn
X3JldHVybl9pZl9mYWlsKGtleSk7CiAgICAgV2ViQ29yZTo6SURCS2V5ICogY29udmVydGVkX2tl
eSA9IE5VTEw7CkBAIC0yMTMsOCArMjEzLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9pZGJfa2V5
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTUlEQktleSoga2V5KQogdm9pZAogd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgR0Vycm9yICoqZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIGl0ZW0tPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwpAQCAtMjM0LDggKzIzNCw4IEBAIHdl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIEdFcnJvciAqKmVycm9yCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZHlu
YW1pY19mcmFtZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT53aXRoRHluYW1pY0Zy
YW1lKCk7CiB9CkBAIC0yNDMsOCArMjQzLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2R5
bmFtaWNfZnJhbWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVz
dF9vYmpfd2l0aF9keW5hbWljX2ZyYW1lX2FuZF9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgaW50X2FyZykKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+d2l0aER5bmFtaWNGcmFtZUFuZEFyZyhpbnRfYXJnKTsK
IH0KQEAgLTI1Miw4ICsyNTIsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZHluYW1pY19m
cmFtZV9hbmRfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludAogdm9pZAogd2Vi
a2l0X2RvbV90ZXN0X29ial93aXRoX2R5bmFtaWNfZnJhbWVfYW5kX29wdGlvbmFsX2FyZyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBnbG9uZyBvcHRpb25hbF9hcmcpCiB7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAg
IGl0ZW0tPndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyhpbnRfYXJnLCBvcHRpb25hbF9h
cmcpOwogfQpAQCAtMjYxLDggKzI2MSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9keW5h
bWljX2ZyYW1lX2FuZF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwKIHZvaWQK
IHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9keW5hbWljX2ZyYW1lX2FuZF91c2VyX2dlc3R1cmUo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywgZ2Jvb2xlYW4gaXNVc2VyR2Vz
dHVyZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CiAgICAgaXRlbS0+d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKGludF9hcmcsIGZh
bHNlKTsKIH0KQEAgLTI3MCw4ICsyNzAsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZHlu
YW1pY19mcmFtZV9hbmRfdXNlcl9nZXN0dXJlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsCiB2b2lk
CiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZHluYW1pY19mcmFtZV9hbmRfdXNlcl9nZXN0dXJl
X2FzYWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywgZ2xvbmcgb3B0aW9u
YWxfYXJnLCBnYm9vbGVhbiBpc1VzZXJHZXN0dXJlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT53aXRoRHluYW1pY0ZyYW1l
QW5kVXNlckdlc3R1cmVBU0FEKGludF9hcmcsIG9wdGlvbmFsX2FyZywgZmFsc2UpOwogfQpAQCAt
Mjc5LDggKzI3OSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9keW5hbWljX2ZyYW1lX2Fu
ZF91c2VyX2dlc3R1cmVfYXNhZChXZWJLaXRET01UZXN0T2JqKiBzCiB2b2lkCiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
IHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAg
ICAgaXRlbS0+d2l0aFNjcmlwdFN0YXRlVm9pZCgpOwogfQpAQCAtMjg4LDggKzI4OCw4IEBAIHdl
YmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQogV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3Jp
cHRfc3RhdGVfb2JqKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBQYXNzUmVmUHRy
PFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdFN0
YXRlT2JqKCkpOwogICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IHN0YXRpY19jYXN0PFdlYktp
dERPTVRlc3RPYmoqPihXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSkpOwpAQCAtMjk5LDggKzI5OSw4
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfb2JqKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRl
X3ZvaWRfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQog
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpdGVtLT53aXRoU2NyaXB0U3Rh
dGVWb2lkRXhjZXB0aW9uKGVjKTsKQEAgLTMxNCw4ICszMTQsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWRfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIEdFcgogV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3Jp
cHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKipl
cnJvcikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2Ny
aXB0U3RhdGVPYmpFeGNlcHRpb24oZWMpKTsKQEAgLTMzMSw4ICszMzEsOCBAQCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29ial9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgR0Vycgogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVj
dXRpb25fY29udGV4dChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogfQpAQCAtMzQwLDggKzM0MCw4IEBAIHdlYmtpdF9kb21fdGVz
dF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG9wdCkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlv
bmFsQXJnKG9wdCk7CiB9CkBAIC0zNDksOCArMzQ5LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgb3B0
KQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJn
X2FuZF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgbm9uX29wdCwg
Z2xvbmcgb3B0KQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKICAgICBpdGVtLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFy
Zyhub25fb3B0LCBvcHQpOwogfQpAQCAtMzU4LDggKzM1OCw4IEBAIHdlYmtpdF9kb21fdGVzdF9v
YmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2FyZ19hbmRfb3B0aW9uYWxfYXJnKFdlYktpdERP
TVRlc3RPCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25h
bF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25n
IG5vbl9vcHQsIGdsb25nIG9wdDEsIGdsb25nIG9wdDIpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPm1ldGhvZFdpdGhOb25P
cHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25fb3B0LCBvcHQxLCBvcHQyKTsKIH0KQEAg
LTM2Nyw4ICszNjcsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRp
b25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKFdlYktpdERPTQogdm9pZAogd2Via2l0X2Rv
bV90ZXN0X29ial9jbGFzc19tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+
Y2xhc3NNZXRob2QoKTsKIH0KQEAgLTM3Niw4ICszNzYsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2NsYXNzX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogZ2xvbmcKIHdlYmtpdF9kb21f
dGVzdF9vYmpfY2xhc3NfbWV0aG9kX3dpdGhfb3B0aW9uYWwoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2xvbmcgYXJnKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+Y2xhc3NNZXRob2RXaXRo
T3B0aW9uYWwoYXJnKTsKICAgICByZXR1cm4gcmVzOwpAQCAtMzg2LDggKzM4Niw4IEBAIHdlYmtp
dF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kX3dpdGhfb3B0aW9uYWwoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ2xvbmcgYXJnCiBnbG9uZwogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9v
bmx5X2ludF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnbG9uZyByZXMg
PSBpdGVtLT5yZWFkT25seUludEF0dHIoKTsKICAgICByZXR1cm4gcmVzOwpAQCAtMzk2LDggKzM5
Niw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9pbnRfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQogZ2NoYXIqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29u
bHlfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2Vs
ZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdjaGFyKiBy
ZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKICAg
ICByZXR1cm4gcmVzOwpAQCAtNDA2LDE5ICs0MDYsNTcgQEAgd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfcmVhZF9vbmx5X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiBXZWJLaXRE
T01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6
VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5yZWFkT25seVRlc3RPYmpBdHRyKCkp
OwogICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RP
YmoqPihXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSkpOwogICAgIHJldHVybiByZXM7CiB9CiAKK2dz
aG9ydAord2Via2l0X2RvbV90ZXN0X29ial9nZXRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnc2hvcnQgcmVzID0gaXRlbS0+c2hvcnRB
dHRyKCk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnc2hvcnQgdmFsdWUpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0U2hvcnRBdHRyKHZhbHVlKTsKK30KKworZ3VzaG9ydAord2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlcyA9IGl0ZW0tPnVuc2ln
bmVkU2hvcnRBdHRyKCk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90
ZXN0X29ial9zZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBn
dXNob3J0IHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFVuc2lnbmVkU2hvcnRBdHRy
KHZhbHVlKTsKK30KKwogZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ludF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnbG9uZyByZXMgPSBpdGVtLT5pbnRBdHRy
KCk7CiAgICAgcmV0dXJuIHJlczsKQEAgLTQyNyw4ICs0NjUsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9pbnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFs
dWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwogICAgIGl0ZW0tPnNldEludEF0dHIodmFsdWUpOwogfQpAQCAtNDM2LDggKzQ3NCw4IEBAIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2ludF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGds
b25nIHZhbHVlKQogZ2ludDY0CiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9sb25nX2xvbmdfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2ludDY0IHJlcyA9IGl0ZW0tPmxv
bmdMb25nQXR0cigpOwogICAgIHJldHVybiByZXM7CkBAIC00NDYsOCArNDg0LDggQEAgd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
IHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdpbnQ2NCB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+c2V0TG9uZ0xvbmdBdHRyKHZhbHVl
KTsKIH0KQEAgLTQ1NSw4ICs0OTMsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9sb25nX2xv
bmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50NjQgdmFsdWUpCiBndWludDY0CiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ3VpbnQ2NCByZXMgPSBpdGVtLT51bnNpZ25lZExvbmdM
b25nQXR0cigpOwogICAgIHJldHVybiByZXM7CkBAIC00NjUsOCArNTAzLDggQEAgd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1aW50NjQgdmFsdWUpCiB7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPnNldFVu
c2lnbmVkTG9uZ0xvbmdBdHRyKHZhbHVlKTsKIH0KQEAgLTQ3NCw4ICs1MTIsOCBAQCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBndWludDY0CiBnY2hhcioKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnY2hhciogcmVzID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiByZXM7CkBAIC00
ODQsOCArNTIyLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKIHsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKQEAgLTQ5NSw4ICs1MzMsOCBAQCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCiBXZWJLaXRET01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
dGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRlc3RPYmpBdHRy
KCkpOwogICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IHN0YXRpY19jYXN0PFdlYktpdERPTVRl
c3RPYmoqPihXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSkpOwpAQCAtNTA2LDggKzU0NCw4IEBAIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxM
OwpAQCAtNTIxLDggKzU1OSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaioKIFdlYktpdERPTVRl
c3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMg
PSBXVEY6OmdldFB0cihpdGVtLT54bWxPYmpBdHRyKCkpOwogICAgIFdlYktpdERPTVRlc3RPYmoq
IHJlcyA9IHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RPYmoqPihXZWJLaXQ6OmtpdChnX3Jlcy5n
ZXQoKSkpOwpAQCAtNTMyLDggKzU3MCw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3htbF9v
YmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfeG1sX29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RP
YmoqIHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKICAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKICAgICBXZWJDb3JlOjpUZXN0
T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKQEAgLTU0Nyw4ICs1ODUsOCBAQCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2Vi
S2l0RE9NVGVzdE9iaiogdgogZ2Jvb2xlYW4KIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NyZWF0
ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+
aXNDcmVhdGUoKTsKICAgICByZXR1cm4gcmVzOwpAQCAtNTU3LDggKzU5NSw4IEBAIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfY3JlYXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKICAgICBpdGVtLT5zZXRDcmVhdGUodmFsdWUpOwogfQpAQCAtNTY2LDggKzYwNCw4
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKIGdjaGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVj
dGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnY2hhciog
cmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpOwogICAgIHJldHVybiByZXM7CkBAIC01
NzYsOCArNjE0LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKICAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKICAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwpAQCAtNTg3LDgg
KzYyNSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhCiBnbG9uZwogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
IHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwogICAgIGdsb25nIHJlcyA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cik7CiAgICAgcmV0dXJuIHJlczsK
QEAgLTU5Nyw4ICs2MzUsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50
ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwogICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciwgdmFsdWUpOwogfQpAQCAtNjA2LDggKzY0
NCw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhCiBnYm9vbGVhbgogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfcmVmbGVjdGVkX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQog
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CiAgICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKTsKICAgICByZXR1cm4gcmVzOwpAQCAtNjE2
LDggKzY1NCw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3JlZmxlY3RlZF9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwogICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIHZhbHVlKTsKIH0KQEAgLTYyNSw4ICs2NjMsOCBAQCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdib29sZWFuCiBnY2hhcioKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Jl
ZmxlY3RlZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2NoYXIq
IHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzOwpAQCAt
NjM1LDggKzY3Myw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF91cmxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
cmVmbGVjdGVkX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CiAgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKQEAgLTY0Niw4ICs2ODQs
OCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdXJsX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqCiBnY2hhcioKIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3JlZmxlY3RlZF9ub25fZW1wdHlfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
IHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwogICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5vbkVt
cHR5VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkbm9uZW1wdHl1cmxh
dHRyQXR0cikpOwogICAgIHJldHVybiByZXM7CkBAIC02NTYsOCArNjk0LDggQEAgd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX25vbl9lbXB0eV91cmxfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX25vbl9l
bXB0eV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
CiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CkBAIC02NjcsOCArNzA1LDggQEAg
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX25vbl9lbXB0eV91cmxfYXR0cihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBjb24KIGdjaGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
cmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBn
Y2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKTsKICAgICByZXR1cm4g
cmVzOwpAQCAtNjc3LDggKzcxNSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3Rl
ZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CiAgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
QEAgLTY4OCw4ICs3MjYsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3Ry
aW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYQogZ2xvbmcKIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+Z2V0SW50ZWdyYWxB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0
cik7CiAgICAgcmV0dXJuIHJlczsKQEAgLTY5OCw4ICs3MzYsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50
ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKIHsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+
c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50
ZWdyYWxBdHRyQXR0ciwgdmFsdWUpOwogfQpAQCAtNzA3LDggKzc0NSw4IEBAIHdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBnCiBnYm9vbGVhbgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVk
X2N1c3RvbV9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdi
b29sZWFuIHJlcyA9IGl0ZW0tPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3Rv
bUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpOwogICAgIHJldHVybiByZXM7CkBAIC03MTcsOCArNzU1
LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdi
b29sZWFuIHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKICAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0ciwgdmFsdWUpOwogfQpAQCAtNzI2LDgg
Kzc2NCw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVh
bl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdiCiBnY2hhcioKIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwogICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVS
TEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikp
OwogICAgIHJldHVybiByZXM7CkBAIC03MzYsOCArNzc0LDggQEAgd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQog
dm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCiB7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CkBAIC03NDcsOCArNzg1LDggQEAgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBjb25zdAogZ2NoYXIqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9t
X25vbl9lbXB0eV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAg
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2No
YXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Tm9uRW1wdHlVUkxBdHRyQXR0cikp
OwogICAgIHJldHVybiByZXM7CkBAIC03NTcsOCArNzk1LDggQEAgd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfcmVmbGVjdGVkX2N1c3RvbV9ub25fZW1wdHlfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2UKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fbm9u
X2VtcHR5X3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CiAgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
X3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKQEAgLTc2OCw4ICs4MDYsOCBA
QCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX25vbl9lbXB0eV91cmxf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZQogZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJv
ciAqKmVycm9yKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
Z2xvbmcgcmVzID0gaXRlbS0+YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOwpAQCAtNzg0LDgg
KzgyMiw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0
aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGl0ZW0tPnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBlYyk7
CkBAIC03OTksOCArODM3LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX2dl
dHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcKIGdsb25nCiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+YXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24oKTsKICAgICByZXR1cm4gcmVzOwpAQCAtODA5LDggKzg0Nyw4IEBAIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfc2V0dGVy
X2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSwgR0Vycm9yICoq
ZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwogICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGl0ZW0tPnNldEF0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBlYyk7CkBAIC04MjQsOCArODYyLDggQEAgd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2xvbmcKIGdjaGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3Ry
aW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdF
cnJvciAqKmVycm9yKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oZWMpKTsKQEAgLTgzNSw4ICs4NzMsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9i
aiogc2VsZgogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9n
ZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSwgR0Vycm9yICoqZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwogICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CkBA
IC04NTIsOCArODkwLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0
aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYKIGdjaGFyKgogd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4g
cmVzOwpAQCAtODYyLDggKzkwMCw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19h
dHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmCiB2b2lkCiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24o
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IgKiplcnJv
cikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CiAgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
X3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKQEAgLTg3OSw4NyArOTE3LDkz
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2Vw
dGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmCiBnY2hhcioKIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3NjcmlwdF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAg
Z2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c2NyaXB0U3RyaW5nQXR0cigp
KTsKICAgICByZXR1cm4gcmVzOwogfQogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCiBnbG9uZwog
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisj
aWYgRU5BQkxFKENvbmRpdGlvbjEpCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdsb25nIHJlcyA9IGl0
ZW0tPmNvbmRpdGlvbmFsQXR0cjEoKTsKICAgICByZXR1cm4gcmVzOwotfQorI2Vsc2UKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOwogI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24x
KSAqLworfQogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9jb25kaXRpb25hbF9hdHRyMShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2
YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisjaWYg
RU5BQkxFKENvbmRpdGlvbjEpCiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRy
MSh2YWx1ZSk7Ci19CiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCit9CiAKLSNpZiBF
TkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiBnbG9uZwogd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
IHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisjaWYgRU5BQkxF
KENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQogICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBn
bG9uZyByZXMgPSBpdGVtLT5jb25kaXRpb25hbEF0dHIyKCk7CiAgICAgcmV0dXJuIHJlczsKLX0K
KyNlbHNlCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKICNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CiAKLSNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9jb25kaXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2
YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisjaWYg
RU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQogICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0
ZW0tPnNldENvbmRpdGlvbmFsQXR0cjIodmFsdWUpOwotfQogI2VuZGlmIC8qIEVOQUJMRShDb25k
aXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KIAotI2lmIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9jb25kaXRpb25hbF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdsb25nIHJlcyA9IGl0
ZW0tPmNvbmRpdGlvbmFsQXR0cjMoKTsKICAgICByZXR1cm4gcmVzOwotfQorI2Vsc2UKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOwogI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KIAotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRp
dGlvbmFsX2F0dHIzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQogewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+c2V0Q29uZGl0
aW9uYWxBdHRyMyh2YWx1ZSk7Ci19CiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKSAqLworfQogCiBnbG9uZwogd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
ZGVzY3JpcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdsb25nIHJlcyA9
IGl0ZW0tPmRlc2NyaXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlczsKQEAgLTk2OCw4ICsxMDEyLDgg
QEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pZChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+aWQoKTsKICAgICByZXR1cm4gcmVz
OwpAQCAtOTc4LDggKzEwMjIsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pZChXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfaWQoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPnNldElkKHZhbHVlKTsKIH0K
QEAgLTk4Nyw4ICsxMDMxLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfaWQoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCiBnY2hhcioKIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X2hhc2goV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdjaGFyKiByZXMgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmhhc2goKSk7CiAgICAgcmV0dXJuIHJlczsKQEAgLTEw
MTUsNiArMTA1OSw4IEBAIGVudW0gewogICAgIFBST1BfUkVBRF9PTkxZX0lOVF9BVFRSLAogICAg
IFBST1BfUkVBRF9PTkxZX1NUUklOR19BVFRSLAogICAgIFBST1BfUkVBRF9PTkxZX1RFU1RfT0JK
X0FUVFIsCisgICAgUFJPUF9TSE9SVF9BVFRSLAorICAgIFBST1BfVU5TSUdORURfU0hPUlRfQVRU
UiwKICAgICBQUk9QX0lOVF9BVFRSLAogICAgIFBST1BfTE9OR19MT05HX0FUVFIsCiAgICAgUFJP
UF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUiwKQEAgLTEwNzUsNiArMTEyMSwxMSBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BfaWQsIGNvbgogICAgIFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBXRUJLSVRfRE9N
X1RFU1RfT0JKKG9iamVjdCk7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZVNlbGYgPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CiAgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1VO
U0lHTkVEX1NIT1JUX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0VW5zaWduZWRT
aG9ydEF0dHIoKGdfdmFsdWVfZ2V0X3VzaG9ydCh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQogICAgIGNhc2UgUFJPUF9JTlRfQVRUUjoKICAgICB7CiAgICAgICAgIGNvcmVTZWxmLT5z
ZXRJbnRBdHRyKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwpAQCAtMTIyNCw2ICsxMjc1LDE2
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhCiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAg
ICBjYXNlIFBST1BfU0hPUlRfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2
YWx1ZSwgY29yZVNlbGYtPnNob3J0QXR0cigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWludCh2YWx1ZSwgY29yZVNlbGYtPnVuc2lnbmVkU2hvcnRBdHRyKCkpOworICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgY2FzZSBQUk9QX0lOVF9BVFRSOgogICAgIHsKICAgICAgICAgZ192
YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmludEF0dHIoKSk7CkBAIC0xNDIwLDYgKzE0
ODEsMjQgQEAgR19NQVhMT05HLCAvKiBtYXggKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfT0JK
LCAvKiBnb2JqZWN0IHR5cGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CiAgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NIT1JUX0FUVFIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KCJzaG9ydC1hdHRyIiwgLyogbmFt
ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAidGVzdF9vYmpfc2hvcnQtYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJyZWFkLXdyaXRlICBnc2hvcnQgVGVzdE9iai5zaG9ydC1hdHRyIiwgLyogbG9uZ2VyIC0gY291
bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUlOSU5ULCAvKiBt
aW4gKi8KK0dfTUFYSU5ULCAvKiBtYXggKi8KKzAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29i
amVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9VTlNJ
R05FRF9TSE9SVF9BVFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX3VpbnQoInVuc2lnbmVkLXNob3J0LWF0dHIiLCAvKiBuYW1lICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0
X29ial91bnNpZ25lZC1zaG9ydC1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJl
YWQtd3JpdGUgIGd1c2hvcnQgVGVzdE9iai51bnNpZ25lZC1zaG9ydC1hdHRyIiwgLyogbG9uZ2Vy
IC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIG1p
biAqLworR19NQVhVSU5UMTYsIC8qIG1heCAqLworMCwgLyogZGVmYXVsdCAqLworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShn
b2JqZWN0Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0lO
VF9BVFRSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X2xvbmcoImludC1hdHRyIiwgLyogbmFtZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfaW50LWF0dHIiLCAvKiBz
aG9ydCBkZXNjcmlwdGlvbiAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAppbmRleCA4ZWU4ZjA0Li4yZWViZGIx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RPYmouaApAQCAtMTM5LDYgKzEzOSwxOCBAQCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWFkX29ubHlfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7CiBX
RUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFk
X29ubHlfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKIAorV0VCS0lUX0FQ
SSBnc2hvcnQKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRf
c2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnc2hvcnQgdmFsdWUpOworCitXRUJL
SVRfQVBJIGd1c2hvcnQKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Vuc2lnbmVkX3Nob3J0X2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBndXNob3J0IHZhbHVlKTsKKwogV0VCS0lUX0FQSSBnbG9uZwogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7CiAKQEAgLTI2OCwzNSArMjgw
LDIzIEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4
Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmCiBXRUJLSVRfQVBJIGdjaGFyKgogd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfc2NyaXB0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpOwogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCiBXRUJLSVRfQVBJIGdsb25nCiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMShXZWJLaXRET01UZXN0T2JqKiBzZWxm
KTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KIAotI2lmIEVOQUJMRShDb25kaXRp
b24xKQogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25h
bF9hdHRyMShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0jZW5kaWYgLyog
RU5BQkxFKENvbmRpdGlvbjEpICovCiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxF
KENvbmRpdGlvbjIpCiBXRUJLSVRfQVBJIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9j
b25kaXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLSNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpICovCiAKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIHZhbHVlKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENv
bmRpdGlvbjIpICovCiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCiBXRUJLSVRfQVBJIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25h
bF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X2NvbmRpdGlvbmFsX2F0dHIzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZh
bHVlKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
ICovCiAKIFdFQktJVF9BUEkgZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2Rlc2NyaXB0
aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggN2UwNjA2OC4uY2I2MGI3OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC01NCwxMSAr
NTQsMTMgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1Rlc3RPYmopOwogI2RlZmluZSBU
SFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3RPYmpUYWJsZVZhbHVlc1szNF0gPQorc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdE9ialRhYmxlVmFsdWVzWzM2XSA9CiB7CiAgICAgeyAicmVhZE9ubHlJbnRB
dHRyIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialJlYWRPbmx5SW50QXR0ciksIChpbnRwdHJf
dCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgInJlYWRPbmx5U3RyaW5nQXR0ciIsIERv
bnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHIpLCAoaW50cHRyX3QpMCBU
SFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJyZWFkT25seVRlc3RPYmpBdHRyIiwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHIpLCAoaW50cHRyX3QpMCBUSFVO
S19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJzaG9ydEF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialNob3J0
QXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpTaG9ydEF0dHIgVEhVTktfR0VORVJBVE9SKDAp
IH0sCisgICAgeyAidW5zaWduZWRTaG9ydEF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialVuc2lnbmVkU2hv
cnRBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyIFRIVU5LX0dF
TkVSQVRPUigwKSB9LAogICAgIHsgImludEF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakludEF0dHIpLCAo
aW50cHRyX3Qpc2V0SlNUZXN0T2JqSW50QXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7
ICJsb25nTG9uZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakxvbmdMb25nQXR0ciksIChpbnRwdHJfdClz
ZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAidW5z
aWduZWRMb25nTG9uZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKSwg
KGludHB0cl90KXNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyIFRIVU5LX0dFTkVSQVRP
UigwKSB9LApAQCAtOTksNyArMTAxLDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdE9ialRhYmxlVmFsdWVzWzM0XSA9CiB9OwogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCi1z
dGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqVGFibGUgPSB7IDEz
MiwgMTI3LCBKU1Rlc3RPYmpUYWJsZVZhbHVlcywgMCB9Oworc3RhdGljIEpTQ19DT05TVF9IQVNI
VEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialRhYmxlID0geyAxMzMsIDEyNywgSlNUZXN0T2JqVGFi
bGVWYWx1ZXMsIDAgfTsKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAjaWYgRU5B
QkxFKEpJVCkKICNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IK
QEAgLTI4Miw3ICsyODQsNyBAQCBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5SW50QXR0cihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aQogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNl
KSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoZXhlYywgaW1wLT5yZWFkT25seUludEF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXAtPnJlYWRPbmx5SW50QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC0zMDQsMTIgKzMwNiwzMCBAQCBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVz
dE9iakF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK0pTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xv
dEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdE9iaiogaW1wID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXAtPnNob3J0QXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVz
dE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXAtPnVuc2lnbmVkU2hvcnRBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpT
VmFsdWUganNUZXN0T2JqSW50QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImKQogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5p
bnRBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5pbnRBdHRyKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMxOCw3ICszMzgsNyBAQCBKU1ZhbHVlIGpz
VGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNv
bnN0IElkZW50aWZpZQogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwog
ICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5sb25nTG9uZ0F0
dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmxvbmdMb25nQXR0cigp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMjcsNyArMzQ3LDcgQEAgSlNWYWx1ZSBq
c1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xv
dEJhc2UsIGNvbnN0IEkKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
ICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+dW5zaWduZWRM
b25nTG9uZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPnVuc2ln
bmVkTG9uZ0xvbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTM4MSw3ICs0
MDEsNyBAQCBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+
KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVj
LCBpbXAtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
aW50ZWdyYWxhdHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5n
ZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFs
YXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00MjYsNyArNDQ2LDcgQEAg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHNsb3RCYXNlLAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5n
ZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRl
Z3JhbEF0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmdldElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFs
QXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NjIsNyArNDgyLDcgQEAg
SlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgc2xvdEJhc2UsIGNvbnMKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVj
LCBpbXAtPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CisgICAgSlNDOjpKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcC0+YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00NzIs
NyArNDkyLDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnMKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwogICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0
T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVy
KGV4ZWMsIGltcC0+YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXAtPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTUxNiw3ICs1MzYsNyBAQCBKU1ZhbHVlIGpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVu
dAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFz
T2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoq
IGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5jb25kaXRpb25hbEF0dHIxKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5jb25kaXRpb25hbEF0dHIxKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYKQEAgLTUyNyw3ICs1NDcsNyBAQCBKU1ZhbHVl
IGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RC
YXNlLCBjb25zdCBJZGVudAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0
PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5jb25kaXRp
b25hbEF0dHIyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5jb25kaXRp
b25hbEF0dHIyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYKQEAgLTUzOCw3ICs1
NTgsNyBAQCBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudAogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5V
U0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhl
YywgaW1wLT5jb25kaXRpb25hbEF0dHIzKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wLT5jb25kaXRpb25hbEF0dHIzKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5k
aWYKQEAgLTU0OCw3ICs1NjgsNyBAQCBKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllcgogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RC
YXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRp
Y19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoZXhlYywgaW1wLT5kZXNjcmlwdGlvbigpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKGltcC0+ZGVzY3JpcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtNTU3LDcgKzU3Nyw3IEBAIEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwog
ICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIGltcC0+aWQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAt
PmlkKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU4MCw2ICs2MDAsMjAgQEAgdm9p
ZCBKU1Rlc3RPYmo6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWwKICAgICBsb29rdXBQdXQ8SlNUZXN0T2JqLCBCYXNlPihleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAmSlNUZXN0T2JqVGFibGUsIHRoaXMsIHNsb3QpOwogfQog
Cit2b2lkIHNldEpTVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RPYmoqIGltcCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGltcC0+c2V0
U2hvcnRBdHRyKHZhbHVlLnRvSW50MzIoZXhlYykpOworfQorCit2b2lkIHNldEpTVGVzdE9ialVu
c2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8
VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaW1wLT5zZXRVbnNpZ25lZFNob3J0
QXR0cih2YWx1ZS50b1VJbnQzMihleGVjKSk7Cit9CisKIHZvaWQgc2V0SlNUZXN0T2JqSW50QXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRo
aXNPYmplY3QpOwpAQCAtODIxLDcgKzg1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JbnRNZXRob2QoRXhlY1N0YXRlKiBleGVjCiAg
ICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CiAKIAotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmlu
dE1ldGhvZCgpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5pbnRN
ZXRob2QoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC04
NDMsNyArODc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkludE1ldGhvZFdpdGhBcmdzKEV4ZWNTdGEKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+aW50TWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcs
IG9iakFyZykpOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmludE1l
dGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJnLCBvYmpBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTE0NzYsNyArMTUxMCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdp
dGhPcHRpb25hbChFCiAgICAgaW50IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsK
ICAgICBpZiAoYXJnc0NvdW50IDw9IDApIHsKIAotICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoZXhlYywgaW1wLT5jbGFzc01ldGhvZFdpdGhPcHRpb25hbCgpKTsKKyAgICAg
ICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+Y2xhc3NNZXRob2RXaXRoT3B0
aW9uYWwoKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9
CiAKQEAgLTE0ODUsNyArMTUxOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbChFCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKIAotICAgIEpTQzo6SlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFs
KGFyZykpOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmNsYXNzTWV0
aG9kV2l0aE9wdGlvbmFsKGFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIApAQCAtMTQ5MywzMiArMTUyNywzMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoRQog
CiBKU1ZhbHVlIGpzVGVzdE9iakNPTlNUX1ZBTFVFXzAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
LCBjb25zdCBJZGVudGlmaWVyJikKIHsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc3RhdGlj
X2Nhc3Q8aW50PigwKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOyAgICByZXR1cm4ganNOdW1i
ZXIoc3RhdGljX2Nhc3Q8aW50PigwKSk7CiB9CiAKIEpTVmFsdWUganNUZXN0T2JqQ09OU1RfVkFM
VUVfMShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImKQogewotICAg
IHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2FzdDxpbnQ+KDEpKTsKKyAgICBVTlVTRURf
UEFSQU0oZXhlYyk7ICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDEpKTsKIH0K
IAogSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHN0YXRp
Y19jYXN0PGludD4oMikpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsgICAgcmV0dXJuIGpzTnVt
YmVyKHN0YXRpY19jYXN0PGludD4oMikpOwogfQogCiBKU1ZhbHVlIGpzVGVzdE9iakNPTlNUX1ZB
TFVFXzQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKIHsKLSAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8aW50Pig0KSk7CisgICAgVU5VU0VE
X1BBUkFNKGV4ZWMpOyAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50Pig0KSk7CiB9
CiAKIEpTVmFsdWUganNUZXN0T2JqQ09OU1RfVkFMVUVfOChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImKQogewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0
aWNfY2FzdDxpbnQ+KDgpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7ICAgIHJldHVybiBqc051
bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDgpKTsKIH0KIAogSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9W
QUxVRV85KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCiB7Ci0g
ICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGludD4oLTEpKTsKKyAgICBVTlVT
RURfUEFSQU0oZXhlYyk7ICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KC0xKSk7
CiB9CiAKIEpTVmFsdWUganNUZXN0T2JqQ09OU1RfVkFMVUVfMTAoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKQEAgLTE1MjgsMjIgKzE1NjIsMjIgQEAgSlNWYWx1
ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8xMChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImKQogCiBKU1ZhbHVlIGpzVGVzdE9iakNPTlNUX1ZBTFVFXzExKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCiB7Ci0gICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsIHN0YXRpY19jYXN0PGludD4oMHhmZmZmZmZmZikpOworICAgIFVOVVNFRF9QQVJB
TShleGVjKTsgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludD4oMHhmZmZmZmZmZikp
OwogfQogCiBKU1ZhbHVlIGpzVGVzdE9iakNPTlNUX1ZBTFVFXzEyKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IHN0YXRpY19jYXN0PGludD4oMHgwMSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsgICAgcmV0
dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludD4oMHgwMSkpOwogfQogCiBKU1ZhbHVlIGpzVGVz
dE9iakNPTlNUX1ZBTFVFXzEzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGludD4oMFgy
MCkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19j
YXN0PGludD4oMFgyMCkpOwogfQogCiBKU1ZhbHVlIGpzVGVzdE9iakNPTlNUX1ZBTFVFXzE0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCiB7Ci0gICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGludD4oMHgxYWJjKSk7CisgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOyAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50PigweDFhYmMpKTsK
IH0KIAogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RPYmoqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggMjE2OGIzZi4uNjAxNGY3YSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTEyNiw2
ICsxMjYsMTAgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW8KIEpTQzo6SlNWYWx1ZSBqc1Rlc3RP
YmpSZWFkT25seUludEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYpOwogSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7
CiBKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitKU0M6OkpTVmFsdWUg
anNUZXN0T2JqU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBK
U0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0T2JqU2hvcnRBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
T2JqVW5zaWduZWRTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwogSlNDOjpKU1Zh
bHVlIGpzVGVzdE9iakludEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpOwogdm9pZCBzZXRKU1Rlc3RPYmpJbnRBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CiBKU0M6OkpTVmFsdWUganNUZXN0
T2JqTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6
OklkZW50aWZpZXImKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0T2JqLmgKaW5kZXggMWFkMjljYi4uZmQ0MDA5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKQEAgLTUyLDYgKzUyLDEwIEBAIGVu
dW0gewogLSAoaW50KXJlYWRPbmx5SW50QXR0cjsKIC0gKE5TU3RyaW5nICopcmVhZE9ubHlTdHJp
bmdBdHRyOwogLSAoRE9NVGVzdE9iaiAqKXJlYWRPbmx5VGVzdE9iakF0dHI7CistIChzaG9ydClz
aG9ydEF0dHI7CistICh2b2lkKXNldFNob3J0QXR0cjooc2hvcnQpbmV3U2hvcnRBdHRyOworLSAo
dW5zaWduZWQgc2hvcnQpdW5zaWduZWRTaG9ydEF0dHI7CistICh2b2lkKXNldFVuc2lnbmVkU2hv
cnRBdHRyOih1bnNpZ25lZCBzaG9ydCluZXdVbnNpZ25lZFNob3J0QXR0cjsKIC0gKGludClpbnRB
dHRyOwogLSAodm9pZClzZXRJbnRBdHRyOihpbnQpbmV3SW50QXR0cjsKIC0gKGxvbmcgbG9uZyls
b25nTG9uZ0F0dHI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RPYmoubW0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPYmoubW0KaW5kZXggNjc4ODA3NS4uNjEyNTk3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQpAQCAtOTIsNiArOTIsMzAgQEAK
ICAgICByZXR1cm4ga2l0KFdURjo6Z2V0UHRyKElNUEwtPnJlYWRPbmx5VGVzdE9iakF0dHIoKSkp
OwogfQogCistIChzaG9ydClzaG9ydEF0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPnNob3J0QXR0cigpOworfQorCistICh2
b2lkKXNldFNob3J0QXR0cjooc2hvcnQpbmV3U2hvcnRBdHRyCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPnNldFNob3J0QXR0cihuZXdTaG9y
dEF0dHIpOworfQorCistICh1bnNpZ25lZCBzaG9ydCl1bnNpZ25lZFNob3J0QXR0cgoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gSU1QTC0+
dW5zaWduZWRTaG9ydEF0dHIoKTsKK30KKworLSAodm9pZClzZXRVbnNpZ25lZFNob3J0QXR0cjoo
dW5zaWduZWQgc2hvcnQpbmV3VW5zaWduZWRTaG9ydEF0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2V0VW5zaWduZWRTaG9ydEF0dHIo
bmV3VW5zaWduZWRTaG9ydEF0dHIpOworfQorCiAtIChpbnQpaW50QXR0cgogewogICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggMjJlZDY4MC4uNTM3NTM0YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTM1LDYgKzM1LDggQEAgbW9kdWxlIHRl
c3QgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgIHJlYWRPbmx5
SW50QXR0cjsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICByZWFk
T25seVN0cmluZ0F0dHI7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBUZXN0T2JqICAgICAg
ICAgcmVhZE9ubHlUZXN0T2JqQXR0cjsKKyAgICAgICAgYXR0cmlidXRlIHNob3J0ICAgICAgICAg
ICAgICAgICAgICBzaG9ydEF0dHI7CisgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCAg
ICAgICAgICAgdW5zaWduZWRTaG9ydEF0dHI7CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nICAgICAg
ICAgICAgICAgICAgICAgaW50QXR0cjsKICAgICAgICAgYXR0cmlidXRlIGxvbmcgbG9uZyAgICAg
ICAgICAgICAgICBsb25nTG9uZ0F0dHI7CiAgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxvbmcgICAgICAgdW5zaWduZWRMb25nTG9uZ0F0dHI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCA0YzkyMWJiLi5lM2Q5MjRhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTc5
LDYgKzc5LDM4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVhZE9ubHlUZXN0T2Jq
QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+CiAgICAgcmV0dXJuIHdyYXBwZXI7
CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2hvcnRBdHRyQXR0ckdldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNob3J0QXR0ci5fZ2V0Iik7CisgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1
cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPnNob3J0QXR0cigpKTsKK30KKworc3RhdGljIHZvaWQg
c2hvcnRBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5zaG9ydEF0dHIuX3NldCIpOworICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgaW50IHYgPSB0b0lu
dDMyKHZhbHVlKTsKKyAgICBpbXAtPnNldFNob3J0QXR0cih2KTsKKyAgICByZXR1cm47Cit9CisK
K3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5zaWduZWRTaG9ydEF0dHJBdHRyR2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoudW5zaWduZWRTaG9ydEF0dHIuX2dldCIp
OworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
CisgICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT51bnNpZ25lZFNob3J0QXR0cigpKTsK
K30KKworc3RhdGljIHZvaWQgdW5zaWduZWRTaG9ydEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnVuc2lnbmVk
U2hvcnRBdHRyLl9zZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOworICAgIGludCB2ID0gdG9VSW50MzIodmFsdWUpOworICAgIGltcC0+
c2V0VW5zaWduZWRTaG9ydEF0dHIodik7CisgICAgcmV0dXJuOworfQorCiBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGludEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9N
LlRlc3RPYmouaW50QXR0ci5fZ2V0Iik7CkBAIC0xMDk0LDYgKzExMjYsMTAgQEAgc3RhdGljIGNv
bnN0IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdE9iakF0dHJzW10gPSB7CiAgICAgeyJyZWFkT25seVN0
cmluZ0F0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OnJlYWRPbmx5U3RyaW5nQXR0ckF0dHJHZXR0ZXIs
IDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpE
RUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAg
Lyogb24gaW5zdGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAncmVhZE9ubHlUZXN0T2JqQXR0
cicgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQogICAgIHsicmVhZE9u
bHlUZXN0T2JqQXR0ciIsIFRlc3RPYmpJbnRlcm5hbDo6cmVhZE9ubHlUZXN0T2JqQXR0ckF0dHJH
ZXR0ZXIsIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+
KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9u
ZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8vIEF0dHJpYnV0ZSAnc2hvcnRBdHRyJyAo
VHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJzaG9ydEF0dHIiLCBUZXN0T2Jq
SW50ZXJuYWw6OnNob3J0QXR0ckF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6c2hvcnRBdHRy
QXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJv
bD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpO
b25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICd1bnNpZ25lZFNo
b3J0QXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQorICAgIHsidW5zaWduZWRT
aG9ydEF0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OnVuc2lnbmVkU2hvcnRBdHRyQXR0ckdldHRlciwg
VGVzdE9iakludGVybmFsOjp1bnNpZ25lZFNob3J0QXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0
YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGlj
X2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2Ug
Ki99LAogICAgIC8vIEF0dHJpYnV0ZSAnaW50QXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0
dHI6ICcnKQogICAgIHsiaW50QXR0ciIsIFRlc3RPYmpJbnRlcm5hbDo6aW50QXR0ckF0dHJHZXR0
ZXIsIFRlc3RPYmpJbnRlcm5hbDo6aW50QXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywg
c3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8
djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAog
ICAgIC8vIEF0dHJpYnV0ZSAnbG9uZ0xvbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0
cjogJycpCg==
</data>
<flag name="commit-queue"
          id="64866"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74315</attachid>
            <date>2010-11-18 16:21:01 -0800</date>
            <delta_ts>2010-11-18 16:46:46 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>49704_3</filename>
            <type>text/plain</type>
            <size>71087</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDNmY2IwNi4uNTBkZmY0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMS0xNyAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTWFrZSBiaW5kaW5nIGNvZGUgZ2VuZXJhdGlvbiBzY3JpcHRzIHN1cHBvcnQg
J3Nob3J0JyB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00OTcwNAorCisgICAgICAgIFVwZGF0ZWQgYmluZGluZyB0ZXN0cy4KKworICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOiBBbHNvIGZpeGVkIGEgc3R5bGUg
aXNzdWUuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2su
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0T2JqLm1tOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2Jq
LmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoK
KwogMjAxMC0xMS0xNyAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggZWEzMjYxNS4uMjVlOGQxOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0yMDc3LDcgKzIwNzcs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgKCRjb25zdGFu
dC0+dHlwZSBlcSAiRE9NU3RyaW5nIikgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChleGVjLCBTdHJpbmcoIiAuICRjb25zdGFu
dC0+dmFsdWUgLiAiKSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOyIpOworICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShleGVjKTtcbiIp
OwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBqc051bWJl
cihzdGF0aWNfY2FzdDxpbnQ+KCIgLiAkY29uc3RhbnQtPnZhbHVlIC4gIikpO1xuIik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CkBAIC0y
Mzc2LDYgKzIzNzYsNyBAQCBteSAlbmF0aXZlVHlwZSA9ICgKICAgICAiYm9vbGVhbiIgPT4gImJv
b2wiLAogICAgICJkb3VibGUiID0+ICJkb3VibGUiLAogICAgICJmbG9hdCIgPT4gImZsb2F0IiwK
KyAgICAic2hvcnQiID0+ICJzaG9ydCIsCiAgICAgImxvbmciID0+ICJpbnQiLAogICAgICJ1bnNp
Z25lZCBsb25nIiA9PiAidW5zaWduZWQiLAogICAgICJ1bnNpZ25lZCBzaG9ydCIgPT4gInVuc2ln
bmVkIHNob3J0IiwKQEAgLTI0NDYsNyArMjQ0Nyw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAg
ICByZXR1cm4gIiR2YWx1ZS50b0Jvb2xlYW4oZXhlYykiIGlmICR0eXBlIGVxICJib29sZWFuIjsK
ICAgICByZXR1cm4gIiR2YWx1ZS50b051bWJlcihleGVjKSIgaWYgJHR5cGUgZXEgImRvdWJsZSI7
CiAgICAgcmV0dXJuICIkdmFsdWUudG9GbG9hdChleGVjKSIgaWYgJHR5cGUgZXEgImZsb2F0IjsK
LSAgICByZXR1cm4gIiR2YWx1ZS50b0ludDMyKGV4ZWMpIiBpZiAkdHlwZSBlcSAibG9uZyI7Cisg
ICAgcmV0dXJuICIkdmFsdWUudG9JbnQzMihleGVjKSIgaWYgJHR5cGUgZXEgImxvbmciIG9yICR0
eXBlIGVxICJzaG9ydCI7CiAgICAgcmV0dXJuICIkdmFsdWUudG9VSW50MzIoZXhlYykiIGlmICR0
eXBlIGVxICJ1bnNpZ25lZCBsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiOwogICAg
IHJldHVybiAic3RhdGljX2Nhc3Q8JHR5cGU+KCR2YWx1ZS50b0ludGVnZXIoZXhlYykpIiBpZiAk
dHlwZSBlcSAibG9uZyBsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyBsb25nIjsKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggMjZjMWRj
Ny4uOWVjNjc3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCkBAIC0yODk5LDcgKzI4OTksNyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgcmV0dXJu
ICIkdmFsdWUtPkJvb2xlYW5WYWx1ZSgpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7CiAgICAgcmV0
dXJuICJzdGF0aWNfY2FzdDwkdHlwZT4oJHZhbHVlLT5OdW1iZXJWYWx1ZSgpKSIgaWYgJHR5cGUg
ZXEgImZsb2F0IiBvciAkdHlwZSBlcSAiZG91YmxlIjsKIAotICAgIHJldHVybiAidG9JbnQzMigk
dmFsdWUpIiBpZiAkdHlwZSBlcSAibG9uZyI7CisgICAgcmV0dXJuICJ0b0ludDMyKCR2YWx1ZSki
IGlmICR0eXBlIGVxICJsb25nIiBvciAkdHlwZSBlcSAic2hvcnQiOwogICAgIHJldHVybiAidG9V
SW50MzIoJHZhbHVlKSIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciIG9yICR0eXBlIGVxICJ1
bnNpZ25lZCBzaG9ydCI7CiAgICAgcmV0dXJuICJ0b0ludDY0KCR2YWx1ZSkiIGlmICR0eXBlIGVx
ICJ1bnNpZ25lZCBsb25nIGxvbmciIG9yICR0eXBlIGVxICJsb25nIGxvbmciOwogICAgIHJldHVy
biAic3RhdGljX2Nhc3Q8UmFuZ2U6OkNvbXBhcmVIb3c+KCR2YWx1ZS0+SW50MzJWYWx1ZSgpKSIg
aWYgJHR5cGUgZXEgIkNvbXBhcmVIb3ciOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCmluZGV4IDU3OTI5NWYuLjlhOGQ5MDkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2Jq
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9i
ai5jcHAKQEAgLTEwMyw2ICsxMDMsMzggQEAgV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpy
ZWFkT25seVRlc3RPYmpBdHRyKCkgY29uc3QKICAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQ
dHIoaW1wbCgpLT5yZWFkT25seVRlc3RPYmpBdHRyKCkpKTsKIH0KIAorc2hvcnQgV2ViRE9NVGVz
dE9iajo6c2hvcnRBdHRyKCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gaW1wbCgpLT5zaG9ydEF0dHIoKTsKK30KKwordm9pZCBXZWJE
T01UZXN0T2JqOjpzZXRTaG9ydEF0dHIoc2hvcnQgbmV3U2hvcnRBdHRyKQoreworICAgIGlmICgh
aW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldFNob3J0QXR0cihuZXdT
aG9ydEF0dHIpOworfQorCit1bnNpZ25lZCBzaG9ydCBXZWJET01UZXN0T2JqOjp1bnNpZ25lZFNo
b3J0QXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIGltcGwoKS0+dW5zaWduZWRTaG9ydEF0dHIoKTsKK30KKwordm9pZCBXZWJE
T01UZXN0T2JqOjpzZXRVbnNpZ25lZFNob3J0QXR0cih1bnNpZ25lZCBzaG9ydCBuZXdVbnNpZ25l
ZFNob3J0QXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW1wbCgpLT5zZXRVbnNpZ25lZFNob3J0QXR0cihuZXdVbnNpZ25lZFNob3J0QXR0cik7Cit9CisK
IGludCBXZWJET01UZXN0T2JqOjppbnRBdHRyKCkgY29uc3QKIHsKICAgICBpZiAoIWltcGwoKSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5o
CmluZGV4IGNkNmNhYWEuLmYyOWI3ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaApAQCAtNjAsNiArNjAsMTAgQEAgcHVibGljOgog
ICAgIGludCByZWFkT25seUludEF0dHIoKSBjb25zdDsKICAgICBXZWJET01TdHJpbmcgcmVhZE9u
bHlTdHJpbmdBdHRyKCkgY29uc3Q7CiAgICAgV2ViRE9NVGVzdE9iaiByZWFkT25seVRlc3RPYmpB
dHRyKCkgY29uc3Q7CisgICAgc2hvcnQgc2hvcnRBdHRyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRT
aG9ydEF0dHIoc2hvcnQpOworICAgIHVuc2lnbmVkIHNob3J0IHVuc2lnbmVkU2hvcnRBdHRyKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRVbnNpZ25lZFNob3J0QXR0cih1bnNpZ25lZCBzaG9ydCk7CiAg
ICAgaW50IGludEF0dHIoKSBjb25zdDsKICAgICB2b2lkIHNldEludEF0dHIoaW50KTsKICAgICBs
b25nIGxvbmcgbG9uZ0xvbmdBdHRyKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5j
cHAKaW5kZXggZmJlNTM4ZC4uMTlmZjE2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNw
cApAQCAtNTgsOCArNTgsOCBAQCBncG9pbnRlciBraXQoV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBv
YmopCiBnYm9vbGVhbgogd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfY2xh
c3MxcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01DbGFzczEqIGNs
YXNzMXBhcmFtKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjbGFzczFwYXJh
bSwgMCk7CiAgICAgV2ViQ29yZTo6Q2xhc3MxICogY29udmVydGVkX2NsYXNzMXBhcmFtID0gTlVM
TDsKQEAgLTc0LDggKzc0LDggQEAgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dp
dGhfY2xhc3MxcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLAogZ2Jvb2xlYW4KIHdl
YmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2NsYXNzMnBhcmFtKFdlYktpdERP
TVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NQ2xhc3MyKiBjbGFzczJwYXJhbSwgY29uc3Qg
Z2NoYXIqIHN0cl9hcmcpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNsYXNz
MnBhcmFtLCAwKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKQEAgLTky
LDggKzkyLDggQEAgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfY2xhc3My
cGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLAogZ2xvbmcKIHdlYmtpdF9kb21fdGVz
dF9jYWxsYmFja19jYWxsYmFja193aXRoX25vbl9ib29sX3JldHVybl90eXBlKFdlYktpdERPTVRl
c3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NQ2xhc3MzKiBjbGFzczNwYXJhbSkKIHsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwogICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY2xhc3MzcGFyYW0sIDApOwogICAgIFdlYkNvcmU6
OkNsYXNzMyAqIGNvbnZlcnRlZF9jbGFzczNwYXJhbSA9IE5VTEw7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IGFmOTMwMGQuLjc5
NTZlMzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwCkBAIC01Miw4ICs1Miw4IEBAIGdwb2ludGVyIGtpdChXZWJDb3JlOjpUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciogb2JqKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1
ZXJ5X2xpc3RfbGlzdGVuZXJfbWV0aG9kKFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyKiBzZWxmLCBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBsaXN0ZW5lcikKIHsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CiAgICAgV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwobGlzdGVuZXIpOwogICAgIFdlYkNv
cmU6Ok1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgKiBjb252ZXJ0ZWRfbGlzdGVuZXIgPSBOVUxMOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5jcHAKaW5kZXggYzljMTBkNy4uMWJmOTk4MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RP
YmouY3BwCkBAIC01NSw4ICs1NSw4IEBAIGdwb2ludGVyIGtpdChXZWJDb3JlOjpUZXN0T2JqKiBv
YmopCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwogICAgIGl0ZW0tPnZvaWRNZXRob2QoKTsKIH0KQEAgLTY0LDggKzY0LDggQEAgd2Vi
a2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9p
ZAogd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERP
TVRlc3RPYmoqIG9ial9hcmcpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyX2FyZyk7CiAgICAgZ19y
ZXR1cm5faWZfZmFpbChvYmpfYXJnKTsKQEAgLTgxLDggKzgxLDggQEAgd2Via2l0X2RvbV90ZXN0
X29ial92b2lkX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcg
aW50X2FyZywKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2ludF9tZXRob2QoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdsb25nIHJlcyA9IGl0ZW0tPmludE1ldGhvZCgpOwog
ICAgIHJldHVybiByZXM7CkBAIC05MSw4ICs5MSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfaW50
X21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9v
YmpfaW50X21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50
X2FyZywgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcpCiB7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKICAgICBnX3JldHVybl92
YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKQEAgLTEwOSw4ICsxMDksOCBAQCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2ludF9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25n
IGludF9hcmcsCiBXZWJLaXRET01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0
aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+b2JqTWV0aG9kKCkpOwogICAgIFdl
YktpdERPTVRlc3RPYmoqIHJlcyA9IHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RPYmoqPihXZWJL
aXQ6OmtpdChnX3Jlcy5nZXQoKSkpOwpAQCAtMTIwLDggKzEyMCw4IEBAIHdlYmtpdF9kb21fdGVz
dF9vYmpfb2JqX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogV2ViS2l0RE9NVGVzdE9i
aioKIHdlYmtpdF9kb21fdGVzdF9vYmpfb2JqX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERP
TVRlc3RPYmoqIG9ial9hcmcpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJn
LCAwKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKQEAgLTEzOSw4ICsx
MzksOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsCiBXZWJLaXRET01UZXN0T2JqKgogd2Via2l0
X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1aXJlc19hbGxfYXJncyhXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2Fy
ZykKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDApOwogICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKG9ial9hcmcsIDApOwpAQCAtMTU4LDggKzE1OCw4IEBAIHdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3MoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgY29uc3QKIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcsIEdF
cnJvciAqKmVycm9yKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqX2FyZywgMCk7CkBAIC0xODMsOCArMTgzLDgg
QEAgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1aXJlc19hbGxfYXJnc19hbmRf
dGhyb3dzKFdlYktpdERPTVRlc3RPYmoqIHMKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2Vy
aWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVk
U2NyaXB0VmFsdWUqIHNlcmlhbGl6ZWRfYXJnKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlcmlhbGl6
ZWRfYXJnKTsKICAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBjb252ZXJ0ZWRf
c2VyaWFsaXplZF9hcmcgPSBOVUxMOwpAQCAtMTk4LDggKzE5OCw4IEBAIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01T
ZXJpYWxpemVkCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXkoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NSURCS2V5KiBrZXkpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoa2V5
KTsKICAgICBXZWJDb3JlOjpJREJLZXkgKiBjb252ZXJ0ZWRfa2V5ID0gTlVMTDsKQEAgLTIxMyw4
ICsyMTMsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXkoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NSURCS2V5KiBrZXkpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJv
cikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaXRlbS0+bWV0aG9kV2l0
aEV4Y2VwdGlvbihlYyk7CkBAIC0yMzQsOCArMjM0LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJy
b3IKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9keW5hbWljX2ZyYW1lKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPndpdGhEeW5hbWljRnJhbWUoKTsKIH0KQEAgLTI0Myw4
ICsyNDMsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZHluYW1pY19mcmFtZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2R5bmFtaWNf
ZnJhbWVfYW5kX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnKQogewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9p
Zl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBp
dGVtLT53aXRoRHluYW1pY0ZyYW1lQW5kQXJnKGludF9hcmcpOwogfQpAQCAtMjUyLDggKzI1Miw4
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9keW5hbWljX2ZyYW1lX2FuZF9hcmcoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50CiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dp
dGhfZHluYW1pY19mcmFtZV9hbmRfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIGludF9hcmcsIGdsb25nIG9wdGlvbmFsX2FyZykKIHsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+d2l0aER5bmFtaWNG
cmFtZUFuZE9wdGlvbmFsQXJnKGludF9hcmcsIG9wdGlvbmFsX2FyZyk7CiB9CkBAIC0yNjEsOCAr
MjYxLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2R5bmFtaWNfZnJhbWVfYW5kX29wdGlv
bmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLAogdm9pZAogd2Via2l0X2RvbV90ZXN0X29i
al93aXRoX2R5bmFtaWNfZnJhbWVfYW5kX3VzZXJfZ2VzdHVyZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyBpbnRfYXJnLCBnYm9vbGVhbiBpc1VzZXJHZXN0dXJlKQogewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT53aXRo
RHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmUoaW50X2FyZywgZmFsc2UpOwogfQpAQCAtMjcwLDgg
KzI3MCw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9keW5hbWljX2ZyYW1lX2FuZF91c2Vy
X2dlc3R1cmUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9v
Ympfd2l0aF9keW5hbWljX2ZyYW1lX2FuZF91c2VyX2dlc3R1cmVfYXNhZChXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBnbG9uZyBvcHRpb25hbF9hcmcsIGdib29sZWFuIGlz
VXNlckdlc3R1cmUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwogICAgIGl0ZW0tPndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQo
aW50X2FyZywgb3B0aW9uYWxfYXJnLCBmYWxzZSk7CiB9CkBAIC0yNzksOCArMjc5LDggQEAgd2Vi
a2l0X2RvbV90ZXN0X29ial93aXRoX2R5bmFtaWNfZnJhbWVfYW5kX3VzZXJfZ2VzdHVyZV9hc2Fk
KFdlYktpdERPTVRlc3RPYmoqIHMKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3Jp
cHRfc3RhdGVfdm9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT53aXRoU2NyaXB0
U3RhdGVWb2lkKCk7CiB9CkBAIC0yODgsOCArMjg4LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial93
aXRoX3NjcmlwdF9zdGF0ZV92b2lkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiBXZWJLaXRET01U
ZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmooV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4g
Z19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0U3RhdGVPYmooKSk7CiAgICAgV2Vi
S2l0RE9NVGVzdE9iaiogcmVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE9iaio+KFdlYktp
dDo6a2l0KGdfcmVzLmdldCgpKSk7CkBAIC0yOTksOCArMjk5LDggQEAgd2Via2l0X2RvbV90ZXN0
X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmooV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZvaWQK
IHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZF9leGNlcHRpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCiB7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIGl0ZW0tPndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oZWMp
OwpAQCAtMzE0LDggKzMxNCw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3Rh
dGVfdm9pZF9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0VyCiBXZWJLaXRET01U
ZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0
aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQogewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAg
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0
T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlv
bihlYykpOwpAQCAtMzMxLDggKzMzMSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3Jp
cHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyCiB2b2lk
CiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0KFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiB9CkBAIC0zNDAsOCArMzQwLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2Rv
bV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2xvbmcgb3B0KQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKICAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxBcmcob3B0KTsKIH0KQEAg
LTM0OSw4ICszNDksOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFs
X2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBvcHQpCiB2b2lkCiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX29wdGlvbmFsX2FyZyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBub25fb3B0LCBnbG9uZyBvcHQpCiB7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0t
Pm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKG5vbl9vcHQsIG9wdCk7CiB9
CkBAIC0zNTgsOCArMzU4LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9ub25f
b3B0aW9uYWxfYXJnX2FuZF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE8KIHZvaWQKIHdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2FyZ19hbmRfdHdvX29wdGlv
bmFsX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgbm9uX29wdCwgZ2xvbmcgb3B0
MSwgZ2xvbmcgb3B0MikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0
aW9uYWxBcmdzKG5vbl9vcHQsIG9wdDEsIG9wdDIpOwogfQpAQCAtMzY3LDggKzM2Nyw4IEBAIHdl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2FyZ19hbmRfdHdvX29w
dGlvbmFsX2FyZ3MoV2ViS2l0RE9NCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21l
dGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT5jbGFzc01ldGhvZCgpOwogfQpA
QCAtMzc2LDggKzM3Niw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCiBnbG9uZwogd2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19tZXRo
b2Rfd2l0aF9vcHRpb25hbChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBhcmcpCiB7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
ICAgICBnbG9uZyByZXMgPSBpdGVtLT5jbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcpOwogICAg
IHJldHVybiByZXM7CkBAIC0zODYsOCArMzg2LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9jbGFz
c19tZXRob2Rfd2l0aF9vcHRpb25hbChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBhcmcK
IGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfaW50X2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdsb25nIHJlcyA9IGl0ZW0tPnJlYWRPbmx5SW50
QXR0cigpOwogICAgIHJldHVybiByZXM7CkBAIC0zOTYsOCArMzk2LDggQEAgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcmVhZF9vbmx5X2ludF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiBn
Y2hhcioKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0cihXZWJL
aXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+cmVhZE9ubHlTdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiByZXM7CkBAIC00
MDYsMTkgKzQwNiw1NyBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfc3RyaW5n
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnJlYWRPbmx5VGVzdE9iakF0dHIoKSk7CiAgICAgV2ViS2l0RE9NVGVz
dE9iaiogcmVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE9iaio+KFdlYktpdDo6a2l0KGdf
cmVzLmdldCgpKSk7CiAgICAgcmV0dXJuIHJlczsKIH0KIAorZ3Nob3J0Cit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdzaG9ydCByZXMgPSBpdGVtLT5zaG9ydEF0dHIoKTsKKyAgICByZXR1cm4g
cmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zaG9ydF9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdzaG9ydCB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5z
ZXRTaG9ydEF0dHIodmFsdWUpOworfQorCitndXNob3J0Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGd1c2hvcnQgcmVzID0gaXRlbS0+dW5zaWduZWRTaG9ydEF0dHIoKTsKKyAg
ICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF91bnNpZ25l
ZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1c2hvcnQgdmFsdWUpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0VW5zaWduZWRTaG9ydEF0dHIodmFsdWUpOworfQorCiBnbG9u
Zwogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwogICAgIGdsb25nIHJlcyA9IGl0ZW0tPmludEF0dHIoKTsKICAgICByZXR1cm4gcmVz
OwpAQCAtNDI3LDggKzQ2NSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ludF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pbnRf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKIHsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+c2V0SW50
QXR0cih2YWx1ZSk7CiB9CkBAIC00MzYsOCArNDc0LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCiBnaW50NjQK
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKICAgICBnaW50NjQgcmVzID0gaXRlbS0+bG9uZ0xvbmdBdHRyKCk7CiAgICAg
cmV0dXJuIHJlczsKQEAgLTQ0Niw4ICs0ODQsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9s
b25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2ludDY0
IHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKICAgICBpdGVtLT5zZXRMb25nTG9uZ0F0dHIodmFsdWUpOwogfQpAQCAtNDU1LDggKzQ5
Myw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdpbnQ2NCB2YWx1ZSkKIGd1aW50NjQKIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
ICAgICBndWludDY0IHJlcyA9IGl0ZW0tPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCk7CiAgICAgcmV0
dXJuIHJlczsKQEAgLTQ2NSw4ICs1MDMsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNp
Z25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ3VpbnQ2NCB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIo
dmFsdWUpOwogfQpAQCAtNDc0LDggKzUxMiw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vu
c2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1aW50NjQKIGdj
aGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwogICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnN0cmluZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlczsKQEAgLTQ4NCw4ICs1MjIsOCBAQCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQog
dm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
ICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOwpAQCAtNDk1LDggKzUzMyw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmlu
Z19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKIFdlYktp
dERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90ZXN0X29ial9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+
IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+dGVzdE9iakF0dHIoKSk7CiAgICAgV2ViS2l0RE9N
VGVzdE9iaiogcmVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE9iaio+KFdlYktpdDo6a2l0
KGdfcmVzLmdldCgpKSk7CkBAIC01MDYsOCArNTQ0LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01UZXN0T2JqKiB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CiAgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CkBAIC01MjEsOCArNTU5LDgg
QEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKgogV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAg
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0t
PnhtbE9iakF0dHIoKSk7CiAgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gc3RhdGljX2Nhc3Q8
V2ViS2l0RE9NVGVzdE9iaio+KFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKSk7CkBAIC01MzIsOCAr
NTcwLDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF94bWxfb2JqX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpCiB7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFs
dWUgPSBOVUxMOwpAQCAtNTQ3LDggKzU4NSw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3ht
bF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2CiBn
Ym9vbGVhbgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3JlYXRlKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKICAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5pc0NyZWF0ZSgpOwogICAgIHJl
dHVybiByZXM7CkBAIC01NTcsOCArNTk1LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3Jl
YXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCiB7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0ZW0t
PnNldENyZWF0ZSh2YWx1ZSk7CiB9CkBAIC01NjYsOCArNjA0LDggQEAgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfY3JlYXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQog
Z2NoYXIqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0
cmluZ2F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlczsKQEAgLTU3Niw4ICs2MTQsOCBAQCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCiB7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOwogICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CkBAIC01ODcsOCArNjI1LDggQEAgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGNvbnN0IGdjaGEKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
aW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVz
ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWRpbnRlZ3JhbGF0dHJBdHRyKTsKICAgICByZXR1cm4gcmVzOwpAQCAtNTk3LDggKzYzNSw4IEBA
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRf
aW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKIHsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAg
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRl
bS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRl
Z3JhbGF0dHJBdHRyLCB2YWx1ZSk7CiB9CkBAIC02MDYsOCArNjQ0LDggQEAgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2xvbmcgdmEKIGdib29sZWFuCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
Ym9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnYm9vbGVhbiBy
ZXMgPSBpdGVtLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29s
ZWFuYXR0ckF0dHIpOwogICAgIHJldHVybiByZXM7CkBAIC02MTYsOCArNjU0LDggQEAgd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2Jvb2xlYW5f
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKIHsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+c2V0
Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRy
QXR0ciwgdmFsdWUpOwogfQpAQCAtNjI1LDggKzY2Myw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xl
YW4KIGdjaGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3VybF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWR1cmxhdHRyQXR0cikpOwogICAgIHJldHVybiByZXM7CkBAIC02MzUsOCArNjczLDggQEAgd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdXJsX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQogewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOwpAQCAtNjQ2LDggKzY4NCw4IEBAIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3JlZmxlY3RlZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25z
dCBnY2hhcioKIGdjaGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX25vbl9l
bXB0eV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2NoYXIqIHJl
cyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRub25lbXB0eXVybGF0dHJBdHRyKSk7CiAgICAgcmV0
dXJuIHJlczsKQEAgLTY1Niw4ICs2OTQsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZs
ZWN0ZWRfbm9uX2VtcHR5X3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfbm9uX2VtcHR5X3VybF9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKQEAgLTY2Nyw4ICs3MDUsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF9yZWZsZWN0ZWRfbm9uX2VtcHR5X3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbgogZ2NoYXIqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3Rv
bUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwogICAgIHJldHVybiByZXM7CkBAIC02NzcsOCArNzE1
LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0
ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
ICAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRf
dmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwpAQCAtNjg4LDggKzcyNiw4IEBA
IHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhCiBnbG9uZwogd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
cmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKICAgICBnbG9uZyByZXMgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKTsKICAgICByZXR1cm4gcmVz
OwpAQCAtNjk4LDggKzczNiw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9j
dXN0b21faW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogdm9pZAogd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCB2YWx1
ZSk7CiB9CkBAIC03MDcsOCArNzQ1LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVj
dGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGcKIGdib29s
ZWFuCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+
aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRy
QXR0cik7CiAgICAgcmV0dXJuIHJlczsKQEAgLTcxNyw4ICs3NTUsOCBAQCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9i
b29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCiB7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGl0
ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50
Qm9vbGVhbkF0dHJBdHRyLCB2YWx1ZSk7CiB9CkBAIC03MjYsOCArNzY0LDggQEAgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2IKIGdjaGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVk
X2N1c3RvbV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2NoYXIq
IHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlczsK
QEAgLTczNiw4ICs3NzQsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3Vz
dG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB2b2lkCiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CiAgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKQEAgLTc0Nyw4ICs3ODUsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRf
Y3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0CiBnY2hhcioKIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fbm9uX2VtcHR5X3VybF9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnY2hhciogcmVzID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5nZXROb25FbXB0eVVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnROb25FbXB0eVVSTEF0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlczsK
QEAgLTc1Nyw4ICs3OTUsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3Vz
dG9tX25vbl9lbXB0eV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZQogdm9pZAogd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9ub25fZW1wdHlfdXJsX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQogewotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOwpAQCAtNzY4LDggKzgwNiw4IEBAIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3JlZmxlY3RlZF9jdXN0b21fbm9uX2VtcHR5X3VybF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlCiBnbG9uZwogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9l
eGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCiB7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBnbG9uZyByZXMgPSBpdGVtLT5h
dHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYyk7CkBAIC03ODQsOCArODIyLDggQEAgd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgR0Vycm8KIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9n
ZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJy
b3IgKiplcnJvcikKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CiAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaXRlbS0+
c2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24odmFsdWUsIGVjKTsKQEAgLTc5OSw4ICs4MzcsOCBA
QCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZwogZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
ICAgICBnbG9uZyByZXMgPSBpdGVtLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpOwogICAgIHJl
dHVybiByZXM7CkBAIC04MDksOCArODQ3LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0
cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHZvaWQKIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKIHsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaXRlbS0+c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24odmFsdWUsIGVjKTsKQEAgLTgyNCw4ICs4NjIsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9u
ZwogZ2NoYXIqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRl
cl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCiB7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBnY2hhciogcmVzID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykp
OwpAQCAtODM1LDggKzg3Myw4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRy
X3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmCiB2b2lkCiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikK
IHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3Zh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKQEAgLTg1Miw4ICs4OTAsOCBAQCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24o
V2ViS2l0RE9NVGVzdE9iaiogc2VsZgogZ2NoYXIqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9z
dHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
IHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwogICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnN0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXM7CkBAIC04NjIsOCArOTAw
LDggQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhj
ZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvciAqKmVycm9yKQogewotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOwpAQCAtODc5LDg3ICs5MTcsOTMgQEAgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYKIGdjaGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc2NyaXB0X3N0cmluZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnY2hhciogcmVzID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5zY3JpcHRTdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiByZXM7
CiB9CiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9jb25kaXRpb25hbF9hdHRyMShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRy
MSgpOwogICAgIHJldHVybiByZXM7Ci19CisjZWxzZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
bG9uZz4oMCk7CiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCit9CiAKLSNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFs
X2F0dHIxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQogewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkK
ICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKICAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIxKHZhbHVlKTsKLX0KICNlbmRp
ZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KK30KIAotI2lmIEVOQUJMRShDb25kaXRpb24xKSAm
JiBFTkFCTEUoQ29uZGl0aW9uMikKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25k
aXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5B
QkxFKENvbmRpdGlvbjIpCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNv
bmRpdGlvbmFsQXR0cjIoKTsKICAgICByZXR1cm4gcmVzOwotfQorI2Vsc2UKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Z2xvbmc+KDApOwogI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBF
TkFCTEUoQ29uZGl0aW9uMikgKi8KK30KIAotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFC
TEUoQ29uZGl0aW9uMikKIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFs
X2F0dHIyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQogewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
JiYgRU5BQkxFKENvbmRpdGlvbjIpCiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxB
dHRyMih2YWx1ZSk7Ci19CiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShD
b25kaXRpb24yKSAqLworfQogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKQogZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIz
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRy
MygpOwogICAgIHJldHVybiByZXM7Ci19CisjZWxzZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
bG9uZz4oMCk7CiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKSAqLworfQogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24y
KQogdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjMoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCiB7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKICAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIzKHZhbHVlKTsK
LX0KICNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICov
Cit9CiAKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9kZXNjcmlwdGlvbihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2xvbmcgcmVzID0gaXRlbS0+ZGVzY3JpcHRpb24o
KTsKICAgICByZXR1cm4gcmVzOwpAQCAtOTY4LDggKzEwMTIsOCBAQCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9kZXNjcmlwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogZ2xvbmcKIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2lkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBn
bG9uZyByZXMgPSBpdGVtLT5pZCgpOwogICAgIHJldHVybiByZXM7CkBAIC05NzgsOCArMTAyMiw4
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2lkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB2
b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBn
bG9uZyB2YWx1ZSkKIHsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CiAgICAgaXRlbS0+c2V0SWQodmFsdWUpOwogfQpAQCAtOTg3LDggKzEwMzEsOCBA
QCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9u
ZyB2YWx1ZSkKIGdjaGFyKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQogewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+aGFzaCgpKTsKICAgICByZXR1cm4gcmVzOwpAQCAtMTAxNSw2ICsxMDU5LDggQEAgZW51
bSB7CiAgICAgUFJPUF9SRUFEX09OTFlfSU5UX0FUVFIsCiAgICAgUFJPUF9SRUFEX09OTFlfU1RS
SU5HX0FUVFIsCiAgICAgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUiwKKyAgICBQUk9QX1NI
T1JUX0FUVFIsCisgICAgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSLAogICAgIFBST1BfSU5UX0FU
VFIsCiAgICAgUFJPUF9MT05HX0xPTkdfQVRUUiwKICAgICBQUk9QX1VOU0lHTkVEX0xPTkdfTE9O
R19BVFRSLApAQCAtMTA3NSw2ICsxMTIxLDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uCiAg
ICAgV2ViS2l0RE9NVGVzdE9iaiogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9PQkoob2JqZWN0KTsK
ICAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb3JlU2VsZiA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAg
ICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfVU5TSUdORURfU0hPUlRfQVRUUjoK
KyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRVbnNpZ25lZFNob3J0QXR0cigoZ192YWx1ZV9n
ZXRfdXNob3J0KHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBQUk9Q
X0lOVF9BVFRSOgogICAgIHsKICAgICAgICAgY29yZVNlbGYtPnNldEludEF0dHIoKGdfdmFsdWVf
Z2V0X2xvbmcodmFsdWUpKSk7CkBAIC0xMjI0LDYgKzEyNzUsMTYgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
X2lkLCBHVmEKICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChw
dHIuZ2V0KCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgUFJPUF9TSE9SVF9B
VFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBjb3JlU2VsZi0+c2hv
cnRBdHRyKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1VOU0lHTkVE
X1NIT1JUX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBjb3Jl
U2VsZi0+dW5zaWduZWRTaG9ydEF0dHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICBj
YXNlIFBST1BfSU5UX0FUVFI6CiAgICAgewogICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVl
LCBjb3JlU2VsZi0+aW50QXR0cigpKTsKQEAgLTE0MjAsNiArMTQ4MSwyNCBAQCBHX01BWExPTkcs
IC8qIG1heCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fVEVTVF9PQkosIC8qIGdvYmplY3QgdHlwZSAq
LwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfU0hPUlRfQVRUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19pbnQoInNob3J0LWF0dHIiLCAvKiBuYW1lICovCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9z
aG9ydC1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdzaG9y
dCBUZXN0T2JqLnNob3J0LWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0
cmEgZG9jIHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19NSU5JTlQsIC8qIG1pbiAqLworR19NQVhJTlQsIC8q
IG1heCAqLworMCwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Cisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1VOU0lHTkVEX1NIT1JUX0FUVFIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgidW5z
aWduZWQtc2hvcnQtYXR0ciIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3Vuc2lnbmVkLXNob3J0
LWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ3VzaG9ydCBU
ZXN0T2JqLnVuc2lnbmVkLXNob3J0LWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNv
bWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogbWluICovCitHX01BWFVJTlQxNiwg
LyogbWF4ICovCiswLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfSU5UX0FUVFIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygiaW50LWF0dHIiLCAv
KiBuYW1lICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXN0X29ial9pbnQtYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICov
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5oCmluZGV4IDhlZThmMDQuLjJlZWJkYjEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5o
CkBAIC0xMzksNiArMTM5LDE4IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9z
dHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKIFdFQktJVF9BUEkgV2ViS2l0RE9N
VGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV90ZXN0X29ial9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwogCitXRUJLSVRfQVBJIGdzaG9ydAord2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKKworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zaG9ydF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdzaG9ydCB2YWx1ZSk7CisKK1dFQktJVF9BUEkgZ3VzaG9ydAord2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF91bnNp
Z25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1c2hvcnQgdmFsdWUpOwor
CiBXRUJLSVRfQVBJIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pbnRfYXR0cihXZWJL
aXRET01UZXN0T2JqKiBzZWxmKTsKIApAQCAtMjY4LDM1ICsyODAsMjMgQEAgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYKIFdFQktJVF9BUEkgZ2NoYXIqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9z
Y3JpcHRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7CiAKLSNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkKIFdFQktJVF9BUEkgZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2Nv
bmRpdGlvbmFsX2F0dHIxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotI2VuZGlmIC8qIEVOQUJM
RShDb25kaXRpb24xKSAqLwogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCiBXRUJLSVRfQVBJIHZv
aWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIxKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkg
Ki8KIAotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKIFdFQktJ
VF9BUEkgZ2xvbmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBF
TkFCTEUoQ29uZGl0aW9uMikgKi8KIAotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUo
Q29uZGl0aW9uMikKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29u
ZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwotI2Vu
ZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KIAotI2lm
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIFdFQktJVF9BUEkgZ2xv
bmcKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIzKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikgKi8KIAotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxf
YXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwotI2VuZGlmIC8qIEVO
QUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KIAogV0VCS0lUX0FQSSBn
bG9uZwogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9NVGVzdE9i
aiogc2VsZik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAppbmRleCA3ZTA2MDY4Li45ODIwZmFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTU0LDExICs1NCwxMyBAQCBBU1NFUlRfQ0xB
U1NfRklUU19JTl9DRUxMKEpTVGVzdE9iaik7CiAjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5l
cmF0b3IpCiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialRh
YmxlVmFsdWVzWzM0XSA9CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqVGFi
bGVWYWx1ZXNbMzZdID0KIHsKICAgICB7ICJyZWFkT25seUludEF0dHIiLCBEb250RGVsZXRlIHwg
UmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqUmVhZE9ubHlJbnRBdHRyKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9S
KDApIH0sCiAgICAgeyAicmVhZE9ubHlTdHJpbmdBdHRyIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9ialJlYWRPbmx5U3RyaW5nQXR0ciksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9
LAogICAgIHsgInJlYWRPbmx5VGVzdE9iakF0dHIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2Jq
UmVhZE9ubHlUZXN0T2JqQXR0ciksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAor
ICAgIHsgInNob3J0QXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqU2hvcnRBdHRyKSwgKGludHB0cl90KXNl
dEpTVGVzdE9ialNob3J0QXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJ1bnNpZ25l
ZFNob3J0QXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIpLCAoaW50cHRyX3Qp
c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAg
eyAiaW50QXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqSW50QXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RP
YmpJbnRBdHRyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImxvbmdMb25nQXR0ciIsIERv
bnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqTG9uZ0xvbmdBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9iakxvbmdMb25n
QXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJ1bnNpZ25lZExvbmdMb25nQXR0ciIs
IERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0
T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCkBAIC05OSw3ICsx
MDEsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqVGFibGVWYWx1ZXNb
MzRdID0KIH07CiAKICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKLXN0YXRpYyBKU0NfQ09OU1RfSEFT
SFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpUYWJsZSA9IHsgMTMyLCAxMjcsIEpTVGVzdE9ialRh
YmxlVmFsdWVzLCAwIH07CitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNU
ZXN0T2JqVGFibGUgPSB7IDEzMywgMTI3LCBKU1Rlc3RPYmpUYWJsZVZhbHVlcywgMCB9OwogLyog
SGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KICNpZiBFTkFCTEUoSklUKQogI2RlZmluZSBU
SFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgpAQCAtMjgyLDcgKzI4NCw3IEBA
IEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlJbnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAt
PnJlYWRPbmx5SW50QXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+
cmVhZE9ubHlJbnRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMwNCwxMiAr
MzA2LDMwIEBAIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNs
b3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNF
RF9QQVJBTShleGVjKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+
c2hvcnRBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUganNUZXN0T2Jq
VW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25z
dCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+dW5zaWduZWRTaG9y
dEF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNWYWx1ZSBqc1Rlc3RPYmpJbnRB
dHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYp
CiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4o
YXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgVGVzdE9i
aiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmludEF0dHIoKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmludEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApAQCAtMzE4LDcgKzMzOCw3IEBAIEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRy
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllCiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
c2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgVGVzdE9iaiogaW1wID0g
c3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmxvbmdMb25nQXR0cigpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+bG9uZ0xvbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTMyNyw3ICszNDcsNyBAQCBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9u
Z0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSQogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+dW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzgxLDcgKzQwMSw3IEBAIEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90
QmFzZSwgY29uc3QKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAg
ICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+Z2V0SW50ZWdyYWxB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmdldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cikpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTQyNiw3ICs0NDYsNyBAQCBKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJh
c2UsCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4o
YXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgVGVzdE9i
aiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmdldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cikpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ2Miw3ICs0ODIsNyBAQCBKU1ZhbHVlIGpzVGVzdE9iakF0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwg
Y29ucwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0g
ICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+YXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1w
LT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ3Miw3ICs0OTIsNyBAQCBKU1ZhbHVl
IGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBzbG90QmFzZSwgY29ucwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0
PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5hdHRyV2l0
aFNldHRlckV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+
YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
NTE2LDcgKzUzNiw3IEBAIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsK
ICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8
VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihleGVjLCBpbXAtPmNvbmRpdGlvbmFsQXR0cjEoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXAtPmNvbmRpdGlvbmFsQXR0cjEoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KICNlbmRpZgpAQCAtNTI3LDcgKzU0Nyw3IEBAIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmpl
Y3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmNvbmRpdGlvbmFsQXR0cjIoKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmNvbmRpdGlvbmFsQXR0cjIoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KICNlbmRpZgpAQCAtNTM4LDcgKzU1OCw3IEBAIEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNU
ZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAg
ICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmNvbmRpdGlvbmFs
QXR0cjMoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmNvbmRpdGlvbmFs
QXR0cjMoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbmRpZgpAQCAtNTQ4LDcgKzU2OCw3
IEBAIEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
c3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CiAgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBp
bXAtPmRlc2NyaXB0aW9uKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5k
ZXNjcmlwdGlvbigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01NTcsNyArNTc3LDcg
QEAgSlNWYWx1ZSBqc1Rlc3RPYmpJZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImKQogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19j
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOwogICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5pZCgp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+aWQoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtNTgwLDYgKzYwMCwyMCBAQCB2b2lkIEpTVGVzdE9iajo6cHV0KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bAogICAgIGxvb2t1cFB1dDxKU1Rlc3RPYmosIEJhc2U+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsICZKU1Rlc3RPYmpUYWJsZSwgdGhpcywgc2xvdCk7CiB9CiAKK3ZvaWQgc2V0SlNUZXN0T2Jq
U2hvcnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0
T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9i
aio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaW1wLT5zZXRTaG9ydEF0dHIodmFsdWUudG9J
bnQzMihleGVjKSk7Cit9CisKK3ZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2Jq
ZWN0KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKKyAgICBpbXAtPnNldFVuc2lnbmVkU2hvcnRBdHRyKHZhbHVlLnRvVUludDMy
KGV4ZWMpKTsKK30KKwogdm9pZCBzZXRKU1Rlc3RPYmpJbnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CkBAIC04MjEs
NyArODU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkludE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMKICAgICBUZXN0T2JqKiBpbXAgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKIAogCi0gICAgSlNDOjpK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+aW50TWV0aG9kKCkpOworICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmludE1ldGhvZCgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTg0Myw3ICs4NzcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW50TWV0
aG9kV2l0aEFyZ3MoRXhlY1N0YQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAKLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywg
aW1wLT5pbnRNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJnKSk7CisgICAgSlND
OjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+aW50TWV0aG9kV2l0aEFyZ3MoaW50QXJn
LCBzdHJBcmcsIG9iakFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
IH0KIApAQCAtMTQ3Niw3ICsxNTEwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKEUKICAgICBp
bnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwogICAgIGlmIChhcmdzQ291bnQg
PD0gMCkgewogCi0gICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBp
bXAtPmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKCkpOworICAgICAgICBKU0M6OkpTVmFsdWUgcmVz
dWx0ID0ganNOdW1iZXIoaW1wLT5jbGFzc01ldGhvZFdpdGhPcHRpb25hbCgpKTsKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIApAQCAtMTQ4NSw3ICsxNTE5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKEUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIGltcC0+Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoYXJnKSk7CisgICAgSlNDOjpK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoYXJn
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC0xNDkzLDMy
ICsxNTI3LDM4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbChFCiAKIEpTVmFsdWUganNUZXN0T2Jq
Q09OU1RfVkFMVUVfMChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
KQogewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2FzdDxpbnQ+KDApKTsKKyAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGlu
dD4oMCkpOwogfQogCiBKU1ZhbHVlIGpzVGVzdE9iakNPTlNUX1ZBTFVFXzEoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKIHsKLSAgICByZXR1cm4ganNOdW1iZXIo
ZXhlYywgc3RhdGljX2Nhc3Q8aW50PigxKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAg
IHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDEpKTsKIH0KIAogSlNWYWx1ZSBqc1Rl
c3RPYmpDT05TVF9WQUxVRV8yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGludD4oMikp
OworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nh
c3Q8aW50PigyKSk7CiB9CiAKIEpTVmFsdWUganNUZXN0T2JqQ09OU1RfVkFMVUVfNChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImKQogewotICAgIHJldHVybiBqc051
bWJlcihleGVjLCBzdGF0aWNfY2FzdDxpbnQ+KDQpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7
CisgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludD4oNCkpOwogfQogCiBKU1ZhbHVl
IGpzVGVzdE9iakNPTlNUX1ZBTFVFXzgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJikKIHsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8aW50
Pig4KSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIHJldHVybiBqc051bWJlcihzdGF0
aWNfY2FzdDxpbnQ+KDgpKTsKIH0KIAogSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV85KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCiB7Ci0gICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGludD4oLTEpKTsKKyAgICBVTlVTRURfUEFSQU0o
ZXhlYyk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludD4oLTEpKTsKIH0KIAog
SlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8xMChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImKQpAQCAtMTUyOCwyMiArMTU2OCwyNiBAQCBKU1ZhbHVlIGpzVGVz
dE9iakNPTlNUX1ZBTFVFXzEwKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYpCiAKIEpTVmFsdWUganNUZXN0T2JqQ09OU1RfVkFMVUVfMTEoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKIHsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhl
Yywgc3RhdGljX2Nhc3Q8aW50PigweGZmZmZmZmZmKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDB4ZmZmZmZmZmYpKTsKIH0K
IAogSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8xMihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImKQogewotICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0
aWNfY2FzdDxpbnQ+KDB4MDEpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgcmV0dXJu
IGpzTnVtYmVyKHN0YXRpY19jYXN0PGludD4oMHgwMSkpOwogfQogCiBKU1ZhbHVlIGpzVGVzdE9i
akNPTlNUX1ZBTFVFXzEzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYpCiB7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGludD4oMFgyMCkp
OworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nh
c3Q8aW50PigwWDIwKSk7CiB9CiAKIEpTVmFsdWUganNUZXN0T2JqQ09OU1RfVkFMVUVfMTQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKIHsKLSAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8aW50PigweDFhYmMpKTsKKyAgICBVTlVTRURfUEFS
QU0oZXhlYyk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludD4oMHgxYWJjKSk7
CiB9CiAKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0T2JqKiBvYmplY3QpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCmluZGV4IDIxNjhiM2YuLjYwMTRmN2EgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC0xMjYs
NiArMTI2LDEwIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvCiBKU0M6OkpTVmFsdWUganNUZXN0
T2JqUmVhZE9ubHlJbnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBK
U0M6OklkZW50aWZpZXImKTsKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYp
OwogSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdE9ialNob3J0QXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialVuc2lnbmVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKIEpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpJbnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImKTsKIHZvaWQgc2V0SlNUZXN0T2JqSW50QXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwogSlNDOjpKU1ZhbHVlIGpzVGVz
dE9iakxvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlND
OjpJZGVudGlmaWVyJik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oCmluZGV4IDFhZDI5Y2IuLmZkNDAwOTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCkBAIC01Miw2ICs1MiwxMCBAQCBl
bnVtIHsKIC0gKGludClyZWFkT25seUludEF0dHI7CiAtIChOU1N0cmluZyAqKXJlYWRPbmx5U3Ry
aW5nQXR0cjsKIC0gKERPTVRlc3RPYmogKilyZWFkT25seVRlc3RPYmpBdHRyOworLSAoc2hvcnQp
c2hvcnRBdHRyOworLSAodm9pZClzZXRTaG9ydEF0dHI6KHNob3J0KW5ld1Nob3J0QXR0cjsKKy0g
KHVuc2lnbmVkIHNob3J0KXVuc2lnbmVkU2hvcnRBdHRyOworLSAodm9pZClzZXRVbnNpZ25lZFNo
b3J0QXR0cjoodW5zaWduZWQgc2hvcnQpbmV3VW5zaWduZWRTaG9ydEF0dHI7CiAtIChpbnQpaW50
QXR0cjsKIC0gKHZvaWQpc2V0SW50QXR0cjooaW50KW5ld0ludEF0dHI7CiAtIChsb25nIGxvbmcp
bG9uZ0xvbmdBdHRyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0T2JqLm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0T2JqLm1tCmluZGV4IDY3ODgwNzUuLjYxMjU5N2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KQEAgLTkyLDYgKzkyLDMwIEBA
CiAgICAgcmV0dXJuIGtpdChXVEY6OmdldFB0cihJTVBMLT5yZWFkT25seVRlc3RPYmpBdHRyKCkp
KTsKIH0KIAorLSAoc2hvcnQpc2hvcnRBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5zaG9ydEF0dHIoKTsKK30KKworLSAo
dm9pZClzZXRTaG9ydEF0dHI6KHNob3J0KW5ld1Nob3J0QXR0cgoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5zZXRTaG9ydEF0dHIobmV3U2hv
cnRBdHRyKTsKK30KKworLSAodW5zaWduZWQgc2hvcnQpdW5zaWduZWRTaG9ydEF0dHIKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwt
PnVuc2lnbmVkU2hvcnRBdHRyKCk7Cit9CisKKy0gKHZvaWQpc2V0VW5zaWduZWRTaG9ydEF0dHI6
KHVuc2lnbmVkIHNob3J0KW5ld1Vuc2lnbmVkU2hvcnRBdHRyCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPnNldFVuc2lnbmVkU2hvcnRBdHRy
KG5ld1Vuc2lnbmVkU2hvcnRBdHRyKTsKK30KKwogLSAoaW50KWludEF0dHIKIHsKICAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4IDIyZWQ2ODAuLjUzNzUzNGIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC0zNSw2ICszNSw4IEBAIG1vZHVsZSB0
ZXN0IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICByZWFkT25s
eUludEF0dHI7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgcmVh
ZE9ubHlTdHJpbmdBdHRyOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgVGVzdE9iaiAgICAg
ICAgIHJlYWRPbmx5VGVzdE9iakF0dHI7CisgICAgICAgIGF0dHJpYnV0ZSBzaG9ydCAgICAgICAg
ICAgICAgICAgICAgc2hvcnRBdHRyOworICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQg
ICAgICAgICAgIHVuc2lnbmVkU2hvcnRBdHRyOwogICAgICAgICBhdHRyaWJ1dGUgbG9uZyAgICAg
ICAgICAgICAgICAgICAgIGludEF0dHI7CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIGxvbmcgICAg
ICAgICAgICAgICAgbG9uZ0xvbmdBdHRyOwogICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsb25nICAgICAgIHVuc2lnbmVkTG9uZ0xvbmdBdHRyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggNGM5MjFiYi4uZTNkOTI0YSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC03
OSw2ICs3OSwzOCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5VGVzdE9i
akF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPgogICAgIHJldHVybiB3cmFwcGVy
OwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNob3J0QXR0ckF0dHJHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
Cit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zaG9ydEF0dHIuX2dldCIpOworICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0
dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5zaG9ydEF0dHIoKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHNob3J0QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAg
IElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2hvcnRBdHRyLl9zZXQiKTsKKyAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIGludCB2ID0gdG9J
bnQzMih2YWx1ZSk7CisgICAgaW1wLT5zZXRTaG9ydEF0dHIodik7CisgICAgcmV0dXJuOworfQor
CitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHVuc2lnbmVkU2hvcnRBdHRyQXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnVuc2lnbmVkU2hvcnRBdHRyLl9nZXQi
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkp
OworICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+dW5zaWduZWRTaG9ydEF0dHIoKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHVuc2lnbmVkU2hvcnRBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai51bnNpZ25l
ZFNob3J0QXR0ci5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKKyAgICBpbnQgdiA9IHRvVUludDMyKHZhbHVlKTsKKyAgICBpbXAt
PnNldFVuc2lnbmVkU2hvcnRBdHRyKHYpOworICAgIHJldHVybjsKK30KKwogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBpbnRBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5UZXN0T2JqLmludEF0dHIuX2dldCIpOwpAQCAtMTA5NCw2ICsxMTI2LDEwIEBAIHN0YXRpYyBj
b25zdCBCYXRjaGVkQXR0cmlidXRlIFRlc3RPYmpBdHRyc1tdID0gewogICAgIHsicmVhZE9ubHlT
dHJpbmdBdHRyIiwgVGVzdE9iakludGVybmFsOjpyZWFkT25seVN0cmluZ0F0dHJBdHRyR2V0dGVy
LCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6
REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAw
IC8qIG9uIGluc3RhbmNlICovfSwKICAgICAvLyBBdHRyaWJ1dGUgJ3JlYWRPbmx5VGVzdE9iakF0
dHInIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKICAgICB7InJlYWRP
bmx5VGVzdE9iakF0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OnJlYWRPbmx5VGVzdE9iakF0dHJBdHRy
R2V0dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9s
Pih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5v
bmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ3Nob3J0QXR0cicg
KFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQorICAgIHsic2hvcnRBdHRyIiwgVGVzdE9i
akludGVybmFsOjpzaG9ydEF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6OnNob3J0QXR0
ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRy
b2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6
Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8vIEF0dHJpYnV0ZSAndW5zaWduZWRT
aG9ydEF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7InVuc2lnbmVk
U2hvcnRBdHRyIiwgVGVzdE9iakludGVybmFsOjp1bnNpZ25lZFNob3J0QXR0ckF0dHJHZXR0ZXIs
IFRlc3RPYmpJbnRlcm5hbDo6dW5zaWduZWRTaG9ydEF0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRh
dGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRp
Y19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNl
ICovfSwKICAgICAvLyBBdHRyaWJ1dGUgJ2ludEF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRB
dHRyOiAnJykKICAgICB7ImludEF0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OmludEF0dHJBdHRyR2V0
dGVyLCBUZXN0T2JqSW50ZXJuYWw6OmludEF0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8s
IHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0
PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwK
ICAgICAvLyBBdHRyaWJ1dGUgJ2xvbmdMb25nQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0
dHI6ICcnKQo=
</data>
<flag name="review"
          id="64886"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="64887"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>