<?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>205554</bug_id>
          
          <creation_ts>2019-12-23 02:19:58 -0800</creation_ts>
          <short_desc>[JSC] JSFunction&apos;s m_executable / m_rareData should be merged</short_desc>
          <delta_ts>2020-01-02 14:40:43 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1601220</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-23 02:19:58 -0800</bug_when>
    <thetext>Let&apos;s consider introducing one field, m_executableOrRareData to shrink sizeof(JSFunction) from 40 to 32, so that we can remove 16bytes per JSFunction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601221</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-23 02:22:04 -0800</bug_when>
    <thetext>Which field is frequently used?,
1. m_scope is accessed every time CodeBlock is executed (op_get_scope).
2. m_executable access can be skipped if CallLinkInfo well caches the result.

So, we should merge m_rareData &amp; m_executable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601459</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-25 03:05:10 -0800</bug_when>
    <thetext>Gmail allocates 130939 JSFunctions. If we reduce size from 48 to 32, we can save 2~ MB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601460</commentid>
    <comment_count>3</comment_count>
      <attachid>386405</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-25 03:12:29 -0800</bug_when>
    <thetext>Created attachment 386405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601663</commentid>
    <comment_count>4</comment_count>
      <attachid>386405</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-27 21:56:24 -0800</bug_when>
    <thetext>Comment on attachment 386405
Patch

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

Nice.  r=me with some suggestions.

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        If we can save sizeof(JSFunction), we can get great gain in memory usage.

/gain/savings/.  &quot;gain&quot; suggests an increase, contrary to your intended meaning.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6567
&gt; +        LValue rareData = m_out.sub(rareDataBits, m_out.constIntPtr(JSFunction::rareDataBit));
&gt;          LValue allocator = m_out.loadPtr(rareData, m_heaps.FunctionRareData_allocator);
&gt;          LValue structure = m_out.loadPtr(rareData, m_heaps.FunctionRareData_structure);

Why not use the same offset trick as you did in the DFG i.e. subtract the rareDataTag (sidenote: see my suggestion for renaming JSFunction::rareDataBit below) from m_heaps.FunctionRareData_allocator and rename it to m_heaps.FunctionRareData_allocator_minus_rareDataTag, and remove the need to adjust the rareDataBits value.  Ditto for FunctionRareData_structure =&gt; FunctionRareData_structure_minus_rareDataTag.  From grepping the code, this is the only place that uses these 2 offsets.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6611
&gt; +        LValue rareData = m_out.sub(rareDataBits, m_out.constIntPtr(JSFunction::rareDataBit));
&gt;          LValue structure = m_out.loadPtr(rareData, m_heaps.FunctionRareData_internalFunctionAllocationProfile_structure);

Ditto: FunctionRareData_internalFunctionAllocationProfile_structure =&gt; FunctionRareData_internalFunctionAllocationProfile_structure_minus_rareDataTag.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6666
&gt; +        LValue rareData = m_out.sub(rareDataBits, m_out.constIntPtr(JSFunction::rareDataBit));
&gt;          LValue structure = m_out.loadPtr(rareData, m_heaps.FunctionRareData_internalFunctionAllocationProfile_structure);

Ditto: FunctionRareData_internalFunctionAllocationProfile_structure =&gt; FunctionRareData_internalFunctionAllocationProfile_structure_minus_rareDataTag.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1150
&gt; +.executable:

nit: can you rename this label to .isExecutable?  Ditto for the cases below.

&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:133
&gt; -void JSFunction::finishCreation(VM&amp; vm, NativeExecutable* executable, int length, const String&amp; name)
&gt; +void JSFunction::finishCreation(VM&amp; vm, NativeExecutable*, int length, const String&amp; name)

Why not remove the NativeExecutable* argument altogether?

&gt; Source/JavaScriptCore/runtime/JSFunction.h:64
&gt; +    static constexpr uintptr_t rareDataBit = 0x1;

nit: can you rename this as rareDataTag?  The term &quot;tag&quot; when used on the executableOrRareData pointer tells us right away that we&apos;re tagging the pointer (which is an immediately understood concept), whereas a &quot;bit&quot; applied to a pointer doesn&apos;t have the same context.  Hence, I think &quot;tag&quot; is a better name to use here.

&gt; Source/JavaScriptCore/runtime/JSFunction.h:129
&gt;      FunctionRareData* rareData(VM&amp; vm)

nit: this is not due to your changes, but this function should really be renamed to ensureRareData() by WebKit convention.  Can you do this rename in a follow up patch?  Doing this rename will also help further disambiguate it from the other rareData() function below that does not instantiate a FunctionRareData instance.

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:104
&gt; +    uintptr_t executableOrRareData = m_executableOrRareData;
&gt; +    if (executableOrRareData &amp; rareDataBit)
&gt; +        return bitwise_cast&lt;FunctionRareData*&gt;(executableOrRareData &amp; ~rareDataBit)-&gt;hasReifiedLength();

nit: It would be nice to use JSFunction::rareData() (here instead of doing the pointer tag check and untagging ourselves).  The only extra cost is the loadLoadFence().  Since hasReifiedLength() is not used in any perf critical paths, it might be more cleaner to use the rareData() method instead.

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:113
&gt; +    uintptr_t executableOrRareData = m_executableOrRareData;
&gt; +    if (executableOrRareData &amp; rareDataBit)
&gt; +        return bitwise_cast&lt;FunctionRareData*&gt;(executableOrRareData &amp; ~rareDataBit)-&gt;hasReifiedName();
&gt; +    return false;

Ditto: use the rareData() method instead?

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:121
&gt; +    uintptr_t executableOrRareData = m_executableOrRareData;
&gt; +    if (!(executableOrRareData &amp; rareDataBit))
&gt;          return true;
&gt; -    if (m_rareData-&gt;hasModifiedName())
&gt; +    FunctionRareData* rareData = bitwise_cast&lt;FunctionRareData*&gt;(executableOrRareData &amp; ~rareDataBit);

Ditto: Would be nice to use the rareData() method here too.

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:153
&gt; -    if (UNLIKELY(!m_rareData))
&gt; +    uintptr_t executableOrRareData = m_executableOrRareData;
&gt; +    if (!(executableOrRareData &amp; rareDataBit))

Can also rareData() method here.  I think the code will read cleaner that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601735</commentid>
    <comment_count>5</comment_count>
      <attachid>386405</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-28 21:24:46 -0800</bug_when>
    <thetext>Comment on attachment 386405
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:10
&gt;&gt; +        If we can save sizeof(JSFunction), we can get great gain in memory usage.
&gt; 
&gt; /gain/savings/.  &quot;gain&quot; suggests an increase, contrary to your intended meaning.

Fixed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6567
&gt;&gt;          LValue structure = m_out.loadPtr(rareData, m_heaps.FunctionRareData_structure);
&gt; 
&gt; Why not use the same offset trick as you did in the DFG i.e. subtract the rareDataTag (sidenote: see my suggestion for renaming JSFunction::rareDataBit below) from m_heaps.FunctionRareData_allocator and rename it to m_heaps.FunctionRareData_allocator_minus_rareDataTag, and remove the need to adjust the rareDataBits value.  Ditto for FunctionRareData_structure =&gt; FunctionRareData_structure_minus_rareDataTag.  From grepping the code, this is the only place that uses these 2 offsets.

It is a bit hard to represent this in our TBAA heap access offsets. And I think B3 can optimize this (This is why we are using sub instead of bitAnd, which makes B3 easily optimize this).

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6611
&gt;&gt;          LValue structure = m_out.loadPtr(rareData, m_heaps.FunctionRareData_internalFunctionAllocationProfile_structure);
&gt; 
&gt; Ditto: FunctionRareData_internalFunctionAllocationProfile_structure =&gt; FunctionRareData_internalFunctionAllocationProfile_structure_minus_rareDataTag.

Ditto.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6666
&gt;&gt;          LValue structure = m_out.loadPtr(rareData, m_heaps.FunctionRareData_internalFunctionAllocationProfile_structure);
&gt; 
&gt; Ditto: FunctionRareData_internalFunctionAllocationProfile_structure =&gt; FunctionRareData_internalFunctionAllocationProfile_structure_minus_rareDataTag.

Ditto.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1150
&gt;&gt; +.executable:
&gt; 
&gt; nit: can you rename this label to .isExecutable?  Ditto for the cases below.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:133
&gt;&gt; +void JSFunction::finishCreation(VM&amp; vm, NativeExecutable*, int length, const String&amp; name)
&gt; 
&gt; Why not remove the NativeExecutable* argument altogether?

This `finishCreation` is only used for JSFunction holding NativeExecutable*, and this type is used as a tag to distinguish this between multiple finishCreation implementations.

&gt;&gt; Source/JavaScriptCore/runtime/JSFunction.h:64
&gt;&gt; +    static constexpr uintptr_t rareDataBit = 0x1;
&gt; 
&gt; nit: can you rename this as rareDataTag?  The term &quot;tag&quot; when used on the executableOrRareData pointer tells us right away that we&apos;re tagging the pointer (which is an immediately understood concept), whereas a &quot;bit&quot; applied to a pointer doesn&apos;t have the same context.  Hence, I think &quot;tag&quot; is a better name to use here.

Sounds nice. Changed.

&gt;&gt; Source/JavaScriptCore/runtime/JSFunction.h:129
&gt;&gt;      FunctionRareData* rareData(VM&amp; vm)
&gt; 
&gt; nit: this is not due to your changes, but this function should really be renamed to ensureRareData() by WebKit convention.  Can you do this rename in a follow up patch?  Doing this rename will also help further disambiguate it from the other rareData() function below that does not instantiate a FunctionRareData instance.

Sounds nice. Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:104
&gt;&gt; +        return bitwise_cast&lt;FunctionRareData*&gt;(executableOrRareData &amp; ~rareDataBit)-&gt;hasReifiedLength();
&gt; 
&gt; nit: It would be nice to use JSFunction::rareData() (here instead of doing the pointer tag check and untagging ourselves).  The only extra cost is the loadLoadFence().  Since hasReifiedLength() is not used in any perf critical paths, it might be more cleaner to use the rareData() method instead.

Currently, I would like to keep this since `JSFunction::rareData()` includes loadLoadFence() while it is not necessary.
I would like to put FIXME here, and later, I would remove this by removing `WTF::loadLoadFence()` in `rareData`.

&gt;&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:113
&gt;&gt; +    return false;
&gt; 
&gt; Ditto: use the rareData() method instead?

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:121
&gt;&gt; +    FunctionRareData* rareData = bitwise_cast&lt;FunctionRareData*&gt;(executableOrRareData &amp; ~rareDataBit);
&gt; 
&gt; Ditto: Would be nice to use the rareData() method here too.

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:153
&gt;&gt; +    if (!(executableOrRareData &amp; rareDataBit))
&gt; 
&gt; Can also rareData() method here.  I think the code will read cleaner that way.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601736</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-28 21:32:38 -0800</bug_when>
    <thetext>Committed r253932: &lt;https://trac.webkit.org/changeset/253932&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601737</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-28 21:33:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/58228681&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601740</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-28 23:01:23 -0800</bug_when>
    <thetext>Committed r253933: &lt;https://trac.webkit.org/changeset/253933&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601912</commentid>
    <comment_count>9</comment_count>
      <attachid>386405</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-30 12:31:45 -0800</bug_when>
    <thetext>Comment on attachment 386405
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:12422
&gt; +    m_jit.loadPtr(CCallHelpers::Address(resultGPR, FunctionRareData::offsetOfExecutable() - JSFunction::rareDataBit), resultGPR);

so do we just use 7 bytes to store the pointer? And the lower byte is either one or zero? 

I guess I&apos;m a little confused as to how this works, since what if the byte is non zero?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601914</commentid>
    <comment_count>10</comment_count>
      <attachid>386405</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-30 12:40:27 -0800</bug_when>
    <thetext>Comment on attachment 386405
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:12422
&gt;&gt; +    m_jit.loadPtr(CCallHelpers::Address(resultGPR, FunctionRareData::offsetOfExecutable() - JSFunction::rareDataBit), resultGPR);
&gt; 
&gt; so do we just use 7 bytes to store the pointer? And the lower byte is either one or zero? 
&gt; 
&gt; I guess I&apos;m a little confused as to how this works, since what if the byte is non zero?

I got confused, this is loading off of FunctionRareData. I see why this works now, since if it&apos;s rare data, the pointer is offset by 1. Nice, this is cool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601917</commentid>
    <comment_count>11</comment_count>
      <attachid>386405</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-30 12:42:07 -0800</bug_when>
    <thetext>Comment on attachment 386405
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +        This patch reduces sizeof(JSFunction) from 48 to 32.

👍🏼</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602246</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-02 14:40:43 -0800</bug_when>
    <thetext>This improves RAMification by ~0.5%, and it also improves new Membuster by 1%.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386405</attachid>
            <date>2019-12-25 03:12:29 -0800</date>
            <delta_ts>2019-12-27 21:56:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205554-20191225031228.patch</filename>
            <type>text/plain</type>
            <size>68114</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzOTA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YTU1NDZjNzZjNWE4Mjc0YTVjYWNhOGJiNzY5NWU5OGIyOTkzZWNkLi4xNDYwMTY2YTQ2Mzc5OWUz
ZjdiNDQyODMwMDllMDJkMDVmZDBkY2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTktMTItMjUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBKU0Z1bmN0aW9uJ3MgbV9leGVjdXRhYmxlIC8gbV9yYXJlRGF0
YSBzaG91bGQgYmUgbWVyZ2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDU1NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIG1lcmdlcyBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGUgYW5k
IEpTRnVuY3Rpb246Om1fcmFyZURhdGEgZmllbGRzIGludG8gb25lIEpTRnVuY3Rpb246Om1fZXhl
Y3V0YWJsZU9yUmFyZURhdGEgZmllbGQuCisgICAgICAgIEpTRnVuY3Rpb24gaXMgb25lIG9mIHRo
ZSBtb3N0IGZyZXF1ZW50bHkgYWxsb2NhdGVkIG9iamVjdHMgKGUuZy4gaXQgaXMgY29tbW9uIHRo
YXQgYW5vbnltb3VzIEpTRnVuY3Rpb24gZXhwcmVzc2lvbiBpcyB1c2VkIGFzIGEgc2NvcGUpLgor
ICAgICAgICBJZiB3ZSBjYW4gc2F2ZSBzaXplb2YoSlNGdW5jdGlvbiksIHdlIGNhbiBnZXQgZ3Jl
YXQgZ2FpbiBpbiBtZW1vcnkgdXNhZ2UuCisKKyAgICAgICAgSlNGdW5jdGlvbjo6bV9zY29wZSBm
aWVsZCBpcyB0b3VjaGVkIGV2ZXJ5IHRpbWUgd2UgZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uLiAob3Bf
Z2V0X3Njb3BlLCBvciBvYnRhaW5pbmcgSlNHbG9iYWxPYmplY3QgZm9yIGhvc3QgZnVuY3Rpb25z
KS4KKyAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIG1fZXhlY3V0YWJsZSBmaWVsZCBjYW4gYmUg
c2tpcHBlZCBpZiBKU0Z1bmN0aW9uIGNhbGwgaXMgY2FjaGVkIGJ5IENhbGxMaW5rSW5mby4gU28g
Y29tcGFyZWQgdG8gSlNGdW5jdGlvbjo6bV9zY29wZSwKKyAgICAgICAgdGhpcyBmaWVsZCBpcyBs
ZXNzIGZyZXF1ZW50bHkgdG91Y2hlZC4gU28sIHdlIG1lcmdlIG1fZXhlY3V0YWJsZSBhbmQgbV9y
YXJlRGF0YSBmaWVsZHMgaW50byBvbmUsIG1fZXhlY3V0YWJsZU9yUmFyZURhdGEuIFdoZW4gaXQg
aG9sZHMKKyAgICAgICAgRXhlY3V0YWJsZUJhc2UqLCB3ZSBkbyBub3RoaW5nLiBCdXQgd2hlbiB3
ZSBjcmVhdGUgRnVuY3Rpb25SYXJlRGF0YSwgd2UgcHV0IEV4ZWN1dGFibGVCYXNlIGluIEZ1bmN0
aW9uUmFyZURhdGEgYW5kIHN0b3JlIEZ1bmN0aW9uUmFyZURhdGEKKyAgICAgICAgdG8gSlNGdW5j
dGlvbjo6bV9leGVjdXRhYmxlT3JSYXJlRGF0YSBmaWVsZCB3aXRoIGAweDFgIGZsYWcuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCByZWR1Y2VzIHNpemVvZihKU0Z1bmN0aW9uKSBmcm9tIDQ4IHRvIDMy
LgorCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uQ29tbW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEV4ZWN1dGFibGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlVGhpcyk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVQcm9taXNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUludGVybmFsRmllbGRP
YmplY3QpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVHZXRFeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5ld0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlUHJvbWlzZSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVJbnRlcm5hbEZpZWxkT2Jq
ZWN0KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0
L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAg
ICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5r
Rm9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
Ym91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAg
KiBydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvblJh
cmVEYXRhOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6RnVuY3Rpb25SYXJlRGF0
YSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmg6CisgICAgICAgICogcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6SlNCb3VuZEZ1bmN0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZUZ1bmN0aW9uVGhhdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpKU0Z1bmN0aW9uOjphbGxvY2F0ZVJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6YWxsb2NhdGVBbmRJbml0aWFsaXplUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0
aW9uOjppbml0aWFsaXplUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cHV0KToKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNG
dW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpleGVjdXRhYmxlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSk6
CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6SlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNG
dW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9K
U0Z1bmN0aW9uSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6anNFeGVjdXRhYmxlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb24gY29uc3QpOgorICAgICAgICAoSlND
OjpKU0Z1bmN0aW9uOjpuYXRpdmVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
Om5hdGl2ZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6aGFzUmVpZmll
ZExlbmd0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246Omhhc1JlaWZpZWROYW1l
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6YXJlTmFtZUFuZExlbmd0aE9yaWdp
bmFsKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZW5zdXJlUmFyZURhdGFBbmRBbGxvY2F0
aW9uUHJvZmlsZSk6CisgICAgICAgICogcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNOYXRpdmVTdGRGdW5jdGlvbjo6SlNOYXRpdmVTdGRGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OkpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5j
dGlvbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHA6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSk6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oOgorICAgICAgICAqIHdhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg6CisKIDIwMTktMTItMjUgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBDb21wYWN0IEJ5dGVj
b2RlcyBtb3JlIGJ5IGVtaXR0aW5nIDEtYnl0ZSBPcGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggZTg2YmY1ZDVkNzc5NTUzMjU4
YWQzNjBiNjVhNTg0MDQwMTY0NTQ0NS4uY2U4MDg4YWFkNWZlZGI1ZTE1ODIyN2JlYTk5N2RmOTA3
YjA1NTNjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKQEAgLTcyMzYsOCArNzIzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVOZXdGdW5jdGlvbkNvbW1vbihHUFJSZWcgcmVzdWx0R1BSLCBSZWdpc3RlcmVkU3RydWN0CiAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplPENsYXNzVHlwZT4ocmVzdWx0R1BS
LCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaDFHUFIsIHNjcmF0
Y2gyR1BSLCBzbG93UGF0aCwgc2l6ZSk7CiAgICAgCiAgICAgbV9qaXQuc3RvcmVQdHIoc2NvcGVH
UFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZT
Y29wZUNoYWluKCkpKTsKLSAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2ppdC5ncmFwaCgpLCBleGVjdXRhYmxlKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSkpOwotICAgIG1faml0LnN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSk7CisgICAgbV9qaXQuc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZXhlY3V0YWJsZSks
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlT3JSYXJlRGF0YSgpKSk7CiAgICAgbV9qaXQubXV0YXRvckZlbmNlKHZtKCkpOwogfQog
CkBAIC0xMjQxOCw3ICsxMjQxNywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
RXhlY3V0YWJsZShOb2RlKiBub2RlKQogICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9u
LmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgc3BlY3Vs
YXRlQ2VsbFR5cGUobm9kZS0+Y2hpbGQxKCksIGZ1bmN0aW9uR1BSLCBTcGVjRnVuY3Rpb24sIEpT
RnVuY3Rpb25UeXBlKTsKLSAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1
bmN0aW9uR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIHJlc3VsdEdQUik7
CisgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhmdW5jdGlvbkdQUiwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0R1BSKTsKKyAg
ICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6
WmVybywgcmVzdWx0R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpy
YXJlRGF0YUJpdCkpOworICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHJl
c3VsdEdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0
aW9uOjpyYXJlRGF0YUJpdCksIHJlc3VsdEdQUik7CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZt
X2ppdCk7CiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCkBAIC0xMjc4OCwx
MCArMTI3OTAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMoTm9k
ZSogbm9kZSkKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKICAgICBz
bG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVHUFIpKTsKLSAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOwotICAgIHNsb3dQYXRoLmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUikp
OwotICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFs
bG9jYXRvckdQUik7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJl
RGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVj
dHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0
YSgpKSwgcmFyZURhdGFHUFIpOworICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpKSk7CisgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRo
UHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQp
LCBhbGxvY2F0b3JHUFIpOworICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
cmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhQml0KSwgc3RydWN0dXJlR1BSKTsKIAog
ICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRHUFIsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2Nh
dG9yR1BSLCBzdHJ1Y3R1cmVHUFIsIGJ1dHRlcmZseSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwpA
QCAtMTI4MzAsOSArMTI4MzIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRl
UHJvbWlzZShOb2RlKiBub2RlKQogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90RnVuY3Rpb24oY2Fs
bGVlR1BSKSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVH
UFIsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKLSAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHJhcmVEYXRhR1BSKSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhy
YXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0aW9uQWxs
b2NhdGlvblByb2ZpbGUoKSArIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6b2Zm
c2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZUdQUik7CisgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJs
ZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YUJpdCkpKTsKKyAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgpICsgSW50ZXJu
YWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5j
dGlvbjo6cmFyZURhdGFCaXQpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0cnVjdHVyZUdQUikpOwog
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8g
SlNJbnRlcm5hbFByb21pc2U6OmluZm8oKSA6IEpTUHJvbWlzZTo6aW5mbygpKSwgc2NyYXRjaDFH
UFIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2gxR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RydWN0dXJlR1BS
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSkpOwpAQCAtMTI4NzgsOSArMTI4ODAsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdChO
b2RlKiBub2RlLCBPcGVyYXRpb24gb3BlcgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90RnVuY3Rp
b24oY2FsbGVlR1BSKSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhj
YWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsK
LSAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHJhcmVEYXRhR1BSKSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblByb2ZpbGUoKSArIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmls
ZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZUdQUik7CisgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhl
Y3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YUJpdCkpKTsKKyAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgpICsg
SW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0g
SlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIHN0cnVjdHVyZUdQ
UikpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihKU0NsYXNzOjppbmZvKCkpLCBzY3Jh
dGNoMUdQUik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxw
ZXJzOjpOb3RFcXVhbCwgc2NyYXRjaDFHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHJ1Y3R1
cmVHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCmluZGV4IDY0
ZjJkMTY4MDVjYWRkZGM4ZmNhYWI4NGJhZTJiMjE0OWZkZDAzOTEuLmIxMDhhYmZjY2I4OTU4YTgz
MDdjMGFhNzhjZDY3ZjIwMmQzYjhjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCkBAIC04MCw2ICs4MCw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhGdW5jdGlvblJhcmVEYXRh
X3N0cnVjdHVyZSwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0
cnVjdHVyZSgpKSBcCiAgICAgbWFjcm8oRnVuY3Rpb25SYXJlRGF0YV9wcm90b3R5cGUsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZQcm90b3R5cGUoKSkgXAogICAg
IG1hY3JvKEZ1bmN0aW9uUmFyZURhdGFfYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0LCBG
dW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgp
KSBcCisgICAgbWFjcm8oRnVuY3Rpb25SYXJlRGF0YV9leGVjdXRhYmxlLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSkgXAogICAgIG1hY3JvKEZ1bmN0aW9uUmFyZURhdGFf
aW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlX3N0cnVjdHVyZSwgRnVuY3Rpb25SYXJl
RGF0YTo6b2Zmc2V0T2ZJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUoKSArIEludGVy
bmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSkgXAogICAg
IG1hY3JvKEZ1bmN0aW9uUmFyZURhdGFfYm91bmRGdW5jdGlvblN0cnVjdHVyZSwgRnVuY3Rpb25S
YXJlRGF0YTo6b2Zmc2V0T2ZCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKCkpIFwKICAgICBtYWNybyhG
dW5jdGlvblJhcmVEYXRhX2FsbG9jYXRpb25Qcm9maWxlQ2xlYXJpbmdXYXRjaHBvaW50LCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlQ2xlYXJpbmdXYXRjaHBvaW50
KCkpIFwKQEAgLTk3LDkgKzk4LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
ICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb1R5cGUsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpIFwKICAgICBtYWNybyhKU0NlbGxfdXNlZnVsQnl0ZXMsIEpTQ2VsbDo6aW5kZXhpbmdUeXBl
QW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNEZXN0cnVjdGlibGVPYmplY3RfY2xhc3NJ
bmZvLCBKU0Rlc3RydWN0aWJsZU9iamVjdDo6Y2xhc3NJbmZvT2Zmc2V0KCkpIFwKLSAgICBtYWNy
byhKU0Z1bmN0aW9uX2V4ZWN1dGFibGUsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgp
KSBcCisgICAgbWFjcm8oSlNGdW5jdGlvbl9leGVjdXRhYmxlT3JSYXJlRGF0YSwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSBcCiAgICAgbWFjcm8oSlNGdW5jdGlv
bl9zY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpIFwKLSAgICBtYWNybyhK
U0Z1bmN0aW9uX3JhcmVEYXRhLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpIFwKICAg
ICBtYWNybyhKU0dsb2JhbE9iamVjdF9yZWdFeHBHbG9iYWxEYXRhX2NhY2hlZFJlc3VsdF9sYXN0
UmVnRXhwLCBKU0dsb2JhbE9iamVjdDo6cmVnRXhwR2xvYmFsRGF0YU9mZnNldCgpICsgUmVnRXhw
R2xvYmFsRGF0YTo6b2Zmc2V0T2ZDYWNoZWRSZXN1bHQoKSArIFJlZ0V4cENhY2hlZFJlc3VsdDo6
b2Zmc2V0T2ZMYXN0UmVnRXhwKCkpIFwKICAgICBtYWNybyhKU0dsb2JhbE9iamVjdF9yZWdFeHBH
bG9iYWxEYXRhX2NhY2hlZFJlc3VsdF9sYXN0SW5wdXQsIEpTR2xvYmFsT2JqZWN0OjpyZWdFeHBH
bG9iYWxEYXRhT2Zmc2V0KCkgKyBSZWdFeHBHbG9iYWxEYXRhOjpvZmZzZXRPZkNhY2hlZFJlc3Vs
dCgpICsgUmVnRXhwQ2FjaGVkUmVzdWx0OjpvZmZzZXRPZkxhc3RJbnB1dCgpKSBcCiAgICAgbWFj
cm8oSlNHbG9iYWxPYmplY3RfcmVnRXhwR2xvYmFsRGF0YV9jYWNoZWRSZXN1bHRfcmVzdWx0X3N0
YXJ0LCBKU0dsb2JhbE9iamVjdDo6cmVnRXhwR2xvYmFsRGF0YU9mZnNldCgpICsgUmVnRXhwR2xv
YmFsRGF0YTo6b2Zmc2V0T2ZDYWNoZWRSZXN1bHQoKSArIFJlZ0V4cENhY2hlZFJlc3VsdDo6b2Zm
c2V0T2ZSZXN1bHQoKSArIE9CSkVDVF9PRkZTRVRPRihNYXRjaFJlc3VsdCwgc3RhcnQpKSBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggYjdj
YjEwMzI2ZDcwNjQ0NWU1Mzg3MDYxYmM3NWE2OGQ4N2NiZTE1Yi4uZjllYzdhYjY5NmE0N2I1MjA3
MGI2ODkxMWNmMTIwY2UxZWM3YmVkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMzQ2OCw5ICszNDY4LDIyIEBAIGNsYXNzIExvd2VyREZH
VG9CMyB7CiAKICAgICB2b2lkIGNvbXBpbGVHZXRFeGVjdXRhYmxlKCkKICAgICB7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGhhc1JhcmVEYXRhID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTFZhbHVl
IGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzcGVjdWxhdGVGdW5j
dGlvbihtX25vZGUtPmNoaWxkMSgpLCBjZWxsKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5s
b2FkUHRyKGNlbGwsIG1faGVhcHMuSlNGdW5jdGlvbl9leGVjdXRhYmxlKSk7CisKKyAgICAgICAg
TFZhbHVlIHJhcmVEYXRhQml0cyA9IG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFwcy5KU0Z1bmN0
aW9uX2V4ZWN1dGFibGVPclJhcmVEYXRhKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEV4
ZWN1dGFibGUgPSBtX291dC5hbmNob3IocmFyZURhdGFCaXRzKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKG1fb3V0LnRlc3RJc1plcm9QdHIocmFyZURhdGFCaXRzLCBtX291dC5jb25zdEludFB0cihK
U0Z1bmN0aW9uOjpyYXJlRGF0YUJpdCkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGhh
c1JhcmVEYXRhKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhoYXNSYXJlRGF0YSwgY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHJhcmVEYXRh
ID0gbV9vdXQuc3ViKHJhcmVEYXRhQml0cywgbV9vdXQuY29uc3RJbnRQdHIoSlNGdW5jdGlvbjo6
cmFyZURhdGFCaXQpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0V4ZWN1dGFibGUgPSBt
X291dC5hbmNob3IobV9vdXQubG9hZFB0cihyYXJlRGF0YSwgbV9oZWFwcy5GdW5jdGlvblJhcmVE
YXRhX2V4ZWN1dGFibGUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBmYXN0RXhlY3V0YWJsZSwgc2xvd0V4
ZWN1dGFibGUpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQXJyYXlpZnkoKQpAQCAt
NTc3NCw4ICs1Nzg3LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgLy8gV2UgZG9u
J3QgbmVlZCBtZW1vcnkgYmFycmllcnMgc2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGZ1
bmN0aW9uLCBzbyBpdAogICAgICAgICAvLyBtdXN0IGJlIHlvdW5nLgogICAgICAgICBtX291dC5z
dG9yZVB0cihzY29wZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9uX3Njb3BlKTsKLSAg
ICAgICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIoZXhlY3V0YWJsZSksIGZhc3RPYmplY3Qs
IG1faGVhcHMuSlNGdW5jdGlvbl9leGVjdXRhYmxlKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIo
bV9vdXQuaW50UHRyWmVybywgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9uX3JhcmVEYXRh
KTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIoZXhlY3V0YWJsZSksIGZhc3RP
YmplY3QsIG1faGVhcHMuSlNGdW5jdGlvbl9leGVjdXRhYmxlT3JSYXJlRGF0YSk7CiAgICAgICAg
IG11dGF0b3JGZW5jZSgpOwogCiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBt
X291dC5hbmNob3IoZmFzdE9iamVjdCk7CkBAIC02NTQ2LDEwICs2NTU4LDExIEBAIGNsYXNzIExv
d2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmJyYW5jaChpc0Z1bmN0aW9uKGNhbGxlZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVzdWFsbHkoaXNGdW5jdGlvbkJsb2NrKSwgcmFy
ZWx5KHNsb3dQYXRoKSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhpc0Z1bmN0aW9uQmxvY2ssIGhhc1JhcmVEYXRhKTsKLSAgICAgICAgTFZhbHVlIHJh
cmVEYXRhID0gbV9vdXQubG9hZFB0cihjYWxsZWUsIG1faGVhcHMuSlNGdW5jdGlvbl9yYXJlRGF0
YSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChyYXJlRGF0YSksIHJhcmVs
eShzbG93UGF0aCksIHVzdWFsbHkoaGFzUmFyZURhdGEpKTsKKyAgICAgICAgTFZhbHVlIHJhcmVE
YXRhQml0cyA9IG1fb3V0LmxvYWRQdHIoY2FsbGVlLCBtX2hlYXBzLkpTRnVuY3Rpb25fZXhlY3V0
YWJsZU9yUmFyZURhdGEpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQudGVzdElzWmVyb1B0
cihyYXJlRGF0YUJpdHMsIG1fb3V0LmNvbnN0SW50UHRyKEpTRnVuY3Rpb246OnJhcmVEYXRhQml0
KSksIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoaGFzUmFyZURhdGEpKTsKIAogICAgICAgICBt
X291dC5hcHBlbmRUbyhoYXNSYXJlRGF0YSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgcmFy
ZURhdGEgPSBtX291dC5zdWIocmFyZURhdGFCaXRzLCBtX291dC5jb25zdEludFB0cihKU0Z1bmN0
aW9uOjpyYXJlRGF0YUJpdCkpOwogICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gbV9vdXQubG9h
ZFB0cihyYXJlRGF0YSwgbV9oZWFwcy5GdW5jdGlvblJhcmVEYXRhX2FsbG9jYXRvcik7CiAgICAg
ICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBtX291dC5sb2FkUHRyKHJhcmVEYXRhLCBtX2hlYXBzLkZ1
bmN0aW9uUmFyZURhdGFfc3RydWN0dXJlKTsKICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1f
b3V0LmNvbnN0SW50UHRyKDApOwpAQCAtNjU5MCwxMCArNjYwMywxMSBAQCBjbGFzcyBMb3dlckRG
R1RvQjMgewogICAgICAgICBtX291dC5icmFuY2goaXNGdW5jdGlvbihjYWxsZWUsIHByb3ZlblR5
cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1c3VhbGx5KGlzRnVuY3Rpb25CbG9jayksIHJhcmVseShz
bG93Q2FzZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzRnVuY3Rpb25CbG9jaywgaGFz
UmFyZURhdGEpOwotICAgICAgICBMVmFsdWUgcmFyZURhdGEgPSBtX291dC5sb2FkUHRyKGNhbGxl
ZSwgbV9oZWFwcy5KU0Z1bmN0aW9uX3JhcmVEYXRhKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmlzWmVybzY0KHJhcmVEYXRhKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShoYXNSYXJl
RGF0YSkpOworICAgICAgICBMVmFsdWUgcmFyZURhdGFCaXRzID0gbV9vdXQubG9hZFB0cihjYWxs
ZWUsIG1faGVhcHMuSlNGdW5jdGlvbl9leGVjdXRhYmxlT3JSYXJlRGF0YSk7CisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC50ZXN0SXNaZXJvUHRyKHJhcmVEYXRhQml0cywgbV9vdXQuY29uc3RJ
bnRQdHIoSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxs
eShoYXNSYXJlRGF0YSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhc1JhcmVEYXRhLCBo
YXNTdHJ1Y3R1cmUpOworICAgICAgICBMVmFsdWUgcmFyZURhdGEgPSBtX291dC5zdWIocmFyZURh
dGFCaXRzLCBtX291dC5jb25zdEludFB0cihKU0Z1bmN0aW9uOjpyYXJlRGF0YUJpdCkpOwogICAg
ICAgICBMVmFsdWUgc3RydWN0dXJlID0gbV9vdXQubG9hZFB0cihyYXJlRGF0YSwgbV9oZWFwcy5G
dW5jdGlvblJhcmVEYXRhX2ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZV9zdHJ1Y3R1
cmUpOwogICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQoc3RydWN0dXJlKSwgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShoYXNTdHJ1Y3R1cmUpKTsKIApAQCAtNjY0NCwxMCArNjY1
OCwxMSBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBtX291dC5icmFuY2goaXNGdW5j
dGlvbihjYWxsZWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1c3VhbGx5KGlzRnVu
Y3Rpb25CbG9jayksIHJhcmVseShzbG93Q2FzZSkpOwogCiAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNGdW5jdGlvbkJsb2NrLCBoYXNSYXJlRGF0YSk7Ci0g
ICAgICAgIExWYWx1ZSByYXJlRGF0YSA9IG1fb3V0LmxvYWRQdHIoY2FsbGVlLCBtX2hlYXBzLkpT
RnVuY3Rpb25fcmFyZURhdGEpOwotICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQo
cmFyZURhdGEpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1JhcmVEYXRhKSk7CisgICAg
ICAgIExWYWx1ZSByYXJlRGF0YUJpdHMgPSBtX291dC5sb2FkUHRyKGNhbGxlZSwgbV9oZWFwcy5K
U0Z1bmN0aW9uX2V4ZWN1dGFibGVPclJhcmVEYXRhKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LnRlc3RJc1plcm9QdHIocmFyZURhdGFCaXRzLCBtX291dC5jb25zdEludFB0cihKU0Z1bmN0
aW9uOjpyYXJlRGF0YUJpdCkpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGhhc1JhcmVEYXRh
KSk7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaGFzUmFyZURhdGEsIGhhc1N0cnVjdHVyZSk7
CisgICAgICAgIExWYWx1ZSByYXJlRGF0YSA9IG1fb3V0LnN1YihyYXJlRGF0YUJpdHMsIG1fb3V0
LmNvbnN0SW50UHRyKEpTRnVuY3Rpb246OnJhcmVEYXRhQml0KSk7CiAgICAgICAgIExWYWx1ZSBz
dHJ1Y3R1cmUgPSBtX291dC5sb2FkUHRyKHJhcmVEYXRhLCBtX2hlYXBzLkZ1bmN0aW9uUmFyZURh
dGFfaW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlX3N0cnVjdHVyZSk7CiAgICAgICAg
IG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChzdHJ1Y3R1cmUpLCByYXJlbHkoc2xvd0Nhc2Up
LCB1c3VhbGx5KGhhc1N0cnVjdHVyZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAppbmRleCAyNGQzOGI1OGUyODYxMzE1NmUyM2RlMTcwMGFjODZmYmQwY2ExNDJm
Li43ZThlZjc4MjY0MjYwYmZmODBlZjI1NjNkYTEzYzFhNmY4NmMyMmNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTk0OSwxMCArOTQ5LDEwIEBAIHZvaWQg
SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSks
IHJhcmVEYXRhUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVE
YXRhUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
aXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVP
clJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhQml0
KSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6
b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURh
dGFCaXQpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0g
SlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpLCBzdHJ1Y3R1cmVSZWcpOwogCiAgICAgbG9hZFB0cihj
YWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRp
cGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJ
bW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBjNDYzNzlhOWY5ZWNj
YWU3NDRhOGU3YWM4MDg1NTFmZWJmMmZhNTczLi5mMDAyYzAzODc0NDY2ZmE5ZmQyNDlmZjlhMmVj
OTk5OTc5MWJmYmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCkBAIC0xMDY1LDEwICsxMDY1LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBlbWl0
TG9hZFBheWxvYWQoY2FsbGVlLCBjYWxsZWVSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcpKTsKLSAgICBsb2FkMzIoQWRk
cmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZz
ZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmFy
ZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1
Y3R1cmUoKSksIHN0cnVjdHVyZVJlZyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0
ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YUJpdCkpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhy
YXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZkFs
bG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpLCBhbGxvY2F0b3JSZWcpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJv
dG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpLCBz
dHJ1Y3R1cmVSZWcpOwogCiAgICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rp
b25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVh
bCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVD
YWxsZWVPYmplY3RzKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4
IGE4YTBiNTJjZjMwYWJlM2I4OWU0NDUxMDJmZDgxOTJjMTY1NjFmMjguLmVhOWEzM2RlOTNmNjU1
NWE3ZWQ5MTcwMDQzY2JkMzZkMDNlZWM3MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcApAQCAtMTI0MSw5ICsxMjQxLDEwIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVu
Y3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0
LmJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlR1BSKSk7CiAKLSAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICAgICAgY29tcGFyaXNvblZhbHVl
R1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxs
ZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIGNvbXBh
cmlzb25WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IHN0dWJKaXQuYnJh
bmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIGNvbXBhcmlzb25WYWx1ZUdQUiwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpKTsKKyAgICAgICAg
c3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb21wYXJpc29uVmFsdWVHUFIs
IEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFy
ZURhdGFCaXQpLCBjb21wYXJpc29uVmFsdWVHUFIpOworICAgICAgICBoYXNFeGVjdXRhYmxlLmxp
bmsoJnN0dWJKaXQpOwogICAgIH0KIAogICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2goY29t
cGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0cik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggM2U1Njkw
OWVkZjRmNTBkNWE1YzQ5MWEzYjMyOTRhYTVkNzMxNWI4YS4uNzdkMGE1YzlkYTU4YjNmYjUxNDU4
OGQ2OTY2NjMyZjE1MmQzNmYyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcApAQCAtMjAzLDkgKzIwMywxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYgdm0sIENhbGxMaW5r
SW5mbwogICAgIAogICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBKU0Z1bmN0aW9uLgogCi0g
ICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICBHUFJJbmZv
OjpyZWdUNCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBHUFJJ
bmZvOjpyZWdUNCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gaml0LmJyYW5jaFRlc3RQdHIo
Q0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUNCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9m
RXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpLCBHUFJJbmZvOjpyZWdUNCk7
CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOwogICAgIGppdC5sb2FkUHRyKAogICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCiAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUNCwgRXhl
Y3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKApAQCAtMjg5LDcg
KzI5MCwxMCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBu
YXRpdmVGb3JHZW5lcmF0b3IoVk0mIHZtLCBUaHVua0Z1bgogCiAgICAgaWYgKHRodW5rRnVuY3Rp
b25UeXBlID09IFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uKSB7CiAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjIsIEpTRnVu
Y3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50
R1BSMiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6YXJndW1lbnRHUFIyLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRh
KCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBhdXRvIGhhc0V4ZWN1dGFibGUg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OmFyZ3VtZW50
R1BSMiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQp
KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFy
Z3VtZW50R1BSMiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1
bmN0aW9uOjpyYXJlRGF0YUJpdCksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIGhh
c0V4ZWN1dGFibGUubGluaygmaml0KTsKICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24p
LCBKU0VudHJ5UHRyVGFnKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQodGh1bmtGdW5j
dGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkludGVybmFsRnVuY3Rpb24pOwpAQCAtMTIz
Myw5ICsxMjM3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91
bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mIHZtKQogICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNCb3VuZEZ1bmN0aW9uOjpvZmZzZXRPZlRh
cmdldEZ1bmN0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LnN0b3JlQ2VsbChHUFJJ
bmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSk7CiAgICAgCi0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkp
LAotICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVP
clJhcmVEYXRhKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0g
aml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpKTsKKyAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOworCiAgICAg
aml0LmxvYWRQdHIoCiAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKICAgICAgICAgICAg
IEdQUkluZm86OnJlZ1QwLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5
Q2hlY2tGb3IoQ29kZUZvckNhbGwpKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCAyYjBmZTJhZmMwNmZlZGVlNDg2YTA5
NDAzYTBhYTZjMzAxNzJmMGI1Li5hNzNiMzdiNDg1Y2RjYmQ4MzEwYTZlOTk3ZWQ5OGVlOWQ5ZjY5
NmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCkBAIC0xMTQ0LDcgKzExNDQsMTAgQEAgbWFjcm8gZnVuY3Rpb25Gb3JDYWxs
Q29kZUJsb2NrR2V0dGVyKHRhcmdldFJlZ2lzdGVyKQogICAgIGVsc2UKICAgICAgICAgbG9hZHAg
Q2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0YXJnZXRSZWdpc3RlcgogICAgIGVuZAotICAg
IGxvYWRwIEpTRnVuY3Rpb246Om1fZXhlY3V0YWJsZVt0YXJnZXRSZWdpc3Rlcl0sIHRhcmdldFJl
Z2lzdGVyCisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9leGVjdXRhYmxlT3JSYXJlRGF0YVt0YXJn
ZXRSZWdpc3Rlcl0sIHRhcmdldFJlZ2lzdGVyCisgICAgYnRweiB0YXJnZXRSZWdpc3RlciwgKGNv
bnN0ZXhwciBKU0Z1bmN0aW9uOjpyYXJlRGF0YUJpdCksIC5leGVjdXRhYmxlCisgICAgbG9hZHAg
KEZ1bmN0aW9uUmFyZURhdGE6Om1fZXhlY3V0YWJsZSAtIChjb25zdGV4cHIgSlNGdW5jdGlvbjo6
cmFyZURhdGFCaXQpKVt0YXJnZXRSZWdpc3Rlcl0sIHRhcmdldFJlZ2lzdGVyCisuZXhlY3V0YWJs
ZToKICAgICBsb2FkcCBGdW5jdGlvbkV4ZWN1dGFibGU6Om1fY29kZUJsb2NrRm9yQ2FsbFt0YXJn
ZXRSZWdpc3Rlcl0sIHRhcmdldFJlZ2lzdGVyCiAgICAgbG9hZHAgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6bV9jb2RlQmxvY2tbdGFyZ2V0UmVnaXN0ZXJdLCB0YXJnZXRSZWdpc3RlcgogZW5k
CkBAIC0xMTU1LDcgKzExNTgsMTAgQEAgbWFjcm8gZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDb2RlQmxv
Y2tHZXR0ZXIodGFyZ2V0UmVnaXN0ZXIpCiAgICAgZWxzZQogICAgICAgICBsb2FkcCBDYWxsZWUg
KyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHRhcmdldFJlZ2lzdGVyCiAgICAgZW5kCi0gICAgbG9hZHAg
SlNGdW5jdGlvbjo6bV9leGVjdXRhYmxlW3RhcmdldFJlZ2lzdGVyXSwgdGFyZ2V0UmVnaXN0ZXIK
KyAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGVPclJhcmVEYXRhW3RhcmdldFJlZ2lz
dGVyXSwgdGFyZ2V0UmVnaXN0ZXIKKyAgICBidHB6IHRhcmdldFJlZ2lzdGVyLCAoY29uc3RleHBy
IEpTRnVuY3Rpb246OnJhcmVEYXRhQml0KSwgLmV4ZWN1dGFibGUKKyAgICBsb2FkcCAoRnVuY3Rp
b25SYXJlRGF0YTo6bV9leGVjdXRhYmxlIC0gKGNvbnN0ZXhwciBKU0Z1bmN0aW9uOjpyYXJlRGF0
YUJpdCkpW3RhcmdldFJlZ2lzdGVyXSwgdGFyZ2V0UmVnaXN0ZXIKKy5leGVjdXRhYmxlOgogICAg
IGxvYWRwIEZ1bmN0aW9uRXhlY3V0YWJsZTo6bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3RbdGFyZ2V0
UmVnaXN0ZXJdLCB0YXJnZXRSZWdpc3RlcgogICAgIGxvYWRwIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2U6Om1fY29kZUJsb2NrW3RhcmdldFJlZ2lzdGVyXSwgdGFyZ2V0UmVnaXN0ZXIKIGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQppbmRleCA0MTczM2IxZDhmYzI0MDY3NzQ3Y2NmZjBiNTBjYjc1YjY2YzA2
NjBiLi40ZmFjZWIwNjE4MTU5NTE4ODJhMTNiMjE5MzQzNGI4YTA5NDM5NjcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQpAQCAtMjA2Miw3ICsyMDYyLDEwIEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5l
KGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKQogICAgIGVuZAogCiAgICAgbG9hZHAgQ2FsbGVl
ICsgUGF5bG9hZE9mZnNldFtjZnJdLCBhMAotICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fZXhlY3V0
YWJsZVthMF0sIGEyCisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9leGVjdXRhYmxlT3JSYXJlRGF0
YVthMF0sIGEyCisgICAgYnRweiBhMiwgKGNvbnN0ZXhwciBKU0Z1bmN0aW9uOjpyYXJlRGF0YUJp
dCksIC5leGVjdXRhYmxlCisgICAgbG9hZHAgKEZ1bmN0aW9uUmFyZURhdGE6Om1fZXhlY3V0YWJs
ZSAtIChjb25zdGV4cHIgSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpKVthMl0sIGEyCisuZXhlY3V0
YWJsZToKICAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX3Njb3BlW2EwXSwgYTAKICAgICBsb2FkcCBK
U0dsb2JhbE9iamVjdDo6bV92bVthMF0sIGExCiAgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxG
cmFtZVthMV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggZTcwYmU1NDU1ZjQ2OGEzOTVkZmYxZDZiMmVhMDViNGQ2
OTM5YzJjMS4uOGE4NzM2NjdhZGE0NjBjNjY2ZDNlMTY1NzYyOWQ3YzIzMjNiNmJiNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KQEAgLTIxNzcsNyArMjE3NywxMCBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShl
eGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikKICAgICBmdW5jdGlvblByb2xvZ3VlKCkKICAgICBz
dG9yZXAgMCwgQ29kZUJsb2NrW2Nmcl0KICAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgYTAKLSAgICBs
b2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGVbYTBdLCBhMgorICAgIGxvYWRwIEpTRnVuY3Rp
b246Om1fZXhlY3V0YWJsZU9yUmFyZURhdGFbYTBdLCBhMgorICAgIGJ0cHogYTIsIChjb25zdGV4
cHIgSlNGdW5jdGlvbjo6cmFyZURhdGFCaXQpLCAuZXhlY3V0YWJsZQorICAgIGxvYWRwIChGdW5j
dGlvblJhcmVEYXRhOjptX2V4ZWN1dGFibGUgLSAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVE
YXRhQml0KSlbYTJdLCBhMgorLmV4ZWN1dGFibGU6CiAgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9z
Y29wZVthMF0sIGEwCiAgICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fdm1bYTBdLCBhMQogICAg
IHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbYTFdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwCmluZGV4IDRmNzQ5YTg1MTFjZTAx
OTRiMTEzYzdlYTc2OTAxOWIwMmNkZGRkNWUuLjAwOGJkMDY0MWU4ZjI1OTY1ZTEyM2RmOTFhOWJm
ZDU3MTc3MTRhNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUmFyZURhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUmFyZURhdGEuY3BwCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gRnVuY3Rpb25SYXJlRGF0YTo6c19pbmZvID0geyAiRnVuY3Rpb25SYXJl
RGF0YSIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoRnVu
Y3Rpb25SYXJlRGF0YSkgfTsKIAotRnVuY3Rpb25SYXJlRGF0YSogRnVuY3Rpb25SYXJlRGF0YTo6
Y3JlYXRlKFZNJiB2bSkKK0Z1bmN0aW9uUmFyZURhdGEqIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0
ZShWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQogewotICAgIEZ1bmN0aW9uUmFy
ZURhdGEqIHJhcmVEYXRhID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25SYXJl
RGF0YT4odm0uaGVhcCkpIEZ1bmN0aW9uUmFyZURhdGEodm0pOworICAgIEZ1bmN0aW9uUmFyZURh
dGEqIHJhcmVEYXRhID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25SYXJlRGF0
YT4odm0uaGVhcCkpIEZ1bmN0aW9uUmFyZURhdGEodm0sIGV4ZWN1dGFibGUpOwogICAgIHJhcmVE
YXRhLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIHJhcmVEYXRhOwogfQpAQCAtNjAs
MTUgKzYwLDE3IEBAIHZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHJhcmVEYXRhLT5tX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIHJhcmVEYXRhLT5tX2lu
dGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlKTsK
KyAgICB2aXNpdG9yLmFwcGVuZChyYXJlRGF0YS0+bV9leGVjdXRhYmxlKTsKIH0KIAotRnVuY3Rp
b25SYXJlRGF0YTo6RnVuY3Rpb25SYXJlRGF0YShWTSYgdm0pCitGdW5jdGlvblJhcmVEYXRhOjpG
dW5jdGlvblJhcmVEYXRhKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiAgICAg
OiBCYXNlKHZtLCB2bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9v
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpCiAgICAgLy8gV2UgaW5pdGlhbGl6ZSBibGluZCBzbyB0
aGF0IGNoYW5nZXMgdG8gdGhlIHByb3RvdHlwZSBhZnRlciBmdW5jdGlvbiBjcmVhdGlvbiBidXQg
YmVmb3JlCiAgICAgLy8gdGhlIGZpcnN0IGFsbG9jYXRpb24gZG9uJ3QgZGlzYWJsZSBvcHRpbWl6
YXRpb25zLiBUaGlzIGlzbid0IHN1cGVyIGltcG9ydGFudCwgc2luY2UgdGhlCiAgICAgLy8gZnVu
Y3Rpb24gaXMgdW5saWtlbHkgdG8gYWxsb2NhdGUgYSByYXJlIGRhdGEgdW50aWwgdGhlIGZpcnN0
IGFsbG9jYXRpb24gYW55d2F5LgogICAgICwgbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRT
ZXQoQ2xlYXJXYXRjaHBvaW50KQorICAgICwgbV9leGVjdXRhYmxlKHZtLCB0aGlzLCBleGVjdXRh
YmxlKQogICAgICwgbV9oYXNSZWlmaWVkTGVuZ3RoKGZhbHNlKQogICAgICwgbV9oYXNSZWlmaWVk
TmFtZShmYWxzZSkKICAgICAsIG1faGFzTW9kaWZpZWRMZW5ndGgoZmFsc2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgKaW5kZXggYmRhNWQ3
YTY5YmJmNzNjN2RlZTM4ZmVlM2MyOTNjYzI4NmJhZjU5OC4uOWJhZDdiM2RkYzQxNjQ4YzViMWE3
MjcxY2Y4OTBkYTk0ODZkMDE0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uUmFyZURhdGEuaApAQCAtMzMsNiArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIG5hbWVzcGFjZSBERkcgewpAQCAtNTAsNyArNTEsNyBA
QCBjbGFzcyBGdW5jdGlvblJhcmVEYXRhIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0g
ICAgc3RhdGljIEZ1bmN0aW9uUmFyZURhdGEqIGNyZWF0ZShWTSYpOworICAgIHN0YXRpYyBGdW5j
dGlvblJhcmVEYXRhKiBjcmVhdGUoVk0mLCBFeGVjdXRhYmxlQmFzZSopOwogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCkBAIC03Miw2ICs3Myw3
IEBAIGNsYXNzIEZ1bmN0aW9uUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2lu
dFNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvblJhcmVEYXRhLCBtX2FsbG9j
YXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCk7IH0KICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZf
dCBvZmZzZXRPZkludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihGdW5jdGlvblJhcmVEYXRhLCBtX2ludGVybmFsRnVuY3Rpb25BbGxvY2F0
aW9uUHJvZmlsZSk7IH0KICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkJvdW5k
RnVuY3Rpb25TdHJ1Y3R1cmUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25SYXJl
RGF0YSwgbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRy
ZGlmZl90IG9mZnNldE9mRXhlY3V0YWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5j
dGlvblJhcmVEYXRhLCBtX2V4ZWN1dGFibGUpOyB9CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZUNsZWFyaW5nV2F0Y2hwb2ludCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvblJhcmVEYXRhLCBtX2FsbG9jYXRpb25Qcm9maWxlQ2xl
YXJpbmdXYXRjaHBvaW50KTsgfQogCiAgICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJv
dG90eXBlKiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpCkBAIC0xMTQsNiArMTE2LDggQEAgY2xh
c3MgRnVuY3Rpb25SYXJlRGF0YSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIFN0cnVjdHVy
ZSogZ2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fYm91bmRGdW5jdGlvblN0
cnVjdHVyZS5nZXQoKTsgfQogICAgIHZvaWQgc2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKSB7IG1fYm91bmRGdW5jdGlvblN0cnVjdHVyZS5zZXQo
dm0sIHRoaXMsIHN0cnVjdHVyZSk7IH0KIAorICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRhYmxlLmdldCgpOyB9CisKICAgICBib29sIGhhc1Jl
aWZpZWRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2hhc1JlaWZpZWRMZW5ndGg7IH0KICAgICB2
b2lkIHNldEhhc1JlaWZpZWRMZW5ndGgoKSB7IG1faGFzUmVpZmllZExlbmd0aCA9IHRydWU7IH0K
ICAgICBib29sIGhhc1JlaWZpZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9oYXNSZWlmaWVkTmFt
ZTsgfQpAQCAtMTM1LDcgKzEzOSw3IEBAIGNsYXNzIEZ1bmN0aW9uUmFyZURhdGEgZmluYWwgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICBjbGFzcyBBbGxvY2F0aW9uUHJvZmlsZUNsZWFyaW5nV2F0Y2hw
b2ludDsKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEZ1bmN0aW9uUmFyZURhdGEoVk0mKTsK
KyAgICBleHBsaWNpdCBGdW5jdGlvblJhcmVEYXRhKFZNJiwgRXhlY3V0YWJsZUJhc2UqKTsKICAg
ICB+RnVuY3Rpb25SYXJlRGF0YSgpOwogCiBwcml2YXRlOgpAQCAtMTU4LDYgKzE2Miw3IEBAIGNs
YXNzIEZ1bmN0aW9uUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBJbmxpbmVX
YXRjaHBvaW50U2V0IG1fYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0OwogICAgIEludGVy
bmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSBtX2ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9u
UHJvZmlsZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2JvdW5kRnVuY3Rpb25TdHJ1
Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX2V4ZWN1dGFibGU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEFsbG9jYXRpb25Qcm9maWxlQ2xlYXJpbmdXYXRjaHBvaW50PiBt
X2FsbG9jYXRpb25Qcm9maWxlQ2xlYXJpbmdXYXRjaHBvaW50OwogICAgIGJvb2wgbV9oYXNSZWlm
aWVkTGVuZ3RoIDogMTsKICAgICBib29sIG1faGFzUmVpZmllZE5hbWUgOiAxOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKaW5kZXggNDE4
NjU5YWEyZTRkZWEzY2YzYzk0NDZlMDJiNTNiYmM5NWM5MmYyNC4uYTYzZWJhYWM5MjY2MTk1OGUz
ZTYzMTA3MmNkOWJiZmYwNjhlNzBiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCkBAIC0yMDIsNyArMjAyLDcgQEAgSlNCb3VuZEZ1
bmN0aW9uKiBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEoKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0
Qm91bmRGdW5jdGlvbihpc0pTRnVuY3Rpb24sIGNhbkNvbnN0cnVjdCk7CiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBnZXRCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3Qs
IHRhcmdldEZ1bmN0aW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKLSAgICBKU0JvdW5kRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNCb3VuZEZ1bmN0aW9uPih2bS5oZWFwKSkgSlNCb3VuZEZ1bmN0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgdGFyZ2V0RnVuY3Rpb24sIGJvdW5kVGhpcywgYm91bmRBcmdz
LCBuYW1lLCBsZW5ndGgpOworICAgIEpTQm91bmRGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU0JvdW5kRnVuY3Rpb24+KHZtLmhlYXApKSBKU0JvdW5kRnVu
Y3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB0YXJnZXRGdW5j
dGlvbiwgYm91bmRUaGlzLCBib3VuZEFyZ3MsIG5hbWUsIGxlbmd0aCk7CiAKICAgICBmdW5jdGlv
bi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCk7CiAgICAgcmV0dXJuIGZ1
bmN0aW9uOwpAQCAtMjEzLDggKzIxMyw4IEBAIGJvb2wgSlNCb3VuZEZ1bmN0aW9uOjpjdXN0b21I
YXNJbnN0YW5jZShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAg
cmV0dXJuIGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPihvYmplY3QpLT5tX3RhcmdldEZ1bmN0aW9u
LT5oYXNJbnN0YW5jZShnbG9iYWxPYmplY3QsIHZhbHVlKTsKIH0KIAotSlNCb3VuZEZ1bmN0aW9u
OjpKU0JvdW5kRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJv
dW5kVGhpcywgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGJvdW5kQXJncywgSlNTdHJpbmcqIG5hbWUs
IGludCBsZW5ndGgpCi0gICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK0pT
Qm91bmRGdW5jdGlvbjo6SlNCb3VuZEZ1bmN0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIEpTSW1t
dXRhYmxlQnV0dGVyZmx5KiBib3VuZEFyZ3MsIEpTU3RyaW5nKiBuYW1lLCBpbnQgbGVuZ3RoKQor
ICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAg
LCBtX3RhcmdldEZ1bmN0aW9uKHZtLCB0aGlzLCB0YXJnZXRGdW5jdGlvbikKICAgICAsIG1fYm91
bmRUaGlzKHZtLCB0aGlzLCBib3VuZFRoaXMpCiAgICAgLCBtX2JvdW5kQXJncyh2bSwgdGhpcywg
Ym91bmRBcmdzLCBXcml0ZUJhcnJpZXI8SlNJbW11dGFibGVCdXR0ZXJmbHk+OjpNYXlCZU51bGwp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCmlu
ZGV4IDczYjAxNDVmZGJlMDYzYWQwYjY2ZGI3ODdlMWY1NzFmMjliMmYzN2QuLjFkYzE1ZDhmNTky
NjMzMjI0NmE0NjZkYzliMDQxNDQwNzk5M2M0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIEpT
Qm91bmRGdW5jdGlvbiBmaW5hbCA6IHB1YmxpYyBKU0Z1bmN0aW9uIHsKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6Ci0gICAg
SlNCb3VuZEZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVj
dCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU0ltbXV0YWJsZUJ1dHRlcmZs
eSogYm91bmRBcmdzLCBKU1N0cmluZyogbmFtZSwgaW50IGxlbmd0aCk7CisgICAgSlNCb3VuZEZ1
bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNJbW11dGFi
bGVCdXR0ZXJmbHkqIGJvdW5kQXJncywgSlNTdHJpbmcqIG5hbWUsIGludCBsZW5ndGgpOwogICAg
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgaW50IGxl
bmd0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAKaW5kZXggOGY4ZjA4OTAwNDMyOTNm
ZGVhYTllNjlhNjg4ZTIwOTNmMWIzN2U4My4uN2JiMGI1YWExMDU1YTYwNzM0YTI5MjUxNDE0NzUw
ZjUxZjRmYmYyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAKQEAgLTYwLDggKzYwLDgg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uOjpjdXN0b21HZXR0ZXJTZXR0ZXJGdW4KICAgICByZXR1cm4gY3VzdG9tR2V0dGVyU2V0dGVy
LT5nZXR0ZXIoKShnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBjdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi0+cHJvcGVydHlOYW1lKCkpOwogfQogCi1KU0N1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uOjpKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IFR5cGUgdHlwZSwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUpCi0gICAgOiBCYXNl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rp
b246OkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxl
KiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgVHlwZSB0eXBlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFt
ZSkKKyAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQog
ICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpCiB7
CkBAIC03Nyw3ICs3Nyw3IEBAIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvCiAgICAgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBTdHJpbmcocHJv
cGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPmN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uU3RydWN0dXJlKCk7Ci0gICAg
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uPih2bS5oZWFwKSkgSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHR5cGUs
IHByb3BlcnR5TmFtZSk7CisgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiogZnVuY3Rp
b24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uPih2bS5oZWFwKSkgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbih2bSwgZXhlY3V0YWJs
ZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHR5cGUsIHByb3BlcnR5TmFtZSk7CiAKICAgICAv
LyBDYW4ndCBkbyB0aGlzIGR1cmluZyBpbml0aWFsaXphdGlvbiBiZWNhdXNlIGdldEhvc3RGdW5j
dGlvbiBtaWdodCBkbyBhIEdDIGFsbG9jYXRpb24uCiAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0
aW9uKHZtLCBleGVjdXRhYmxlLCBnZXR0ZXJTZXR0ZXIsIG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbi5oCmluZGV4IDRmZWQwZWQ0NmI5ZmJlNmE5ZmMyNWNjZmVmNGUyODBlN2IwMDQ3NmQuLjg2
Mzg1YjQyNzE3YWNiMGNjZjZkMjhkNTIwYjBmMTI4YTllMzMyMDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uLmgKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbiBmaW5hbCA6IHB1YmxpYyBKU0Z1bmN0aW9uIHsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6Ci0gICAgSlNDdXN0b21H
ZXR0ZXJTZXR0ZXJGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgVHlw
ZSwgY29uc3QgUHJvcGVydHlOYW1lJik7CisgICAgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFR5
cGUsIGNvbnN0IFByb3BlcnR5TmFtZSYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBO
YXRpdmVFeGVjdXRhYmxlKiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgY29uc3QgU3RyaW5nJik7CiAK
ICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbkNhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggNTM0MDk2Y2RlMWI1ZTRh
MTQ0OGEzODgzNDhmOTgzYzc4YzA1Y2I0Yy4uM2IyZTJhODhlNTg4N2VlY2E4MGQ4OGYwNGE3OTdm
NGM5Y2FlNWQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50IGxlbmd0aCwKIHsKICAgICBO
YXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKG5hdGl2ZUZ1
bmN0aW9uLCBpbnRyaW5zaWMsIG5hdGl2ZUNvbnN0cnVjdG9yLCBzaWduYXR1cmUsIG5hbWUpOwog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5ob3N0RnVuY3Rpb25TdHJ1
Y3R1cmUoKTsKLSAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNGdW5jdGlvbih2bSwgZXhlY3V0YWJs
ZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwogICAgIC8vIENhbid0IGRvIHRoaXMgZHVyaW5n
IGluaXRpYWxpemF0aW9uIGJlY2F1c2UgZ2V0SG9zdEZ1bmN0aW9uIG1pZ2h0IGRvIGEgR0MgYWxs
b2NhdGlvbi4KICAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxl
bmd0aCwgbmFtZSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwpAQCAtMTA3LDE0ICsxMDcsMTQgQEAg
SlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlRnVuY3Rpb25UaGF0TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChWTSYgdm0sIEpTR2xvYmEKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uLCBpbnRyaW5zaWMsIG5hdGl2ZUNv
bnN0cnVjdG9yLCBzaWduYXR1cmUsIG5hbWUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIEpTRnVuY3Rpb246OlN0cnVjdHVy
ZUZsYWdzIHwgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCksIEpTRnVuY3Rpb246OmluZm8oKSk7CiAg
ICAgZ2xvYmFsT2JqZWN0LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5maXJl
QWxsKGdsb2JhbE9iamVjdC0+dm0oKSwgIkFsbG9jYXRlZCBtYXNxdWVyYWRpbmcgb2JqZWN0Iik7
Ci0gICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNGdW5jdGlvbj4odm0uaGVhcCkpIEpTRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKTsKICAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4
ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCi1KU0Z1
bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgTmF0
aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSkKLSAgICAsIG1fZXhlY3V0YWJsZSgpCisgICAgLCBtX2V4ZWN1dGFibGVPclJhcmVEYXRh
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGV4ZWN1dGFibGUpKQogewogICAgIGFzc2VydFR5cGVJ
bmZvRmxhZ0ludmFyaWFudHMoKTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5nbG9iYWxPYmplY3Qo
KSA9PSBnbG9iYWxPYmplY3QpOwpAQCAtMTMwLDE0ICsxMzAsMTMgQEAgdm9pZCBKU0Z1bmN0aW9u
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgQVNTRVJUKG1ldGhvZFRhYmxlKHZtKS0+Z2V0
Q2FsbERhdGEgPT0gJkpTRnVuY3Rpb246OmdldENhbGxEYXRhKTsKIH0KIAotdm9pZCBKU0Z1bmN0
aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgSlNGdW5jdGlvbjo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiwgaW50IGxlbmd0aCwgY29uc3QgU3Ry
aW5nJiBuYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIEFTU0VSVCh0eXBlKCkgPT0gSlNGdW5jdGlvblR5
cGUpOwogICAgIEFTU0VSVChtZXRob2RUYWJsZSh2bSktPmdldENvbnN0cnVjdERhdGEgPT0gJkpT
RnVuY3Rpb246OmdldENvbnN0cnVjdERhdGEpOwogICAgIEFTU0VSVChtZXRob2RUYWJsZSh2bSkt
PmdldENhbGxEYXRhID09ICZKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YSk7Ci0gICAgbV9leGVjdXRh
YmxlLnNldCh2bSwgdGhpcywgZXhlY3V0YWJsZSk7CiAKICAgICAvLyBTb21lIE5hdGl2ZUV4ZWN1
dGFibGUgZnVuY3Rpb25zLCBsaWtlIEpTQm91bmRGdW5jdGlvbiwgZGVjaWRlIHRvIGxhemlseSBh
bGxvY2F0ZSB0aGVpciBuYW1lIHN0cmluZyAvIGxlbmd0aC4KICAgICBpZiAodGhpcy0+aW5oZXJp
dHM8SlNCb3VuZEZ1bmN0aW9uPih2bSkpCkBAIC0xNTAsMTUgKzE0OSwxOSBAQCB2b2lkIEpTRnVu
Y3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSwgaW50IGxlbmd0aAogCiBGdW5jdGlvblJhcmVEYXRhKiBKU0Z1bmN0aW9uOjphbGxvY2F0ZVJh
cmVEYXRhKFZNJiB2bSkKIHsKLSAgICBBU1NFUlQoIW1fcmFyZURhdGEpOwotICAgIEZ1bmN0aW9u
UmFyZURhdGEqIHJhcmVEYXRhID0gRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlKHZtKTsKKyAgICB1
aW50cHRyX3QgZXhlY3V0YWJsZU9yUmFyZURhdGEgPSBtX2V4ZWN1dGFibGVPclJhcmVEYXRhOwor
ICAgIEFTU0VSVCghKGV4ZWN1dGFibGVPclJhcmVEYXRhICYgcmFyZURhdGFCaXQpKTsKKyAgICBG
dW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZSh2bSwg
Yml0d2lzZV9jYXN0PEV4ZWN1dGFibGVCYXNlKj4oZXhlY3V0YWJsZU9yUmFyZURhdGEpKTsKKyAg
ICBleGVjdXRhYmxlT3JSYXJlRGF0YSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHJhcmVEYXRh
KSB8IHJhcmVEYXRhQml0OwogCiAgICAgLy8gQSBERkcgY29tcGlsYXRpb24gdGhyZWFkIG1heSBi
ZSB0cnlpbmcgdG8gcmVhZCB0aGUgcmFyZSBkYXRhCiAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUg
dGhhdCBpdCBzZWVzIGl0IHByb3Blcmx5IGFsbG9jYXRlZAogICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CiAKLSAgICBtX3JhcmVEYXRhLnNldCh2bSwgdGhpcywgcmFyZURhdGEpOwotICAgIHJl
dHVybiBtX3JhcmVEYXRhLmdldCgpOworICAgIG1fZXhlY3V0YWJsZU9yUmFyZURhdGEgPSBleGVj
dXRhYmxlT3JSYXJlRGF0YTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCByYXJlRGF0
YSk7CisKKyAgICByZXR1cm4gcmFyZURhdGE7CiB9CiAKIEpTT2JqZWN0KiBKU0Z1bmN0aW9uOjpw
cm90b3R5cGVGb3JDb25zdHJ1Y3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQpAQCAtMTg3LDI5ICsxOTAsMzUgQEAgSlNPYmplY3QqIEpTRnVuY3Rpb246OnByb3RvdHlw
ZUZvckNvbnN0cnVjdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKIAogRnVu
Y3Rpb25SYXJlRGF0YSogSlNGdW5jdGlvbjo6YWxsb2NhdGVBbmRJbml0aWFsaXplUmFyZURhdGEo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc2l6ZV90IGlubGluZUNhcGFjaXR5KQogewot
ICAgIEFTU0VSVCghbV9yYXJlRGF0YSk7CisgICAgdWludHB0cl90IGV4ZWN1dGFibGVPclJhcmVE
YXRhID0gbV9leGVjdXRhYmxlT3JSYXJlRGF0YTsKKyAgICBBU1NFUlQoIShleGVjdXRhYmxlT3JS
YXJlRGF0YSAmIHJhcmVEYXRhQml0KSk7CiAgICAgQVNTRVJUKGNhblVzZUFsbG9jYXRpb25Qcm9m
aWxlKCkpOwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU09iamVjdCog
cHJvdG90eXBlID0gcHJvdG90eXBlRm9yQ29uc3RydWN0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwot
ICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRl
KHZtKTsKKyAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IEZ1bmN0aW9uUmFyZURhdGE6
OmNyZWF0ZSh2bSwgYml0d2lzZV9jYXN0PEV4ZWN1dGFibGVCYXNlKj4oZXhlY3V0YWJsZU9yUmFy
ZURhdGEpKTsKICAgICByYXJlRGF0YS0+aW5pdGlhbGl6ZU9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KHZtLCB0aGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSwgdGhp
cyk7CisgICAgZXhlY3V0YWJsZU9yUmFyZURhdGEgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihy
YXJlRGF0YSkgfCByYXJlRGF0YUJpdDsKIAogICAgIC8vIEEgREZHIGNvbXBpbGF0aW9uIHRocmVh
ZCBtYXkgYmUgdHJ5aW5nIHRvIHJlYWQgdGhlIHJhcmUgZGF0YQogICAgIC8vIFdlIHdhbnQgdG8g
ZW5zdXJlIHRoYXQgaXQgc2VlcyBpdCBwcm9wZXJseSBhbGxvY2F0ZWQKICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogCi0gICAgbV9yYXJlRGF0YS5zZXQodm0sIHRoaXMsIHJhcmVEYXRhKTsK
LSAgICByZXR1cm4gbV9yYXJlRGF0YS5nZXQoKTsKKyAgICBtX2V4ZWN1dGFibGVPclJhcmVEYXRh
ID0gZXhlY3V0YWJsZU9yUmFyZURhdGE7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywg
cmFyZURhdGEpOworCisgICAgcmV0dXJuIHJhcmVEYXRhOwogfQogCiBGdW5jdGlvblJhcmVEYXRh
KiBKU0Z1bmN0aW9uOjppbml0aWFsaXplUmFyZURhdGEoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgc2l6ZV90IGlubGluZUNhcGFjaXR5KQogewotICAgIEFTU0VSVCghIW1fcmFyZURhdGEp
OworICAgIHVpbnRwdHJfdCBleGVjdXRhYmxlT3JSYXJlRGF0YSA9IG1fZXhlY3V0YWJsZU9yUmFy
ZURhdGE7CisgICAgQVNTRVJUKGV4ZWN1dGFibGVPclJhcmVEYXRhICYgcmFyZURhdGFCaXQpOwog
ICAgIEFTU0VSVChjYW5Vc2VBbGxvY2F0aW9uUHJvZmlsZSgpKTsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IHByb3RvdHlwZUZvckNv
bnN0cnVjdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBtX3JhcmVEYXRhLT5pbml0aWFsaXpl
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUodm0sIHRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm90b3R5
cGUsIGlubGluZUNhcGFjaXR5LCB0aGlzKTsKLSAgICByZXR1cm4gbV9yYXJlRGF0YS5nZXQoKTsK
KyAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGJpdHdpc2VfY2FzdDxGdW5jdGlvblJh
cmVEYXRhKj4oZXhlY3V0YWJsZU9yUmFyZURhdGEgJiB+cmFyZURhdGFCaXQpOworICAgIHJhcmVE
YXRhLT5pbml0aWFsaXplT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUodm0sIHRoaXMtPmdsb2JhbE9i
amVjdCgpLCBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5LCB0aGlzKTsKKyAgICByZXR1cm4gcmFy
ZURhdGE7CiB9CiAKIFN0cmluZyBKU0Z1bmN0aW9uOjpuYW1lKFZNJiB2bSkKQEAgLTI2Myw4ICsy
NzIsNyBAQCB2b2lkIEpTRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKIAotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZXhlY3V0YWJsZSk7Ci0gICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yYXJlRGF0YSk7CisgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odGhpc09iamVjdC0+bV9leGVjdXRhYmxlT3JSYXJlRGF0YSkgJiB+cmFyZURhdGFCaXQpKTsK
IH0KIAogQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsLCBDYWxs
RGF0YSYgY2FsbERhdGEpCkBAIC01NTksOCArNTY3LDggQEAgYm9vbCBKU0Z1bmN0aW9uOjpwdXQo
SlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHIKICAgICAgICAgUHJvcGVydHlTbG90IGdldFNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBnZXRTbG90KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOwotICAgICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkKLSAgICAg
ICAgICAgIHRoaXNPYmplY3QtPm1fcmFyZURhdGEtPmNsZWFyKCJTdG9yZSB0byBwcm90b3R5cGUg
cHJvcGVydHkgb2YgYSBmdW5jdGlvbiIpOworICAgICAgICBpZiAoRnVuY3Rpb25SYXJlRGF0YSog
cmFyZURhdGEgPSB0aGlzT2JqZWN0LT5yYXJlRGF0YSgpKQorICAgICAgICAgICAgcmFyZURhdGEt
PmNsZWFyKCJTdG9yZSB0byBwcm90b3R5cGUgcHJvcGVydHkgb2YgYSBmdW5jdGlvbiIpOwogICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKICAgICB9CiAKQEAgLTYzOCw4
ICs2NDYsOCBAQCBib29sIEpTRnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1
aXJ5KTsKICAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIGlmICh0aGlz
T2JqZWN0LT5tX3JhcmVEYXRhKQotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+
Y2xlYXIoIlN0b3JlIHRvIHByb3RvdHlwZSBwcm9wZXJ0eSBvZiBhIGZ1bmN0aW9uIik7CisgICAg
ICAgIGlmIChGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXNPYmplY3QtPnJhcmVEYXRh
KCkpCisgICAgICAgICAgICByYXJlRGF0YS0+Y2xlYXIoIlN0b3JlIHRvIHByb3RvdHlwZSBwcm9w
ZXJ0eSBvZiBhIGZ1bmN0aW9uIik7CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
QmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAppbmRleCBkYzA1NzIwZGIyMjAwNzliY2IxNzg3
Y2YwZDAzODU2NTk0MTcwMGJhLi5lOGM5MDFhZmE4ZGJlMmMzZDA0MzczYzA4ZDUzNTgwN2M3MTdk
YTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCkBAIC02
MSw2ICs2MSw3IEBAIGNsYXNzIEpTRnVuY3Rpb24gOiBwdWJsaWMgSlNDYWxsZWUgewogICAgIGZy
aWVuZCBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uOwogCiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50cHRyX3QgcmFyZURhdGFCaXQgPSAweDE7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQpAQCAtOTEsNyArOTIsMTMgQEAgY2xhc3MgSlNGdW5jdGlvbiA6
IHB1YmxpYyBKU0NhbGxlZSB7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGRpc3BsYXlO
YW1lKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU3RyaW5nIGNhbGN1bGF0ZWRE
aXNwbGF5TmFtZShWTSYpOwogCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKSBjb25z
dCB7IHJldHVybiBtX2V4ZWN1dGFibGUuZ2V0KCk7IH0KKyAgICBFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICB1aW50cHRyX3QgZXhlY3V0YWJsZU9yUmFy
ZURhdGEgPSBtX2V4ZWN1dGFibGVPclJhcmVEYXRhOworICAgICAgICBpZiAoZXhlY3V0YWJsZU9y
UmFyZURhdGEgJiByYXJlRGF0YUJpdCkKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
RnVuY3Rpb25SYXJlRGF0YSo+KGV4ZWN1dGFibGVPclJhcmVEYXRhICYgfnJhcmVEYXRhQml0KS0+
ZXhlY3V0YWJsZSgpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEV4ZWN1dGFibGVCYXNl
Kj4oZXhlY3V0YWJsZU9yUmFyZURhdGEpOworICAgIH0KIAogICAgIC8vIFRvIGNhbGwgYW55IG9m
IHRoZXNlIG1ldGhvZHMgaW5jbHVkZSBKU0Z1bmN0aW9uSW5saW5lcy5oCiAgICAgYm9vbCBpc0hv
c3RGdW5jdGlvbigpIGNvbnN0OwpAQCAtMTE0LDM0ICsxMjEsMzEgQEAgY2xhc3MgSlNGdW5jdGlv
biA6IHB1YmxpYyBKU0NhbGxlZSB7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIENvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJik7CiAKLSAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkV4ZWN1dGFi
bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBt
X2V4ZWN1dGFibGUpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNl
dE9mUmFyZURhdGEoKQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mRXhlY3V0
YWJsZU9yUmFyZURhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U0Z1bmN0aW9uLCBtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGVPclJhcmVEYXRhKTsKICAgICB9CiAKICAgICBGdW5jdGlv
blJhcmVEYXRhKiByYXJlRGF0YShWTSYgdm0pCiAgICAgewotICAgICAgICBpZiAoVU5MSUtFTFko
IW1fcmFyZURhdGEpKQorICAgICAgICB1aW50cHRyX3QgZXhlY3V0YWJsZU9yUmFyZURhdGEgPSBt
X2V4ZWN1dGFibGVPclJhcmVEYXRhOworICAgICAgICBpZiAoVU5MSUtFTFkoIShleGVjdXRhYmxl
T3JSYXJlRGF0YSAmIHJhcmVEYXRhQml0KSkpCiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVS
YXJlRGF0YSh2bSk7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLmdldCgpOworICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihleGVjdXRhYmxlT3JSYXJlRGF0
YSAmIH5yYXJlRGF0YUJpdCk7CiAgICAgfQogCiAgICAgRnVuY3Rpb25SYXJlRGF0YSogZW5zdXJl
UmFyZURhdGFBbmRBbGxvY2F0aW9uUHJvZmlsZShKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIGlu
bGluZUNhcGFjaXR5KTsKIAogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhKCkKICAgICB7
Ci0gICAgICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKTsK
LQorICAgICAgICB1aW50cHRyX3QgZXhlY3V0YWJsZU9yUmFyZURhdGEgPSBtX2V4ZWN1dGFibGVP
clJhcmVEYXRhOwogICAgICAgICAvLyBUaGUgSlMgdGhyZWFkIG1heSBiZSBjb25jdXJyZW50bHkg
Y3JlYXRpbmcgdGhlIHJhcmUgZGF0YQogICAgICAgICAvLyBJZiB3ZSBzZWUgaXQsIHdlIHdhbnQg
dG8gZW5zdXJlIGl0IGhhcyBiZWVuIHByb3Blcmx5IGNyZWF0ZWQKICAgICAgICAgV1RGOjpsb2Fk
TG9hZEZlbmNlKCk7CiAKLSAgICAgICAgcmV0dXJuIHJhcmVEYXRhOworICAgICAgICBpZiAoZXhl
Y3V0YWJsZU9yUmFyZURhdGEgJiByYXJlRGF0YUJpdCkKKyAgICAgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8RnVuY3Rpb25SYXJlRGF0YSo+KGV4ZWN1dGFibGVPclJhcmVEYXRhICYgfnJhcmVE
YXRhQml0KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgYm9vbCBpc0hv
c3RPckJ1aWx0aW5GdW5jdGlvbigpIGNvbnN0OwpAQCAtMTY3LDcgKzE3MSw3IEBAIGNsYXNzIEpT
RnVuY3Rpb24gOiBwdWJsaWMgSlNDYWxsZWUgewogICAgIGJvb2wgYXJlTmFtZUFuZExlbmd0aE9y
aWdpbmFsKFZNJik7CiAKIHByb3RlY3RlZDoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Z1bmN0
aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBKU0Z1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKik7CiAgICAgSlNGdW5jdGlvbihWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpT
U2NvcGUqLCBTdHJ1Y3R1cmUqKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRp
dmVFeGVjdXRhYmxlKiwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKQEAgLTIyMSw4
ICsyMjUsNyBAQCBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTQ2FsbGVlIHsKICAgICBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNhbGxl
ckdldHRlcihKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwog
Ci0gICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX2V4ZWN1dGFibGU7Ci0gICAgV3Jp
dGVCYXJyaWVyPEZ1bmN0aW9uUmFyZURhdGE+IG1fcmFyZURhdGE7CisgICAgdWludHB0cl90IG1f
ZXhlY3V0YWJsZU9yUmFyZURhdGE7CiB9OwogCiBjbGFzcyBKU1N0cmljdEZ1bmN0aW9uIGZpbmFs
IDogcHVibGljIEpTRnVuY3Rpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKaW5kZXggYjM0YzE2YmI0YjBkYjZjZDA2MjczNTI5YTU1
ZTQ1ZTMzOWY3MjdhZC4uZGY0OGJlMTlmMTIxYmY5ODJhYmRiZWJjMmQ2N2Q5ODJhY2IxYWRkOCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5l
cy5oCkBAIC00MCw4ICs0MCw3IEBAIGlubGluZSBKU0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVh
dGVXaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KAogCiBpbmxpbmUgSlNGdW5j
dGlvbjo6SlNGdW5jdGlvbihWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwg
SlNTY29wZSogc2NvcGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogQmFzZSh2bSwgc2Nv
cGUsIHN0cnVjdHVyZSkKLSAgICAsIG1fZXhlY3V0YWJsZSh2bSwgdGhpcywgZXhlY3V0YWJsZSkK
LSAgICAsIG1fcmFyZURhdGEoKQorICAgICwgbV9leGVjdXRhYmxlT3JSYXJlRGF0YShiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihleGVjdXRhYmxlKSkKIHsKICAgICBhc3NlcnRUeXBlSW5mb0ZsYWdJ
bnZhcmlhbnRzKCk7CiB9CkBAIC00OSwxMyArNDgsMTMgQEAgaW5saW5lIEpTRnVuY3Rpb246OkpT
RnVuY3Rpb24oVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUq
IHMKIGlubGluZSBGdW5jdGlvbkV4ZWN1dGFibGUqIEpTRnVuY3Rpb246OmpzRXhlY3V0YWJsZSgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9leGVjdXRhYmxlLmdldCgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSgpKTsKIH0KIAogaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb24oKSBjb25z
dAogewotICAgIEFTU0VSVChtX2V4ZWN1dGFibGUpOwotICAgIHJldHVybiBtX2V4ZWN1dGFibGUt
PmlzSG9zdEZ1bmN0aW9uKCk7CisgICAgQVNTRVJUKGV4ZWN1dGFibGUoKSk7CisgICAgcmV0dXJu
IGV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKTsKIH0KIAogaW5saW5lIEludHJpbnNpYyBK
U0Z1bmN0aW9uOjppbnRyaW5zaWMoKSBjb25zdApAQCAtODEsMTMgKzgwLDEzIEBAIGlubGluZSBi
b29sIEpTRnVuY3Rpb246OmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QKIGlubGlu
ZSBUYWdnZWROYXRpdmVGdW5jdGlvbiBKU0Z1bmN0aW9uOjpuYXRpdmVGdW5jdGlvbigpCiB7CiAg
ICAgQVNTRVJUKGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4obV9leGVjdXRhYmxlLmdldCgpKS0+ZnVuY3Rpb24oKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUoKSkt
PmZ1bmN0aW9uKCk7CiB9CiAKIGlubGluZSBUYWdnZWROYXRpdmVGdW5jdGlvbiBKU0Z1bmN0aW9u
OjpuYXRpdmVDb25zdHJ1Y3RvcigpCiB7CiAgICAgQVNTRVJUKGlzSG9zdEZ1bmN0aW9uTm9uSW5s
aW5lKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4obV9leGVj
dXRhYmxlLmdldCgpKS0+Y29uc3RydWN0b3IoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0
aXZlRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUoKSktPmNvbnN0cnVjdG9yKCk7CiB9CiAKIGlubGlu
ZSBib29sIGlzSG9zdEZ1bmN0aW9uKEpTVmFsdWUgdmFsdWUsIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9u
IG5hdGl2ZUZ1bmN0aW9uKQpAQCAtMTAwLDIxICs5OSwyOSBAQCBpbmxpbmUgYm9vbCBpc0hvc3RG
dW5jdGlvbihKU1ZhbHVlIHZhbHVlLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlv
bikKIAogaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6aGFzUmVpZmllZExlbmd0aCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fcmFyZURhdGEgJiYgbV9yYXJlRGF0YS0+aGFzUmVpZmllZExlbmd0aCgp
OworICAgIHVpbnRwdHJfdCBleGVjdXRhYmxlT3JSYXJlRGF0YSA9IG1fZXhlY3V0YWJsZU9yUmFy
ZURhdGE7CisgICAgaWYgKGV4ZWN1dGFibGVPclJhcmVEYXRhICYgcmFyZURhdGFCaXQpCisgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8RnVuY3Rpb25SYXJlRGF0YSo+KGV4ZWN1dGFibGVPclJh
cmVEYXRhICYgfnJhcmVEYXRhQml0KS0+aGFzUmVpZmllZExlbmd0aCgpOworICAgIHJldHVybiBm
YWxzZTsKIH0KIAogaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6aGFzUmVpZmllZE5hbWUoKSBjb25z
dAogewotICAgIHJldHVybiBtX3JhcmVEYXRhICYmIG1fcmFyZURhdGEtPmhhc1JlaWZpZWROYW1l
KCk7CisgICAgdWludHB0cl90IGV4ZWN1dGFibGVPclJhcmVEYXRhID0gbV9leGVjdXRhYmxlT3JS
YXJlRGF0YTsKKyAgICBpZiAoZXhlY3V0YWJsZU9yUmFyZURhdGEgJiByYXJlRGF0YUJpdCkKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxGdW5jdGlvblJhcmVEYXRhKj4oZXhlY3V0YWJsZU9y
UmFyZURhdGEgJiB+cmFyZURhdGFCaXQpLT5oYXNSZWlmaWVkTmFtZSgpOworICAgIHJldHVybiBm
YWxzZTsKIH0KIAogaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6YXJlTmFtZUFuZExlbmd0aE9yaWdp
bmFsKFZNJikKIHsKLSAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgdWludHB0cl90IGV4ZWN1dGFi
bGVPclJhcmVEYXRhID0gbV9leGVjdXRhYmxlT3JSYXJlRGF0YTsKKyAgICBpZiAoIShleGVjdXRh
YmxlT3JSYXJlRGF0YSAmIHJhcmVEYXRhQml0KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
aWYgKG1fcmFyZURhdGEtPmhhc01vZGlmaWVkTmFtZSgpKQorICAgIEZ1bmN0aW9uUmFyZURhdGEq
IHJhcmVEYXRhID0gYml0d2lzZV9jYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihleGVjdXRhYmxlT3JS
YXJlRGF0YSAmIH5yYXJlRGF0YUJpdCk7CisgICAgaWYgKHJhcmVEYXRhLT5oYXNNb2RpZmllZE5h
bWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3JhcmVEYXRhLT5oYXNNb2Rp
ZmllZExlbmd0aCgpKQorICAgIGlmIChyYXJlRGF0YS0+aGFzTW9kaWZpZWRMZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTQyLDExICsxNDks
MTMgQEAgaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6Y2FuVXNlQWxsb2NhdGlvblByb2ZpbGUoKQog
aW5saW5lIEZ1bmN0aW9uUmFyZURhdGEqIEpTRnVuY3Rpb246OmVuc3VyZVJhcmVEYXRhQW5kQWxs
b2NhdGlvblByb2ZpbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHkpCiB7CiAgICAgQVNTRVJUKGNhblVzZUFsbG9jYXRpb25Qcm9maWxlKCkpOwot
ICAgIGlmIChVTkxJS0VMWSghbV9yYXJlRGF0YSkpCisgICAgdWludHB0cl90IGV4ZWN1dGFibGVP
clJhcmVEYXRhID0gbV9leGVjdXRhYmxlT3JSYXJlRGF0YTsKKyAgICBpZiAoIShleGVjdXRhYmxl
T3JSYXJlRGF0YSAmIHJhcmVEYXRhQml0KSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlQW5kSW5p
dGlhbGl6ZVJhcmVEYXRhKGdsb2JhbE9iamVjdCwgaW5saW5lQ2FwYWNpdHkpOwotICAgIGlmIChV
TkxJS0VMWSghbV9yYXJlRGF0YS0+aXNPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUluaXRpYWxpemVk
KCkpKQorICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gYml0d2lzZV9jYXN0PEZ1bmN0
aW9uUmFyZURhdGEqPihleGVjdXRhYmxlT3JSYXJlRGF0YSAmIH5yYXJlRGF0YUJpdCk7CisgICAg
aWYgKFVOTElLRUxZKCFyYXJlRGF0YS0+aXNPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUluaXRpYWxp
emVkKCkpKQogICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZVJhcmVEYXRhKGdsb2JhbE9iamVjdCwg
aW5saW5lQ2FwYWNpdHkpOwotICAgIHJldHVybiBtX3JhcmVEYXRhLmdldCgpOworICAgIHJldHVy
biByYXJlRGF0YTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCmluZGV4IGRiN2Y4
YzFkZDdjNTcyYWYwOWNkNDE1OWE2MDg1NDllMmUzZjllYTkuLmEzZWZlY2ZiODZjOTE0NmQxN2M2
Mzk3Njg0MjVmOWY0YzljOWQyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uY3BwCkBAIC0zNiw4ICszNiw4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNOYXRpdmVTdGRGdW5jdGlvbjo6c19pbmZv
ID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTTmF0aXZlU3RkRnVuY3Rpb24pIH07CiAKLUpTTmF0aXZlU3RkRnVuY3Rp
b246OkpTTmF0aXZlU3RkRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTmF0aXZlU3RkRnVuY3Rpb24mJiBmdW5jdGlvbikK
LSAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQorSlNOYXRpdmVTdGRGdW5j
dGlvbjo6SlNOYXRpdmVTdGRGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBOYXRpdmVTdGRGdW5jdGlvbiYmIGZ1bmN0aW9uKQorICAgIDogQmFzZSh2bSwgZXhlY3V0YWJs
ZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2Z1bmN0aW9uKFdURk1vdmUoZnVu
Y3Rpb24pKQogewogfQpAQCAtNjYsNyArNjYsNyBAQCBKU05hdGl2ZVN0ZEZ1bmN0aW9uKiBKU05h
dGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwog
ewogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24o
cnVuU3RkRnVuY3Rpb24sIGludHJpbnNpYywgbmF0aXZlQ29uc3RydWN0b3IsIG51bGxwdHIsIG5h
bWUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5uYXRpdmVTdGRG
dW5jdGlvblN0cnVjdHVyZSgpOwotICAgIEpTTmF0aXZlU3RkRnVuY3Rpb24qIGZ1bmN0aW9uID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNOYXRpdmVTdGRGdW5jdGlvbj4odm0uaGVhcCkp
IEpTTmF0aXZlU3RkRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBXVEZNb3Zl
KG5hdGl2ZVN0ZEZ1bmN0aW9uKSk7CisgICAgSlNOYXRpdmVTdGRGdW5jdGlvbiogZnVuY3Rpb24g
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU05hdGl2ZVN0ZEZ1bmN0aW9uPih2bS5oZWFw
KSkgSlNOYXRpdmVTdGRGdW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIFdURk1vdmUobmF0aXZlU3RkRnVuY3Rpb24pKTsKICAgICBmdW5jdGlvbi0+ZmluaXNo
Q3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CiAgICAgcmV0dXJuIGZ1bmN0
aW9uOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRp
dmVTdGRGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYXRpdmVT
dGRGdW5jdGlvbi5oCmluZGV4IGZlYzBjNTAzYmE3YzAzMTVkYzU2YzdhYTBmYmFhZWFmZmNlN2Ji
MGEuLjMwNGEwZjk2OWY3YTdkNzkwNDg2MDQyZGUwYWMwNTBlNDdhN2FkOWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmF0aXZlU3RkRnVuY3Rpb24uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hdGl2ZVN0ZEZ1bmN0aW9uLmgKQEAg
LTY4LDcgKzY4LDcgQEAgY2xhc3MgSlNOYXRpdmVTdGRGdW5jdGlvbiBmaW5hbCA6IHB1YmxpYyBK
U0Z1bmN0aW9uIHsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKIHByaXZhdGU6Ci0gICAgSlNO
YXRpdmVTdGRGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgTmF0aXZl
U3RkRnVuY3Rpb24mJik7CisgICAgSlNOYXRpdmVTdGRGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE5hdGl2ZVN0ZEZ1bmN0aW9uJiYp
OwogCiAgICAgTmF0aXZlU3RkRnVuY3Rpb24gbV9mdW5jdGlvbjsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4
IDUyYjk5YzQyNjEwOGY3M2Y0YThiNDM5NTdkMWVhYjM5ODg2ZWM4ZDEuLmMzOTQ5YzgxNTBhMTI5
YTYwNzk0ODA5Yzg3NDhjMjk3YWI5ZjM4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC00MzEsNyArNDMxLDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rp
b246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKIFdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5
cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3
YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdl
dEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxI
b3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2Vt
Ymx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2Nh
dGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9u
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVh
cCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBz
aWduYXR1cmVJbmRleCk7CiAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRh
YmxlLCBsZW5ndGgsIG5hbWUsIGluc3RhbmNlKTsKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CkBA
IC00NDIsOCArNDQyLDggQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1
bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1XZWJBc3NlbWJseUZ1
bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50
LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRv
V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4KQotICAgIDogQmFzZSB7IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSB9CitXZWJB
c3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorICAgIDogQmFz
ZSB7IHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSB9CiAgICAgLCBtX2pz
RW50cnlwb2ludCB7IGpzRW50cnlwb2ludC5lbnRyeXBvaW50KCkgfQogICAgICwgbV9pbXBvcnRh
YmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24gfQogeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmgKaW5kZXggZjljYzgwY2FkMzYyMjc0Zjc1MDQ4M2FkZmUwZWVmYjY4
OTkzNDhhZS4uYjJjZDAwMDAyNDBkYTlhMzlkNmY5ZmJkYzE3MDE5NWNhNTE0ZGQwOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
aApAQCAtOTEsNyArOTEsNyBAQCBjbGFzcyBXZWJBc3NlbWJseUZ1bmN0aW9uIGZpbmFsIDogcHVi
bGljIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlIHsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgV2ViQXNzZW1ibHlG
dW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBq
c0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBl
bnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CisgICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2ln
bmF0dXJlSW5kZXgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7CiAgICAgcHRyZGlmZl90IHByZXZpb3VzSW5zdGFuY2VP
ZmZzZXQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAppbmRleCBkMzNlMTEyMGNhNmMyZWZhZTYw
Y2JiMWVhYjRmZWI2YzcxOGM5MWMzLi5kYTYzMTZiMTVjOThjMzlhNTg5ZjM5YTVmOTdhNGE4YWE0
MDVjYzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnNfaW5mbyA9
IHsgIldlYkFzc2VtYmx5RnVuY3Rpb25CYXNlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSkgfTsKIAot
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OldlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAg
OiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK1dlYkFzc2VtYmx5RnVuY3Rpb25C
YXNlOjpXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZShWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
CiB7IH0KIAogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKaW5kZXggMzVhMmY5
NTAyMmZkODIzYzMzOGVkMDhhNDgxY2I5MjEzODgwNjMwZi4uMmI4ZTMxNmUzZTkzODZmYzE3YTk4
NDkwZjJjYTdjMjI2MmIxNDA0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCkBAIC00OCw3ICs0OCw3IEBAIGNs
YXNzIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlIDogcHVibGljIEpTRnVuY3Rpb24gewogcHJvdGVj
dGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsK
LSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKik7CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UoVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAogICAgIFdyaXRlQmFycmllcjxKU1dl
YkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
CmluZGV4IGY4NGQ3M2RmMmY1NTUzNTNmODJlYTIyNDNlMjAxNTRjN2FiYWE3NzIuLjJmZmI0ZGI0
NzgxZjFiMDFmNmQ3MmZhNjM1ZTY5YWJkYWUzOTRkNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHAKQEAgLTUwLDggKzUwLDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKEpTR2xvYmFsT2JqZWMKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShjYWxsKGdsb2JhbE9iamVjdCwgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgQXJnTGlzdChjYWxsRnJh
bWUpKSkpOwogfQogCi1XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6V2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpbXBvcnRh
YmxlRnVuY3Rpb24pCi0gICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYg
dm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uIGltcG9ydGFibGVGdW5jdGlvbikKKyAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKQogICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24oaW1wb3J0
YWJsZUZ1bmN0aW9uKQogeyB9CiAKQEAgLTYwLDcgKzYwLDcgQEAgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0ds
b2JhbE8KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJpdHM8V2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtKSwgIldlIHNob3VsZCBuZXZlciBkb3VibGUgd3JhcCBh
IHdyYXBwZXIgZnVuY3Rpb24uIik7CiAgICAgU3RyaW5nIG5hbWUgPSAiIjsKICAgICBOYXRpdmVF
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVj
dG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVz
dWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1
cmVJbmRleCwgJmluc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRJ
bmRleCktPndhc21Ub0VtYmVkZGVyU3R1YiB9ICk7CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGV4
ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsICZpbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBv
cnRGdW5jdGlvbkluZm8oaW1wb3J0SW5kZXgpLT53YXNtVG9FbWJlZGRlclN0dWIgfSApOwogICAg
IGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2
bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24s
IGluc3RhbmNlKTsKICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKaW5kZXgg
ZDYwNjNjOWJmODBjOGQzNmZjNTMzNzEyMzg3YWEwZTI3NTcwYmI5ZC4uNTI5OGViMTljNTkyNjM3
Njc2MWQzZDFhYmJjMDI5ZTQ3NzY5ODA1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCkBAIC02Miw3
ICs2Miw3IEBAIGNsYXNzIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIGZpbmFsIDogcHVibGlj
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlIHsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
TmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBK
U09iamVjdCosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogCiBwcml2YXRlOgotICAgIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24pOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTT2Jq
ZWN0PiBtX2Z1bmN0aW9uOwogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQo=
</data>
<flag name="review"
          id="402202"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>