<?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>195446</bug_id>
          
          <creation_ts>2019-03-07 18:34:52 -0800</creation_ts>
          <short_desc>[WHLSL] Vertex shader and fragment shader need to be able to come from two different programs</short_desc>
          <delta_ts>2019-08-21 22:28:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</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="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1513868</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-07 18:34:52 -0800</bug_when>
    <thetext>The WebGPU API lets you take one shader from one program and another shader from another program.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1514175</commentid>
    <comment_count>1</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-03-08 14:16:53 -0800</bug_when>
    <thetext>This bug probably includes implementing two-phase compilation: one in WebGPUDevice.createShaderModule() and one in WebGPUDevice.createRenderPipeline().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1535885</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-13 17:08:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/50746306&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562605</commentid>
    <comment_count>3</comment_count>
      <attachid>376648</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-18 12:01:02 -0700</bug_when>
    <thetext>Created attachment 376648
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562630</commentid>
    <comment_count>4</comment_count>
      <attachid>376655</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-18 17:41:56 -0700</bug_when>
    <thetext>Created attachment 376655
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562633</commentid>
    <comment_count>5</comment_count>
      <attachid>376657</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-18 18:39:42 -0700</bug_when>
    <thetext>Created attachment 376657
Needs tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562634</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-18 18:41:24 -0700</bug_when>
    <thetext>Attachment 376657 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562637</commentid>
    <comment_count>7</comment_count>
      <attachid>376659</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-18 19:05:50 -0700</bug_when>
    <thetext>Created attachment 376659
Needs tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562638</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-18 19:07:17 -0700</bug_when>
    <thetext>Attachment 376659 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562685</commentid>
    <comment_count>9</comment_count>
      <attachid>376676</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-19 01:55:32 -0700</bug_when>
    <thetext>Created attachment 376676
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562691</commentid>
    <comment_count>10</comment_count>
      <attachid>376678</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-19 02:16:07 -0700</bug_when>
    <thetext>Created attachment 376678
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562699</commentid>
    <comment_count>11</comment_count>
      <attachid>376681</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-19 04:28:05 -0700</bug_when>
    <thetext>Created attachment 376681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563374</commentid>
    <comment_count>12</comment_count>
      <attachid>376681</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-20 20:02:29 -0700</bug_when>
    <thetext>Comment on attachment 376681
Patch

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

r=me

&gt; Source/WebCore/ChangeLog:38
&gt; +        to find all it&apos;s potential overloads. These buckets can&apos;t be educated about namespaces (consider a

it&apos;s =&gt; its

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:164
&gt; +        if (static_cast&lt;bool&gt;(m_castReturnType) != static_cast&lt;bool&gt;(other.m_castReturnType))

🤔

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:675
&gt; +    HashSet&lt;String&gt; m_vertexEntryPoints[3];
&gt; +    HashSet&lt;String&gt; m_fragmentEntryPoints[3];
&gt; +    HashSet&lt;String&gt; m_computeEntryPoints[3];

let&apos;s use a constant for this like &quot;numberOfNamespaces&quot; instead of 3.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLCodeLocation.h:67
&gt; +    unsigned startOffset() const
&gt; +    {
&gt; +        return m_startOffset &amp; 0x7FFFFFFF;
&gt; +    }
&gt; +    unsigned endOffset() const
&gt; +    {
&gt; +        return m_endOffset &amp; 0x7FFFFFFF;
&gt; +    }
&gt; +    AST::NameSpace nameSpace() const
&gt; +    {
&gt; +        unsigned result = (m_startOffset &amp; 0x80000000) &gt;&gt; 31;
&gt; +        result |= (m_endOffset &amp; 0x80000000) &gt;&gt; 30;
&gt; +        return static_cast&lt;AST::NameSpace&gt;(result);
&gt; +    }

why not just use a bitfield in this class instead?

unsigned m_startOffset : 31;
unsigned m_endOffset : 31;
unsigned m_nameSpace : 2;

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLNameContext.cpp:218
&gt; +AST::FunctionDeclaration* NameContext::searchFunctions(String&amp; name) const

can we cache the results of this? I&apos;m guessing this is much more expensive than it used to be?

Maybe we can cache results per namespace?

Or we can add standard library to both user namespaces and use the old implementation

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLNameContext.cpp:243
&gt; +Optional&lt;CodeLocation&gt; NameContext::globalExists(String&amp; name) const

my initial reaction to this name was that it transcends namespaces. Can we just call it &quot;exists&quot;  or something like that? And just assert that we&apos;re the top-most?

Or maybe &quot;typeOrFunctionExists&quot; with the ASSERT? Then call the &quot;localExists&quot; below &quot;variableExists&quot; or &quot;getVariable&quot; or &quot;variable&quot;

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.h:46
&gt; +    Expected&lt;void, Error&gt; parse(Program&amp;, StringView, ParsingMode, AST::NameSpace = AST::NameSpace::StandardLibrary);

small nit: do we really need this as a default argument? Seems like it&apos;d be better to make sure every caller of this knows what they&apos;re doing.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.cpp:200
&gt; +                // FIXME: The first argument to errorString()

I don&apos;t understand what this means. Same with the above FIXMEs which are the same

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.h:47
&gt; +using OwnedShaderModule = std::unique_ptr&lt;ShaderModule, ShaderModuleDeleter&gt;;

nit: why not UniqueRef?

(You can specify a deleter by changing the default_delete in namespace std for ShaderModule. Or, you can change UniqueRef to explicitly take a Deleter argument and have it default to default_delete)

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:86
&gt; +        if (!parseResult)
&gt; +            return makeUnexpected(parseResult.error());

why?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:95
&gt; +    if (!parseResult)
&gt; +        return makeUnexpected(parseResult.error());

why?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:105
&gt; +    // We need to make sure that an author can&apos;t write a function with the same signature as anything in the standard library.
&gt; +    // If they do so, we need to make sure it collides.

This comment makes me think this work is happening here. Maybe add another sentence saying we include them here so later phases can do this check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563822</commentid>
    <comment_count>13</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-21 17:15:46 -0700</bug_when>
    <thetext>This causes a 16% regression :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563826</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-21 17:20:14 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #13)
&gt; This causes a 16% regression :(

In its current form or with a reworked getFunctions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563859</commentid>
    <comment_count>15</comment_count>
      <attachid>376681</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-21 18:04:20 -0700</bug_when>
    <thetext>Comment on attachment 376681
Patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:86
&gt;&gt; +            return makeUnexpected(parseResult.error());
&gt; 
&gt; why?

We parse the user program first, and then we parse the standard library. Inside the parser, after we&apos;ve successfully parsed a struct, for example, we add it to the Program, which checks to see if the name isn&apos;t a duplicate. If the name is a duplicate, the &quot;add&quot; function returns failure, which makes the parser return failure. So, if there is a duplicate struct, the way it manifests is parsing the standard library fails at the site of the duplicate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563861</commentid>
    <comment_count>16</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-21 18:04:46 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #14)
&gt; (In reply to Myles C. Maxfield from comment #13)
&gt; &gt; This causes a 16% regression :(
&gt; 
&gt; In its current form or with a reworked getFunctions?

In its current form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563862</commentid>
    <comment_count>17</comment_count>
      <attachid>376958</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-21 18:07:23 -0700</bug_when>
    <thetext>Created attachment 376958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563863</commentid>
    <comment_count>18</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-21 18:09:24 -0700</bug_when>
    <thetext>Attachment 376958 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.cpp:81:  default_delete::operator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 85 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563885</commentid>
    <comment_count>19</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-08-21 18:46:35 -0700</bug_when>
    <thetext>Turns out I don&apos;t need to fix perf. The number I quoted earlier is from 1 trial. I ran 100 trials and found a 0.3% regression, and a p value of 0.1991, which means this is not statistically significant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563911</commentid>
    <comment_count>20</comment_count>
      <attachid>376958</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-21 19:50:28 -0700</bug_when>
    <thetext>Comment on attachment 376958
Patch

Clearing flags on attachment: 376958

Committed r248993: &lt;https://trac.webkit.org/changeset/248993&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376648</attachid>
            <date>2019-08-18 12:01:02 -0700</date>
            <delta_ts>2019-08-18 17:41:55 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195446-20190818120101.patch</filename>
            <type>text/plain</type>
            <size>12198</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmOTFkYzVmYTQzOTFh
NGRmNWNkOWRkMDQ1Yjk5MmIwMTdkYWJhYS4uMjhkZjU5ODFiNDg1YmI0Zjk1ZGRkZThjYTM0NTFl
NTEzOGRjMTA1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTA4LTE4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBW
ZXJ0ZXggc2hhZGVyIGFuZCBmcmFnbWVudCBzaGFkZXIgbmVlZCB0byBiZSBhYmxlIHRvIGNvbWUg
ZnJvbSB0d28gZGlmZmVyZW50IHByb2dyYW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU0NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6cHJlcGFyZVNoYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9k
dWxlOjpTaGFkZXJNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNyZWF0ZVNoYWRl
ck1vZHVsZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9kdWxlRGVsZXRlcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZSk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6R1BV
U2hhZGVyTW9kdWxlOjpwbGF0Zm9ybVNoYWRlck1vZHVsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHUFVTaGFkZXJNb2R1bGU6OndobHNsTW9kdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdQVVNoYWRlck1vZHVsZTo6d2hsc2xTb3VyY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnRyeVNldEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW06CisgICAgICAgIChX
ZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVVNoYWRlck1vZHVsZU1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVy
TW9kdWxlOjp0cnlDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVyTW9kdWxlOjpH
UFVTaGFkZXJNb2R1bGUpOgorCiAyMDE5LTA4LTE2ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVl
dWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQ4Nzcy
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJl
cGFyZS5jcHAKaW5kZXggNzNmNDgzMjAzYTA0YTQ4MzNjMTU0NTM4MGRiMWU4NWRjMmIyYTQ4MC4u
ZjJmYjg3YjU4ZWFhNGViZTAyODUyYmU4ZDA0OTczZWY4ZWYyZGQzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCkBAIC0x
NTAsNyArMTUwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcGFzcyhfX1ZBX0FSR1NfXyk7IFwKICAg
ICB9IHdoaWxlICgwKQogCi1zdGF0aWMgRXhwZWN0ZWQ8UHJvZ3JhbSwgU3RyaW5nPiBwcmVwYXJl
U2hhcmVkKFBoYXNlVGltZXMmIHBoYXNlVGltZXMsIFN0cmluZyYgd2hsc2xTb3VyY2UpCitzdGF0
aWMgRXhwZWN0ZWQ8UHJvZ3JhbSwgU3RyaW5nPiBwcmVwYXJlU2hhcmVkKFBoYXNlVGltZXMmIHBo
YXNlVGltZXMsIGNvbnN0IFN0cmluZyYgd2hsc2xTb3VyY2UpCiB7CiAgICAgUHJvZ3JhbSBwcm9n
cmFtOwogICAgIFBhcnNlciBwYXJzZXI7CkBAIC0yMDAsOCArMjAwLDMxIEBAIHN0YXRpYyBFeHBl
Y3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBhcmVTaGFyZWQoUGhhc2VUaW1lcyYgcGhhc2VUaW1l
cywgU3RyaW5nJiB3CiAgICAgcmV0dXJuIHByb2dyYW07CiB9CiAKLUV4cGVjdGVkPFJlbmRlclBy
ZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcikKK3N0cnVjdCBTaGFk
ZXJNb2R1bGUgeworICAgIFNoYWRlck1vZHVsZShjb25zdCBTdHJpbmcmIHdobHNsU291cmNlKQor
ICAgICAgICA6IHdobHNsU291cmNlKHdobHNsU291cmNlKQorICAgIHsKKyAgICB9CisKKyAgICBT
dHJpbmcgd2hsc2xTb3VyY2U7Cit9OworCitPd25lZFNoYWRlck1vZHVsZSBjcmVhdGVTaGFkZXJN
b2R1bGUoY29uc3QgU3RyaW5nJiB3aGxzbFNvdXJjZSkKIHsKKyAgICAvLyBXZSBzaG91bGQgY29u
c2lkZXIgbW92aW5nIGFzIG11Y2ggd29yayBmcm9tIHByZXBhcmUoKSBpbnRvIGhlcmUgYXMgcG9z
c2libGUuCisgICAgcmV0dXJuIE93bmVkU2hhZGVyTW9kdWxlKG5ldyBTaGFkZXJNb2R1bGUod2hs
c2xTb3VyY2UpKTsKK30KKwordm9pZCBTaGFkZXJNb2R1bGVEZWxldGVyOjpvcGVyYXRvcigpKFNo
YWRlck1vZHVsZSogbW9kdWxlKQoreworICAgIGRlbGV0ZSBtb2R1bGU7Cit9CisKK0V4cGVjdGVk
PFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShjb25zdCBTaGFkZXJNb2R1bGUm
IHZlcnRleFNoYWRlck1vZHVsZSwgY29uc3QgU2hhZGVyTW9kdWxlKiBmcmFnbWVudFNoYWRlck1v
ZHVsZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ip
Cit7CisgICAgVU5VU0VEX1BBUkFNKGZyYWdtZW50U2hhZGVyTW9kdWxlKTsKKyAgICBjb25zdCBh
dXRvJiB3aGxzbFNvdXJjZSA9IHZlcnRleFNoYWRlck1vZHVsZS53aGxzbFNvdXJjZTsKKwogICAg
IFBoYXNlVGltZXMgcGhhc2VUaW1lczsKICAgICBNZXRhbDo6UmVuZGVyTWV0YWxDb2RlIGdlbmVy
YXRlZENvZGU7CiAKQEAgLTIzNCw4ICsyNTcsMTAgQEAgRXhwZWN0ZWQ8UmVuZGVyUHJlcGFyZVJl
c3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJlbmRlclBpcGVsaW4K
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FeHBlY3RlZDxDb21wdXRlUHJlcGFyZVJlc3VsdCwg
U3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpCitFeHBlY3RlZDxDb21wdXRlUHJlcGFy
ZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKGNvbnN0IFNoYWRlck1vZHVsZSYgc2hhZGVyTW9kdWxl
LCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKQog
eworICAgIGNvbnN0IGF1dG8mIHdobHNsU291cmNlID0gc2hhZGVyTW9kdWxlLndobHNsU291cmNl
OworCiAgICAgUGhhc2VUaW1lcyBwaGFzZVRpbWVzOwogICAgIE1ldGFsOjpDb21wdXRlTWV0YWxD
b2RlIGdlbmVyYXRlZENvZGU7CiAgICAgT3B0aW9uYWw8Q29tcHV0ZURpbWVuc2lvbnM+IGNvbXB1
dGVEaW1lbnNpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQcmVwYXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByZXBhcmUuaAppbmRleCA1ZGE3N2Y1ZjJlZGRiOTUwOTc0ODM0N2U5NGNhN2I1OWNl
YjRhNWI0Li5lZmQ2NWE3MDU3NWY1OWFjNjRkYjI1YTRmMjc2NmQzN2M0MTJhYjg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaApA
QCAtMzksMTIgKzM5LDIwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIGNvbnN0ZXhwciBib29sIGR1
bXBNZXRhbENvbXBpbGVUaW1lcyA9IGZhbHNlOwogCisvLyBIaWRlIHRoZSBjb250ZW50cyBvZiB0
aGUgU2hhZGVyTW9kdWxlLiBDbGllbnRzIG9mIHRoZSBjb21waWxlciBzaG91bGRuJ3QgY2FyZSB3
aGF0J3MgaW5zaWRlIGl0Lgorc3RydWN0IFNoYWRlck1vZHVsZTsKK3N0cnVjdCBTaGFkZXJNb2R1
bGVEZWxldGVyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoU2hhZGVyTW9kdWxlKik7Cit9OwordXNp
bmcgT3duZWRTaGFkZXJNb2R1bGUgPSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZGVyTW9kdWxlLCBTaGFk
ZXJNb2R1bGVEZWxldGVyPjsKK093bmVkU2hhZGVyTW9kdWxlIGNyZWF0ZVNoYWRlck1vZHVsZShj
b25zdCBTdHJpbmcmIHdobHNsU291cmNlKTsKKwogc3RydWN0IFJlbmRlclByZXBhcmVSZXN1bHQg
ewogICAgIFN0cmluZ0J1aWxkZXIgbWV0YWxTb3VyY2U7CiAgICAgTWV0YWw6Ok1hbmdsZWRGdW5j
dGlvbk5hbWUgbWFuZ2xlZFZlcnRleEVudHJ5UG9pbnROYW1lOwogICAgIE1ldGFsOjpNYW5nbGVk
RnVuY3Rpb25OYW1lIG1hbmdsZWRGcmFnbWVudEVudHJ5UG9pbnROYW1lOwogfTsKLUV4cGVjdGVk
PFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNl
LCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImKTsKK0V4cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1
bHQsIFN0cmluZz4gcHJlcGFyZShjb25zdCBTaGFkZXJNb2R1bGUmIHZlcnRleFNoYWRlck1vZHVs
ZSwgY29uc3QgU2hhZGVyTW9kdWxlKiBmcmFnbWVudFNoYWRlck1vZHVsZSwgUmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yJik7CiAKIHN0cnVjdCBDb21wdXRlRGltZW5zaW9ucyB7CiAgICAgdW5zaWdu
ZWQgd2lkdGg7CkBAIC01Nyw3ICs2NSw3IEBAIHN0cnVjdCBDb21wdXRlUHJlcGFyZVJlc3VsdCB7
CiAgICAgTWV0YWw6Ok1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZEVudHJ5UG9pbnROYW1lOwog
ICAgIENvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zOwogfTsKLUV4cGVjdGVkPENv
bXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwg
Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYpOworRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1
bHQsIFN0cmluZz4gcHJlcGFyZShjb25zdCBTaGFkZXJNb2R1bGUmLCBDb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVTaGFkZXJNb2R1bGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVTaGFkZXJNb2R1bGUuaAppbmRleCBj
ZTMzNDFlNGZhNzc0MjFhODNlZjEwZjY4MTRhMTlmODNkYzk4ZWFjLi5iODYwZWVhZDYxZjEwOTI4
ZTYxMDllMWFkNjUwZjdjMjZmODA3NmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvR1BVU2hhZGVyTW9kdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5oCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xQcmVwYXJlLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDYsMTUgKzQ3LDE1IEBAIGNsYXNzIEdQVVNoYWRlck1v
ZHVsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVVNoYWRlck1vZHVsZT4gewogcHVibGljOgogICAg
IHN0YXRpYyBSZWZQdHI8R1BVU2hhZGVyTW9kdWxlPiB0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNl
JiwgY29uc3QgR1BVU2hhZGVyTW9kdWxlRGVzY3JpcHRvciYpOwogCi0gICAgUGxhdGZvcm1TaGFk
ZXJNb2R1bGUqIHBsYXRmb3JtU2hhZGVyTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV93aGxzbFNv
dXJjZS5pc051bGwoKSA/IG1fcGxhdGZvcm1TaGFkZXJNb2R1bGUuZ2V0KCkgOiBudWxscHRyOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiB3aGxzbFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2hsc2xT
b3VyY2U7IH0KKyAgICBQbGF0Zm9ybVNoYWRlck1vZHVsZSogcGxhdGZvcm1TaGFkZXJNb2R1bGUo
KSBjb25zdCB7IHJldHVybiBtX3dobHNsTW9kdWxlID8gbnVsbHB0ciA6IG1fcGxhdGZvcm1TaGFk
ZXJNb2R1bGUuZ2V0KCk7IH0KKyAgICBjb25zdCBXSExTTDo6U2hhZGVyTW9kdWxlKiB3aGxzbE1v
ZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2hsc2xNb2R1bGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToK
ICAgICBHUFVTaGFkZXJNb2R1bGUoUGxhdGZvcm1TaGFkZXJNb2R1bGVTbWFydFB0ciYmKTsKLSAg
ICBHUFVTaGFkZXJNb2R1bGUoU3RyaW5nJiYgd2hsc2xTb3VyY2UpOworICAgIEdQVVNoYWRlck1v
ZHVsZShXSExTTDo6T3duZWRTaGFkZXJNb2R1bGUmJiB3aGxzbE1vZHVsZSk7CiAKICAgICBQbGF0
Zm9ybVNoYWRlck1vZHVsZVNtYXJ0UHRyIG1fcGxhdGZvcm1TaGFkZXJNb2R1bGU7Ci0gICAgU3Ry
aW5nIG1fd2hsc2xTb3VyY2U7CisgICAgV0hMU0w6Ok93bmVkU2hhZGVyTW9kdWxlIG1fd2hsc2xN
b2R1bGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0
YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29t
cHV0ZVBpcGVsaW5lTWV0YWwubW0KaW5kZXggMWNlZmVlZGI5ODVlNGE3Njc0NTMyZmQyODM0NjA3
YTk3OWEwMGI1OS4uZTAxYjc1YWY5NTE3NWMwNDk2NTU4MDg5M2Y2MTYwMGQ1NmU1MmQ1NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNv
bXB1dGVQaXBlbGluZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQpAQCAtNzAsMTMgKzcwLDEx
IEBAIHN0YXRpYyBPcHRpb25hbDxXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnM+IHRyeVNldEZ1bmN0
aW9ucyhjb25zdCBHUFVQaXBlbGluZVN0YWdlCiAgICAgV0hMU0w6OkNvbXB1dGVEaW1lbnNpb25z
IGNvbXB1dGVEaW1lbnNpb25zIHsgMSwgMSwgMSB9OwogCiAgICAgaWYgKHdobHNsRGVzY3JpcHRv
cikgewotICAgICAgICAvLyBXSExTTCBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkIHRvIE1TTCBmaXJz
dC4KLSAgICAgICAgU3RyaW5nIHdobHNsU291cmNlID0gY29tcHV0ZVN0YWdlLm1vZHVsZS0+d2hs
c2xTb3VyY2UoKTsKLSAgICAgICAgQVNTRVJUKCF3aGxzbFNvdXJjZS5pc051bGwoKSk7CisgICAg
ICAgIEFTU0VSVChjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpKTsKIAogICAgICAg
ICB3aGxzbERlc2NyaXB0b3ItPmVudHJ5UG9pbnROYW1lID0gY29tcHV0ZVN0YWdlLmVudHJ5UG9p
bnQ7CiAKLSAgICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSh3
aGxzbFNvdXJjZSwgKndobHNsRGVzY3JpcHRvcik7CisgICAgICAgIGF1dG8gd2hsc2xDb21waWxl
UmVzdWx0ID0gV0hMU0w6OnByZXBhcmUoKmNvbXB1dGVTdGFnZS5tb2R1bGUtPndobHNsTW9kdWxl
KCksICp3aGxzbERlc2NyaXB0b3IpOwogICAgICAgICBpZiAoIXdobHNsQ29tcGlsZVJlc3VsdCkg
ewogICAgICAgICAgICAgZXJyb3JTY29wZXMuZ2VuZXJhdGVQcmVmaXhlZEVycm9yKG1ha2VTdHJp
bmcoIldITFNMIGNvbXBpbGUgZXJyb3I6ICIsIHdobHNsQ29tcGlsZVJlc3VsdC5lcnJvcigpKSk7
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMTM0LDcgKzEzMiw3IEBAIHN0
YXRpYyBPcHRpb25hbDxDb252ZXJ0UmVzdWx0PiBjb252ZXJ0Q29tcHV0ZVBpcGVsaW5lRGVzY3Jp
cHRvcihjb25zdCBHUFVDb21wdXRlCiAKICAgICBjb25zdCBhdXRvJiBjb21wdXRlU3RhZ2UgPSBk
ZXNjcmlwdG9yLmNvbXB1dGVTdGFnZTsKIAotICAgIGJvb2wgaXNXaGxzbCA9ICFjb21wdXRlU3Rh
Z2UubW9kdWxlLT53aGxzbFNvdXJjZSgpLmlzTnVsbCgpOworICAgIGJvb2wgaXNXaGxzbCA9IGNv
bXB1dGVTdGFnZS5tb2R1bGUtPndobHNsTW9kdWxlKCk7CiAKICAgICBPcHRpb25hbDxXSExTTDo6
Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcj4gd2hsc2xEZXNjcmlwdG9yOwogICAgIGlmIChpc1do
bHNsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQppbmRleCA4NmFhZGQ4
NDIwODEyNTVjZDM1ODFkMjQ4MjIwZmVkNTBiMjU3YTEwLi5jOGFhOGEyMzA0YmYyMTllNmEyNmU1
MmVkNjNiZGIxOTBkNTllYmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRh
bC5tbQpAQCAtMzgyLDE1ICszODIsMTQgQEAgc3RhdGljIGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNv
bnN0IEdQVVBpcGVsaW5lU3RhZ2VEZXNjcmlwdG9yJiB2ZXJ0ZXhTdGFnZSwgY29uc3QKICAgICBT
dHJpbmcgdmVydGV4RW50cnlQb2ludCwgZnJhZ21lbnRFbnRyeVBvaW50OwogCiAgICAgaWYgKHdo
bHNsRGVzY3JpcHRvcikgewotICAgICAgICAvLyBXSExTTCBmdW5jdGlvbnMgYXJlIGNvbXBpbGVk
IHRvIE1TTCBmaXJzdC4KLSAgICAgICAgU3RyaW5nIHdobHNsU291cmNlID0gdmVydGV4U3RhZ2Uu
bW9kdWxlLT53aGxzbFNvdXJjZSgpOwotICAgICAgICBBU1NFUlQoIXdobHNsU291cmNlLmlzTnVs
bCgpKTsKKyAgICAgICAgQVNTRVJUKHZlcnRleFN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSk7
CisgICAgICAgIEFTU0VSVCghZnJhZ21lbnRTdGFnZSB8fCBmcmFnbWVudFN0YWdlLT5tb2R1bGUt
PndobHNsTW9kdWxlKCkpOwogCiAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+dmVydGV4RW50cnlQ
b2ludE5hbWUgPSB2ZXJ0ZXhTdGFnZS5lbnRyeVBvaW50OwogICAgICAgICBpZiAoZnJhZ21lbnRT
dGFnZSkKICAgICAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+ZnJhZ21lbnRFbnRyeVBvaW50TmFt
ZSA9IGZyYWdtZW50U3RhZ2UtPmVudHJ5UG9pbnQ7CiAKLSAgICAgICAgYXV0byB3aGxzbENvbXBp
bGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSh3aGxzbFNvdXJjZSwgKndobHNsRGVzY3JpcHRvcik7
CisgICAgICAgIGF1dG8gd2hsc2xDb21waWxlUmVzdWx0ID0gV0hMU0w6OnByZXBhcmUoKnZlcnRl
eFN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSwgZnJhZ21lbnRTdGFnZSA/IGZyYWdtZW50U3Rh
Z2UtPm1vZHVsZS0+d2hsc2xNb2R1bGUoKSA6IG51bGxwdHIsICp3aGxzbERlc2NyaXB0b3IpOwog
ICAgICAgICBpZiAoIXdobHNsQ29tcGlsZVJlc3VsdCkgewogICAgICAgICAgICAgZXJyb3JTY29w
ZXMuZ2VuZXJhdGVQcmVmaXhlZEVycm9yKG1ha2VTdHJpbmcoIldITFNMIGNvbXBpbGUgZXJyb3I6
ICIsIHdobHNsQ29tcGlsZVJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC00NTIsOCArNDUxLDkgQEAgc3RhdGljIFJldGFpblB0cjxNVExSZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3I+IGNvbnZlcnRSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IoY28KICAgICBjb25z
dCBhdXRvJiB2ZXJ0ZXhTdGFnZSA9IGRlc2NyaXB0b3IudmVydGV4U3RhZ2U7CiAgICAgY29uc3Qg
YXV0byYgZnJhZ21lbnRTdGFnZSA9IGRlc2NyaXB0b3IuZnJhZ21lbnRTdGFnZTsKIAotICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NDQ2IEFs
bG93IFdITFNMIHNoYWRlcnMgdG8gY29tZSBmcm9tIGRpZmZlcmVudCBwcm9ncmFtcy4KLSAgICBi
b29sIGlzV2hsc2wgPSAhdmVydGV4U3RhZ2UubW9kdWxlLT53aGxzbFNvdXJjZSgpLmlzTnVsbCgp
ICYmICghZnJhZ21lbnRTdGFnZSB8fCB2ZXJ0ZXhTdGFnZS5tb2R1bGUucHRyKCkgPT0gZnJhZ21l
bnRTdGFnZS0+bW9kdWxlLnB0cigpKTsKKyAgICBpZiAoZnJhZ21lbnRTdGFnZSAmJiBzdGF0aWNf
Y2FzdDxib29sPih2ZXJ0ZXhTdGFnZS5tb2R1bGUtPndobHNsTW9kdWxlKCkpICE9IHN0YXRpY19j
YXN0PGJvb2w+KGZyYWdtZW50U3RhZ2UtPm1vZHVsZS0+d2hsc2xNb2R1bGUoKSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGJvb2wgaXNXaGxzbCA9IHZlcnRleFN0YWdlLm1vZHVsZS0+
d2hsc2xNb2R1bGUoKTsKIAogICAgIC8vIFNldCBkYXRhIGZvciB0aGUgTWV0YWwgcGlwZWxpbmUg
ZGVzY3JpcHRvciAoYW5kIFdITFNMJ3MsIGlmIG5lZWRlZCkuCiAgICAgT3B0aW9uYWw8V0hMU0w6
OlJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcj4gd2hsc2xEZXNjcmlwdG9yOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVNoYWRlck1vZHVs
ZU1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQ
VVNoYWRlck1vZHVsZU1ldGFsLm1tCmluZGV4IGI3ZjU2YzgzMjdjYWFiYjE0MjQ5NTAwNGE2MmU5
MmM1ZDcwODliZDEuLjMyMjE0ODU5MDYyNzgxNjcwN2NiYmZhMDkyOTBiZjVmMmM1NzI2MTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVT
aGFkZXJNb2R1bGVNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0KQEAgLTQ0LDggKzQ0LDExIEBAIFJl
ZlB0cjxHUFVTaGFkZXJNb2R1bGU+IEdQVVNoYWRlck1vZHVsZTo6dHJ5Q3JlYXRlKGNvbnN0IEdQ
VURldmljZSYgZGV2aWNlLCBjb25zCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAg
ICAKLSAgICBpZiAoZGVzY3JpcHRvci5pc1dITFNMKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEdQVVNoYWRlck1vZHVsZShTdHJpbmcoZGVzY3JpcHRvci5jb2RlKSkpOworICAgIGlmIChk
ZXNjcmlwdG9yLmlzV0hMU0wpIHsKKyAgICAgICAgaWYgKGF1dG8gd2hsc2xNb2R1bGUgPSBXSExT
TDo6Y3JlYXRlU2hhZGVyTW9kdWxlKGRlc2NyaXB0b3IuY29kZSkpCisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEdQVVNoYWRlck1vZHVsZShXVEZNb3ZlKHdobHNsTW9kdWxlKSkpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAKICAgICBQbGF0Zm9ybVNoYWRlck1vZHVs
ZVNtYXJ0UHRyIG1vZHVsZTsKIApAQCAtNjYsOCArNjksOCBAQCBHUFVTaGFkZXJNb2R1bGU6OkdQ
VVNoYWRlck1vZHVsZShQbGF0Zm9ybVNoYWRlck1vZHVsZVNtYXJ0UHRyJiYgbW9kdWxlKQogewog
fQogCi1HUFVTaGFkZXJNb2R1bGU6OkdQVVNoYWRlck1vZHVsZShTdHJpbmcmJiB3aGxzbFNvdXJj
ZSkKLSAgICA6IG1fd2hsc2xTb3VyY2UoV1RGTW92ZSh3aGxzbFNvdXJjZSkpCitHUFVTaGFkZXJN
b2R1bGU6OkdQVVNoYWRlck1vZHVsZShXSExTTDo6T3duZWRTaGFkZXJNb2R1bGUmJiB3aGxzbE1v
ZHVsZSkKKyAgICA6IG1fd2hsc2xNb2R1bGUoV1RGTW92ZSh3aGxzbE1vZHVsZSkpCiB7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376655</attachid>
            <date>2019-08-18 17:41:56 -0700</date>
            <delta_ts>2019-08-18 18:39:41 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195446-20190818174155.patch</filename>
            <type>text/plain</type>
            <size>59417</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmOTFkYzVmYTQzOTFh
NGRmNWNkOWRkMDQ1Yjk5MmIwMTdkYWJhYS4uMjhkZjU5ODFiNDg1YmI0Zjk1ZGRkZThjYTM0NTFl
NTEzOGRjMTA1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTA4LTE4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBW
ZXJ0ZXggc2hhZGVyIGFuZCBmcmFnbWVudCBzaGFkZXIgbmVlZCB0byBiZSBhYmxlIHRvIGNvbWUg
ZnJvbSB0d28gZGlmZmVyZW50IHByb2dyYW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU0NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6cHJlcGFyZVNoYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9k
dWxlOjpTaGFkZXJNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNyZWF0ZVNoYWRl
ck1vZHVsZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9kdWxlRGVsZXRlcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZSk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6R1BV
U2hhZGVyTW9kdWxlOjpwbGF0Zm9ybVNoYWRlck1vZHVsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHUFVTaGFkZXJNb2R1bGU6OndobHNsTW9kdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdQVVNoYWRlck1vZHVsZTo6d2hsc2xTb3VyY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnRyeVNldEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW06CisgICAgICAgIChX
ZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVVNoYWRlck1vZHVsZU1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVy
TW9kdWxlOjp0cnlDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVyTW9kdWxlOjpH
UFVTaGFkZXJNb2R1bGUpOgorCiAyMDE5LTA4LTE2ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVl
dWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQ4Nzcy
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDY4MDVkNjY2NGY5MDdj
ODNjZDViN2FmOGRhNGJkZmE0NmRlMmIyYmQuLmI3MjU2ZDUwNTQ4ZmU5OTA4YTQyN2JmOGY1YjAx
ZDdkOWJlMzE1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMRW50cnlQb2ludFR5cGUuaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgi
CisjaW5jbHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIKICNpbmNsdWRlICJXSExTTFBhcnNpbmdNb2Rl
LmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5
cGUuaCIKQEAgLTgzLDYgKzg0LDkgQEAgcHVibGljOgogCiAgICAgUGFyc2luZ01vZGUgcGFyc2lu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcnNpbmdNb2RlOyB9CiAKKyAgICBOYW1lU3BhY2Ug
bmFtZVNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU3BhY2U7IH0KKyAgICB2b2lkIHNldE5h
bWVTcGFjZShOYW1lU3BhY2UgbmFtZVNwYWNlKSB7IG1fbmFtZVNwYWNlID0gbmFtZVNwYWNlOyB9
CisKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uIG1fY29kZUxvY2F0aW9uOwogICAgIEF0dHJp
YnV0ZUJsb2NrIG1fYXR0cmlidXRlQmxvY2s7CkBAIC05Myw2ICs5Nyw3IEBAIHByaXZhdGU6CiAg
ICAgU3RyaW5nIG1fbmFtZTsKICAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3BhcmFtZXRlcnM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiBtX3NlbWFudGljOworICAgIE5hbWVTcGFj
ZSBtX25hbWVTcGFjZSB7IE5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5IH07CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hbWVTcGFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTmFtZVNwYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ2ZmRlZjE1ZmI3MTc2
OGJlMDUxOWEwZWExM2Y1MmUyNDk2ZThhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVTcGFjZS5oCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFT
VCB7CisKKy8vIERpZmZlcmVudCBzaGFkZXIgbW9kdWxlcyBvcGVyYXRlIGluIGRpZmZlcmVudCBu
YW1lc3BhY2VzLgorLy8gVGhpcyBtZWFucyBpdCdzIHBvc3NpYmxlIHRvIGhhdmUgdHdvIGZ1bmN0
aW9ucyB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZXMsIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlm
ZmVyZW50IG1vZHVsZXMuCitlbnVtIGNsYXNzIE5hbWVTcGFjZSA6IHVpbnQ4X3QgeworICAgIFN0
YW5kYXJkTGlicmFyeSA9IDAsCisgICAgTmFtZVNwYWNlMSA9IDEsCisgICAgTmFtZVNwYWNlMiA9
IDIKK307CisKK30KKworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRU
eXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1l
ZFR5cGUuaAppbmRleCA0NWI4MDEwY2QyOGViZGQ1MGY4NzAxN2ViZTdhY2IzNDJlNGNmN2FlLi41
OTljNDZjNTg1Mzg1YjAxODdjMDJlYmM5ZDJjMzA0M2NjYjNiODc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUu
aApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExT
TENvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmFtZVNwYWNlLmgiCiAjaW5jbHVkZSAi
V0hMU0xUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYwLDEyICs2MSwxNSBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KIAorICAgIE5hbWVTcGFjZSBuYW1lU3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX25hbWVTcGFjZTsgfQorICAgIHZvaWQgc2V0TmFtZVNwYWNlKE5h
bWVTcGFjZSBuYW1lU3BhY2UpIHsgbV9uYW1lU3BhY2UgPSBuYW1lU3BhY2U7IH0KIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgVHlwZTsKICAgICBUeXBlJiB1bmlmeU5vZGVJbXBsKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KICAgICBDb2RlTG9jYXRpb24gbV9jb2RlTG9jYXRpb247CiAgICAgU3Ry
aW5nIG1fbmFtZTsKKyAgICBOYW1lU3BhY2UgbV9uYW1lU3BhY2UgeyBOYW1lU3BhY2U6OlN0YW5k
YXJkTGlicmFyeSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAppbmRleCA2MzI1
NWQ0NjRhZWI1MDNmZjkwMDY0ZWY0ZGIzNDVjMjg4YWRlMzM3Li5hZDQ4NGI2YmMzOGM1NzAzOTUy
YTFjMTc2ODg5NjEwYTg3Njg1NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKCEhbV9jYXN0UmV0dXJuVHlwZSAhPSAhIW90aGVyLm1fY2FzdFJldHVyblR5cGUpCisgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihtX2Nhc3RSZXR1cm5UeXBlKSAhPSBzdGF0aWNfY2Fz
dDxib29sPihvdGhlci5tX2Nhc3RSZXR1cm5UeXBlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBpZiAoIW1fY2FzdFJldHVyblR5cGUpCkBAIC00MjcsNyArNDI3LDcgQEAg
c3RhdGljIGJvb2wgY2hlY2tTZW1hbnRpY3MoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaW5wdXRJ
dGVtcywgVmVjdG9yPEVudHJ5UG9pbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJv
b2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBm
dW5jdGlvbkRlZmluaXRpb24sIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKK3N0YXRpYyBib29s
IGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uLCBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQsIEFTVDo6TmFtZVNwYWNl
IGN1cnJlbnROYW1lU3BhY2UpCiB7CiAgICAgZW51bSBjbGFzcyBDaGVja0tpbmQgewogICAgICAg
ICBJbmRleCwKQEAgLTQ4MywxNiArNDgzLDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JP
dmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGF1dG8mIHZhbHVlVHlwZSA9ICpmdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW251bUV4cGVjdGVkUGFyYW1ldGVycyAtIDFdLT50
eXBlKCk7CiAgICAgICAgIGF1dG8gZ2V0dGVyTmFtZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1l
KCkuc3Vic3RyaW5nKDAsIGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkubGVuZ3RoKCkgLSAxKTsK
LSAgICAgICAgYXV0byogZ2V0dGVyRnVuY3MgPSBuYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoZ2V0
dGVyTmFtZSk7Ci0gICAgICAgIGlmICghZ2V0dGVyRnVuY3MpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGF1dG8gZ2V0dGVyRnVuY3MgPSBuYW1lQ29udGV4dC5nZXRGdW5jdGlv
bnMoZ2V0dGVyTmFtZSwgY3VycmVudE5hbWVTcGFjZSk7CiAgICAgICAgIFZlY3RvcjxSZXNvbHZp
bmdUeXBlPiBhcmd1bWVudFR5cGVzOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4gYXJndW1lbnRUeXBlUmVmZXJlbmNlczsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxOyArK2kpCiAgICAg
ICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKVtpXS0+dHlwZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudFR5cGUgOiBhcmd1
bWVudFR5cGVzKQogICAgICAgICAgICAgYXJndW1lbnRUeXBlUmVmZXJlbmNlcy5hcHBlbmQoYXJn
dW1lbnRUeXBlKTsKLSAgICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVy
bG9hZCgqZ2V0dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMpOworICAgICAgICBhdXRv
KiBvdmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKGdldHRlckZ1bmNzLCBhcmd1bWVu
dFR5cGVSZWZlcmVuY2VzLCBjdXJyZW50TmFtZVNwYWNlKTsKICAgICAgICAgaWYgKCFvdmVybG9h
ZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYXV0byYgcmVzdWx0VHlwZSA9
IG92ZXJsb2FkLT50eXBlKCk7CkBAIC02ODAsNiArNjc4LDcgQEAgcHJpdmF0ZToKICAgICBBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxscHRyIH07CiAgICAg
SGFzaE1hcDxGdW5jdGlvbktleSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4sIEZ1bmN0aW9uS2V5OjpIYXNoLCBGdW5jdGlvbktleTo6
VHJhaXRzPiBtX2Z1bmN0aW9uczsKICAgICBIYXNoTWFwPEFuZE92ZXJsb2FkVHlwZUtleSwgUmVm
UHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBBbmRPdmVybG9hZFR5cGVLZXk6Okhhc2gsIEFuZE92ZXJs
b2FkVHlwZUtleTo6VHJhaXRzPiBtX2FuZE92ZXJsb2FkVHlwZU1hcDsKKyAgICBBU1Q6Ok5hbWVT
cGFjZSBtX2N1cnJlbnROYW1lU3BhY2UgeyBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5
IH07CiB9OwogCiB2b2lkIENoZWNrZXI6OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCkBAIC03MzUs
NiArNzM0LDcgQEAgYm9vbCBDaGVja2VyOjpjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIAogdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQogeworICAgIG1f
Y3VycmVudE5hbWVTcGFjZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lU3BhY2UoKTsKICAgICBt
X2N1cnJlbnRGdW5jdGlvbiA9ICZmdW5jdGlvbkRlZmluaXRpb247CiAgICAgaWYgKGZ1bmN0aW9u
RGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CiAgICAgICAgIGlmICghY2hlY2tTaGFkZXJU
eXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKQEAgLTc1MSw3ICs3NTEsNyBAQCB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFjaGVja09wZXJh
dG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uLCBtX3Byb2dyYW0ubmFtZUNvbnRleHQoKSkp
IHsKKyAgICBpZiAoIWNoZWNrT3BlcmF0b3JPdmVybG9hZChmdW5jdGlvbkRlZmluaXRpb24sIG1f
cHJvZ3JhbS5uYW1lQ29udGV4dCgpLCBtX2N1cnJlbnROYW1lU3BhY2UpKSB7CiAgICAgICAgIHNl
dEVycm9yKEVycm9yKCJPcGVyYXRvciBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBzaWduYXR1cmUu
IiwgZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC04MzQsNyArODM0LDcgQEAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBDaGVj
a2VyOjpyZXNvbHZlRnVuY3Rpb24oVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXIKICAgICB7
CiAgICAgICAgIGF1dG8gaXRlciA9IG1fZnVuY3Rpb25zLmZpbmQoRnVuY3Rpb25LZXkgeyBuYW1l
LCBXVEZNb3ZlKHVubmFtZWRUeXBlcyksIGNhc3RSZXR1cm5UeXBlIH0pOwogICAgICAgICBpZiAo
aXRlciAhPSBtX2Z1bmN0aW9ucy5lbmQoKSkgewotICAgICAgICAgICAgaWYgKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiogZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChpdGVyLT52
YWx1ZSwgdHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKKyAgICAgICAgICAgIGlmIChBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoaXRlci0+
dmFsdWUsIHR5cGVzLCBjYXN0UmV0dXJuVHlwZSwgbV9jdXJyZW50TmFtZVNwYWNlKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjUyLDE1
ICsxNjUyLDE0IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2Fs
bEV4cHJlc3Npb24pCiAKICAgICBpZiAoIWZ1bmN0aW9uKSB7CiAgICAgICAgIE5hbWVDb250ZXh0
JiBuYW1lQ29udGV4dCA9IG1fcHJvZ3JhbS5uYW1lQ29udGV4dCgpOwotICAgICAgICBpZiAoYXV0
byogY2FzdFR5cGVzID0gbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Npb24ubmFtZSgp
KSkgewotICAgICAgICAgICAgaWYgKGNhc3RUeXBlcy0+c2l6ZSgpID09IDEpIHsKLSAgICAgICAg
ICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgY2FzdFR5cGUgPSAoKmNhc3RUeXBlcylbMF0uZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb24odHlwZXMsICJvcGVy
YXRvciBjYXN0Il9zdHIsIGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAmY2FzdFR5cGUp
OwotICAgICAgICAgICAgICAgIGlmIChoYXNFcnJvcigpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAg
ICBjYWxsRXhwcmVzc2lvbi5zZXRDYXN0RGF0YShjYXN0VHlwZSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGF1dG8gY2FzdFR5cGVzID0gbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Np
b24ubmFtZSgpLCBtX2N1cnJlbnROYW1lU3BhY2UpOworICAgICAgICBpZiAoY2FzdFR5cGVzLnNp
emUoKSA9PSAxKSB7CisgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgY2FzdFR5cGUgPSBjYXN0
VHlwZXNbMF0uZ2V0KCk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbih0
eXBlcywgIm9wZXJhdG9yIGNhc3QiX3N0ciwgY2FsbEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCks
ICZjYXN0VHlwZSk7CisgICAgICAgICAgICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24pCisgICAgICAgICAgICAgICAgY2Fs
bEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoY2FzdFR5cGUpOwogICAgICAgICB9CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFt
ZUNvbnRleHQuY3BwCmluZGV4IDE5OTAyMTNhM2I3MjZhMzAzM2QwMTdhNjEzMWFmNGE2ZGI2NjVh
ZmUuLjhmODE2MTE4YWMxNzM4ZDQxYzQ4MWMyZWU5N2EzZGExM2Q3ZGE5MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRl
eHQuY3BwCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5o
IgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogCisjaW5jbHVkZSA8YWxn
b3JpdGhtPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CkBAIC00
Nyw2MyArNDksNzUgQEAgTmFtZUNvbnRleHQ6Ok5hbWVDb250ZXh0KE5hbWVDb250ZXh0KiBwYXJl
bnQpCiAKIGJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVm
aW5pdGlvbikKIHsKLSAgICBpZiAoZXhpc3RzKHR5cGVEZWZpbml0aW9uLm5hbWUoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHR5cGVEZWZp
bml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5
cGU+LCAxPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgIGlmIChnbG9iYWxF
eGlzdHModHlwZURlZmluaXRpb24ubmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHR5cGVEZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1
dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFtZVNwYWNlKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZCh0eXBlRGVmaW5pdGlvbi5uYW1lKCks
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7Cisg
ICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZCh0eXBlRGVmaW5pdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgTmFt
ZUNvbnRleHQ6OmFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRp
b24pCiB7Ci0gICAgaWYgKGV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHN0cnVjdHVy
ZURlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4sIDE+KCkpOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgaWYgKGds
b2JhbEV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1l
U3BhY2UpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50
TmFtZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZChzdHJ1Y3R1
cmVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpO
YW1lZFR5cGU+LCAxPigpKTsKKyAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOwogICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKIHsKLSAgICBpZiAoZXhpc3RzKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0
byByZXN1bHQgPSBtX3R5cGVzLmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOwotICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgaWYgKGdsb2JhbEV4aXN0cyhlbnVtZXJhdGlvbkRl
ZmluaXRpb24ubmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGVudW1lcmF0aW9u
RGVmaW5pdGlvbi5zZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIGlu
ZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0
byByZXN1bHQgPSBtX3R5cGVzW2luZGV4XS5hZGQoZW51bWVyYXRpb25EZWZpbml0aW9uLm5hbWUo
KSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsK
KyAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IGJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0aW9uKQogewotICAgIGlmIChtX3R5cGVzLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5h
bWUoKSkgIT0gbV90eXBlcy5lbmQoKQotICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKGZ1bmN0
aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgIGF1dG8gaW5k
ZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRv
IHN0YW5kYXJkTGlicmFyeUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNw
YWNlOjpTdGFuZGFyZExpYnJhcnkpOworICAgIGlmIChtX3R5cGVzW2luZGV4XS5maW5kKGZ1bmN0
aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdHlwZXNbaW5kZXhdLmVuZCgpCisgICAgICAgIHx8
IG1fdHlwZXNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5h
bWUoKSkgIT0gbV90eXBlc1tzdGFuZGFyZExpYnJhcnlJbmRleF0uZW5kKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICBmdW5jdGlvbkRlZmluaXRpb24uc2V0TmFtZVNw
YWNlKG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9uc1tp
bmRleF0uYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOwogICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiB7Ci0gICAgaWYgKG1fdHlwZXMuZmlu
ZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQotICAg
ICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
KSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byBzdGFuZGFyZExpYnJhcnlJbmRl
eCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5
KTsKKyAgICBpZiAobV90eXBlc1tpbmRleF0uZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSkgIT0gbV90eXBlc1tpbmRleF0uZW5kKCkKKyAgICAgICAgfHwgbV90eXBlc1tzdGFu
ZGFyZExpYnJhcnlJbmRleF0uZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkg
IT0gbV90eXBlc1tzdGFuZGFyZExpYnJhcnlJbmRleF0uZW5kKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4oKSk7CisgICAgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5z
ZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fZnVu
Y3Rpb25zW2luZGV4XS5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkp
OwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIE5hbWVDb250ZXh0OjphZGQoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKIHsKLSAgICBp
ZiAobV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1
bmN0aW9ucy5lbmQoKQotICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgIGF1dG8gaW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIHN0YW5k
YXJkTGlicmFyeUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpT
dGFuZGFyZExpYnJhcnkpOworICAgIGlmIChtX2Z1bmN0aW9uc1tpbmRleF0uZmluZChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1bmN0aW9uc1tpbmRleF0uZW5kKCkKKyAgICAg
ICAgfHwgbV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmZpbmQobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmVu
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFk
ZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlw
ZXNbaW5kZXhdLmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOwogICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0xMTIsMzIgKzEyNiw2NCBAQCBib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQogewogICAgIGlmICh2YXJp
YWJsZURlY2xhcmF0aW9uLm5hbWUoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgaWYgKGV4aXN0cyh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSkpCisgICAgaWYgKGxvY2Fs
RXhpc3RzKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGF1dG8gcmVzdWx0ID0gbV92YXJpYWJsZXMuYWRkKFN0cmluZyh2YXJpYWJsZURlY2xh
cmF0aW9uLm5hbWUoKSksICZ2YXJpYWJsZURlY2xhcmF0aW9uKTsKICAgICByZXR1cm4gcmVzdWx0
LmlzTmV3RW50cnk7CiB9CiAKLVZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFt
ZWRUeXBlPiwgMT4qIE5hbWVDb250ZXh0OjpnZXRUeXBlcyhjb25zdCBTdHJpbmcmIG5hbWUpCitW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+IE5hbWVDb250
ZXh0OjpnZXRUeXBlcyhjb25zdCBTdHJpbmcmIG5hbWUsIEFTVDo6TmFtZVNwYWNlIGZyb21OYW1l
c3BhY2UpCiB7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZXMuZmluZChuYW1lKTsKLSAgICBp
ZiAoaXRlcmF0b3IgPT0gbV90eXBlcy5lbmQoKSkgewotICAgICAgICBpZiAobV9wYXJlbnQpCi0g
ICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFR5cGVzKG5hbWUpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAvLyBOYW1lZCB0eXBlcyBjYW4gb25seSBiZSBkZWNsYXJlZCBpbiB0
aGUgZ2xvYmFsIG5hbWUgY29udGV4dC4KKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIHJldHVy
biBtX3BhcmVudC0+Z2V0VHlwZXMobmFtZSwgZnJvbU5hbWVzcGFjZSk7CisKKyAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+IHJlc3VsdDsKKworICAg
IHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21OYW1lc3BhY2UpOwor
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVzW2luZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChp
dGVyYXRvciAhPSBtX3R5cGVzW2luZGV4XS5lbmQoKSkgeworICAgICAgICBmb3IgKGF1dG8gdHlw
ZSA6IGl0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7CiAg
ICAgfQotICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworCisgICAgaWYgKGZyb21OYW1lc3Bh
Y2UgIT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSkgeworICAgICAgICBpbmRleCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KTsK
KyAgICAgICAgaXRlcmF0b3IgPSBtX3R5cGVzW2luZGV4XS5maW5kKG5hbWUpOworICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gbV90eXBlc1tpbmRleF0uZW5kKCkpIHsKKyAgICAgICAgICAgIGZvciAo
YXV0byB0eXBlIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQodHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1W
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
PiogTmFtZUNvbnRleHQ6OmdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUpCitWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBOYW1l
Q29udGV4dDo6Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYgbmFtZSwgQVNUOjpOYW1lU3BhY2Ug
ZnJvbU5hbWVzcGFjZSkKIHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbnMuZmluZChu
YW1lKTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9mdW5jdGlvbnMuZW5kKCkpIHsKLSAgICAgICAg
aWYgKG1fcGFyZW50KQotICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRGdW5jdGlvbnMo
bmFtZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIEZ1bmN0aW9ucyBjYW4gb25s
eSBiZSBkZWNsYXJlZCBpbiB0aGUgZ2xvYmFsIG5hbWUgY29udGV4dC4KKyAgICBpZiAobV9wYXJl
bnQpCisgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0RnVuY3Rpb25zKG5hbWUsIGZyb21OYW1l
c3BhY2UpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4gcmVzdWx0OworCisgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZnJvbU5hbWVzcGFjZSk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fZnVu
Y3Rpb25zW2luZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciAhPSBtX2Z1bmN0aW9u
c1tpbmRleF0uZW5kKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHR5cGUgOiBpdGVyYXRvci0+dmFs
dWUpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHR5cGUpOworICAgIH0KKworICAgIGlmIChm
cm9tTmFtZXNwYWNlICE9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpIHsKKyAgICAg
ICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJk
TGlicmFyeSk7CisgICAgICAgIGl0ZXJhdG9yID0gbV9mdW5jdGlvbnNbaW5kZXhdLmZpbmQobmFt
ZSk7CisgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uc1tpbmRleF0uZW5kKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byB0eXBlIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJu
ICZpdGVyYXRvci0+dmFsdWU7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24qIE5hbWVDb250ZXh0OjpnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmIG5h
bWUpCkBAIC0xNTEsMTEgKzE5NywyMSBAQCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIE5hbWVD
b250ZXh0OjpnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgcmV0dXJuIGl0ZXJh
dG9yLT52YWx1ZTsKIH0KIAotYm9vbCBOYW1lQ29udGV4dDo6ZXhpc3RzKFN0cmluZyYgbmFtZSkK
K2Jvb2wgTmFtZUNvbnRleHQ6Omdsb2JhbEV4aXN0cyhTdHJpbmcmIG5hbWUpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgYXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gc3RhbmRhcmRMaWJyYXJ5SW5kZXgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSk7
CisgICAgcmV0dXJuIG1fdHlwZXNbaW5kZXhdLmZpbmQobmFtZSkgIT0gbV90eXBlc1tpbmRleF0u
ZW5kKCkKKyAgICAgICAgfHwgbV9mdW5jdGlvbnNbaW5kZXhdLmZpbmQobmFtZSkgIT0gbV9mdW5j
dGlvbnNbaW5kZXhdLmVuZCgpCisgICAgICAgIHx8IG1fdHlwZXNbc3RhbmRhcmRMaWJyYXJ5SW5k
ZXhdLmZpbmQobmFtZSkgIT0gbV90eXBlc1tzdGFuZGFyZExpYnJhcnlJbmRleF0uZW5kKCkKKyAg
ICAgICAgfHwgbV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmZpbmQobmFtZSkgIT0g
bV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmVuZCgpOworfQorCitib29sIE5hbWVD
b250ZXh0Ojpsb2NhbEV4aXN0cyhTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
dHlwZXMuZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgpCi0gICAgICAgIHx8IG1fZnVuY3Rpb25z
LmZpbmQobmFtZSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKLSAgICAgICAgfHwgbV92YXJpYWJsZXMu
ZmluZChuYW1lKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKTsKKyAgICBBU1NFUlQobV9wYXJlbnQpOwor
ICAgIHJldHVybiBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpICE9IG1fdmFyaWFibGVzLmVuZCgpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCmluZGV4IGEwNDg3OGFlN2U5ZjFk
ODNlNWQ1OTJjMmZkNzUyYmVkYzkwZmE5Y2IuLjRkNGEwMmI1ZjM5NjMzMjJlZjMwOTdkNTI1OTVk
OGY1ODYwNDQxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMTmFtZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTE5hbWVTcGFjZS5oIgorCiAjaW5jbHVkZSA8ZnVu
Y3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KQEAgLTU0LDYgKzU2LDEyIEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKIHB1YmxpYzoKICAgICBO
YW1lQ29udGV4dChOYW1lQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7CiAKKyAgICB2b2lkIHNl
dEN1cnJlbnROYW1lU3BhY2UoQVNUOjpOYW1lU3BhY2UgY3VycmVudE5hbWVTcGFjZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVCghbV9wYXJlbnQpOworICAgICAgICBtX2N1cnJlbnROYW1lU3BhY2Ug
PSBjdXJyZW50TmFtZVNwYWNlOworICAgIH0KKwogICAgIGJvb2wgYWRkKEFTVDo6VHlwZURlZmlu
aXRpb24mKTsKICAgICBib29sIGFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsKICAgICBi
b29sIGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOwpAQCAtNjIsMTcgKzcwLDE5IEBA
IHB1YmxpYzoKICAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOwogICAg
IGJvb2wgYWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOwogCi0gICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogZ2V0VHlwZXMoY29uc3QgU3Ry
aW5nJik7Ci0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmKTsKKyAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+IGdldFR5cGVzKGNvbnN0
IFN0cmluZyYsIEFTVDo6TmFtZVNwYWNlIGZyb21OYW1lc3BhY2UpOworICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IGdldEZ1bmN0
aW9ucyhjb25zdCBTdHJpbmcmLCBBU1Q6Ok5hbWVTcGFjZSBmcm9tTmFtZXNwYWNlKTsKICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYpOwogCiBw
cml2YXRlOgotICAgIGJvb2wgZXhpc3RzKFN0cmluZyYpOworICAgIGJvb2wgZ2xvYmFsRXhpc3Rz
KFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgYm9vbCBsb2NhbEV4aXN0cyhTdHJpbmcmIG5hbWUp
IGNvbnN0OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
PiBtX2Z1bmN0aW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPj4gbV90eXBlc1szXTsKKyAgICBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4+IG1fZnVuY3Rpb25zWzNdOwogICAgIEhhc2hNYXA8U3RyaW5nLCBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24qPiBtX3ZhcmlhYmxlczsKICAgICBOYW1lQ29udGV4dCogbV9wYXJlbnQ7
CisgICAgQVNUOjpOYW1lU3BhY2UgbV9jdXJyZW50TmFtZVNwYWNlIHsgQVNUOjpOYW1lU3BhY2U6
OlN0YW5kYXJkTGlicmFyeSB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDY3YjFj
OWI2ZDg2MDUyNDdmYzEyYzRiMWU1M2YzMjk1YmZiOTQ0NzMuLmNiMDE1ZWYyY2Q3NWUyYzBiZDAw
NzI4MmQxZmIzMTIyYTQ2MGMyNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTU3LDYgKzU3LDcg
QEAgTmFtZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIoTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQog
TmFtZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIoTmFtZVJlc29sdmVyJiBwYXJlbnRSZXNvbHZlciwg
TmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQogICAgIDogbV9uYW1lQ29udGV4dChuYW1lQ29udGV4
dCkKICAgICAsIG1fcGFyZW50TmFtZVJlc29sdmVyKCZwYXJlbnRSZXNvbHZlcikKKyAgICAsIG1f
Y3VycmVudE5hbWVTcGFjZShwYXJlbnRSZXNvbHZlci5tX2N1cnJlbnROYW1lU3BhY2UpCiB7CiB9
CiAKQEAgLTgwLDE0ICs4MSwxMCBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpUeXBl
UmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQogICAgIGlmICh0eXBlUmVmZXJlbmNlLm1heWJlUmVz
b2x2ZWRUeXBlKCkpIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MTYxIFNob3VsZG4ndCB3ZSBrbm93IGJ5IG5vdyB3aGV0aGVyIHRoZSB0eXBlIGhh
cyBiZWVuIHJlc29sdmVkIG9yIG5vdD8KICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogY2Fu
ZGlkYXRlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXModHlwZVJlZmVyZW5jZS5uYW1lKCkpOwot
ICAgIGlmIChjYW5kaWRhdGVzID09IG51bGxwdHIpIHsKLSAgICAgICAgc2V0RXJyb3IoRXJyb3Io
IkNhbm5vdCBmaW5kIHR5cGUgcmVmZXJlbmNlLiIsIHR5cGVSZWZlcmVuY2UuY29kZUxvY2F0aW9u
KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6
ICpjYW5kaWRhdGVzKQorICAgIGF1dG8gY2FuZGlkYXRlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlw
ZXModHlwZVJlZmVyZW5jZS5uYW1lKCksIG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgZm9yIChh
dXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKQogICAgICAgICBWaXNpdG9yOjp2aXNpdChjYW5k
aWRhdGUpOwotICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKCpj
YW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkpCisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoY2FuZGlkYXRlcywgdHlwZVJlZmVyZW5j
ZS50eXBlQXJndW1lbnRzKCkpKQogICAgICAgICB0eXBlUmVmZXJlbmNlLnNldFJlc29sdmVkVHlw
ZSgqcmVzdWx0KTsKICAgICBlbHNlIHsKICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBy
ZXNvbHZlIHR5cGUgYXJndW1lbnRzLiIsIHR5cGVSZWZlcmVuY2UuY29kZUxvY2F0aW9uKCkpKTsK
QEAgLTE5MiwyMCArMTg5LDE5IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4
cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiAgICAgICAgIGF1dG8mIHZhcmlhYmxlUmVmZXJlbmNl
ID0gZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNlKCkp
OwogICAgICAgICBpZiAoIW1fbmFtZUNvbnRleHQuZ2V0VmFyaWFibGUodmFyaWFibGVSZWZlcmVu
Y2UubmFtZSgpKSkgewogICAgICAgICAgICAgYXV0byBiYXNlTmFtZSA9IHZhcmlhYmxlUmVmZXJl
bmNlLm5hbWUoKTsKLSAgICAgICAgICAgIGlmIChhdXRvIGVudW1lcmF0aW9uVHlwZXMgPSBtX25h
bWVDb250ZXh0LmdldFR5cGVzKGJhc2VOYW1lKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChl
bnVtZXJhdGlvblR5cGVzLT5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgQVNUOjpOYW1l
ZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBdOwotICAgICAgICAgICAgICAgIGlm
IChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9
IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih0eXBlKTsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBtZW1iZXJOYW1lID0gZG90RXhwcmVzc2lvbi5maWVsZE5hbWUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVmaW5pdGlv
bi5tZW1iZXJCeU5hbWUobWVtYmVyTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsID0gQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWw6OndyYXAoZG90RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgV1RGTW92ZShiYXNlTmFtZSks
IFdURk1vdmUobWVtYmVyTmFtZSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgKm1lbWJlcik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6RW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsPihkb3RFeHByZXNzaW9uLCBXVEZNb3ZlKGVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNldEVycm9yKEVycm9yKCJObyBlbnVtIG1lbWJl
ciBtYXRjaGVzIHRoZSB1c2VkIG5hbWUuIiwgZG90RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkp
OworICAgICAgICAgICAgYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRU
eXBlcyhiYXNlTmFtZSwgbV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICAgICAgICAgIEFTU0VSVChl
bnVtZXJhdGlvblR5cGVzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTVDo6TmFtZWRUeXBl
JiB0eXBlID0gZW51bWVyYXRpb25UeXBlc1swXTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpF
bnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpOworICAgICAgICAgICAgICAgIGF1dG8gbWVtYmVy
TmFtZSA9IGRvdEV4cHJlc3Npb24uZmllbGROYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKGF1
dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUobWVtYmVyTmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwg
PSBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbDo6d3JhcChkb3RFeHByZXNzaW9uLmNvZGVM
b2NhdGlvbigpLCBXVEZNb3ZlKGJhc2VOYW1lKSwgV1RGTW92ZShtZW1iZXJOYW1lKSwgZW51bWVy
YXRpb25EZWZpbml0aW9uLCAqbWVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgQVNUOjpyZXBs
YWNlV2l0aDxBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbD4oZG90RXhwcmVzc2lvbiwgV1RG
TW92ZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXRFcnJvcihFcnJvcigi
Tm8gZW51bSBtZW1iZXIgbWF0Y2hlcyB0aGUgdXNlZCBuYW1lLiIsIGRvdEV4cHJlc3Npb24uY29k
ZUxvY2F0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yMTMsMjQgKzIwOSwxMSBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6
dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQogICAgIFZpc2l0b3I6OnZp
c2l0KGRvdEV4cHJlc3Npb24pOwogfQogCi12b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpF
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkKK3ZvaWQg
TmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYpCiB7Ci0g
ICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29u
dGV4dC5nZXRUeXBlcyhlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwubGVmdCgpKSkgewotICAgICAg
ICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+c2l6ZSgpID09IDEpOwotICAgICAgICBBU1Q6Ok5h
bWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRpb25UeXBlcylbMF07Ci0gICAgICAgIGlmIChpczxB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKLSAgICAgICAgICAgIEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSk7Ci0gICAgICAgICAgICBpZiAoYXV0byogbWVt
YmVyID0gZW51bWVyYXRpb25EZWZpbml0aW9uLm1lbWJlckJ5TmFtZShlbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwucmlnaHQoKSkpIHsKLSAgICAgICAgICAgICAgICBlbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwuc2V0RW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25EZWZpbml0aW9uLCAqbWVtYmVy
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCByZXNvbHZlIGVudW1lcmF0aW9u
IG1lbWJlciBsaXRlcmFsLiIsIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5jb2RlTG9jYXRpb24o
KSkpOworICAgIC8vIFRoZSBvbmx5IHdheSBhbiBlbnVtZXJhdGlvbiBsaXRlcmFsIGNvdWxkIGhh
dmUgYmVlbiBjcmVhdGVkIHNvIGZhciBpcyBieSBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90
RXhwcmVzc2lvbiYpLAorICAgIC8vIHdoaWNoIGFscmVhZHkgcGVyZm9ybXMgYWxsIHRoZSB3b3Jr
IHdlIHdvdWxkIGJlIGRvaW5nIGhlcmUsIGFuZCBkb2Vzbid0IHJlY3Vyc2UuCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCkBAIC0yNDUs
MjEgKzIyOCwyNSBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aQogRXhwZWN0ZWQ8dm9pZCwgRXJy
b3I+IHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBu
YW1lUmVzb2x2ZXIpCiB7CiAgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0u
dHlwZURlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnROYW1l
U3BhY2UodHlwZURlZmluaXRpb24uZ2V0KCkubmFtZVNwYWNlKCkpOwogICAgICAgICBuYW1lUmVz
b2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVEZWZpbml0aW9uKTsKICAgICAgICAgaWYgKG5h
bWVSZXNvbHZlci5oYXNFcnJvcigpKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5y
ZXN1bHQoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJv
Z3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5zZXRD
dXJyZW50TmFtZVNwYWNlKHN0cnVjdHVyZURlZmluaXRpb24uZ2V0KCkubmFtZVNwYWNlKCkpOwog
ICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZURlZmluaXRp
b24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIGVudW1l
cmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7Cisg
ICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50TmFtZVNwYWNlKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9y
QW5kVmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKICAgICAgICAgaWYgKG5hbWVSZXNvbHZl
ci5oYXNFcnJvcigpKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5yZXN1bHQoKTsK
ICAgICB9CiAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVu
dE5hbWVTcGFjZShuYXRpdmVUeXBlRGVjbGFyYXRpb24uZ2V0KCkubmFtZVNwYWNlKCkpOwogICAg
ICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bik7CiAgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKICAgICAgICAgICAgIHJl
dHVybiBuYW1lUmVzb2x2ZXIucmVzdWx0KCk7CkBAIC0yNzAsMTEgKzI1NywxMyBAQCBFeHBlY3Rl
ZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1l
UmVzb2x2ZXImIG5hbWVSZQogRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHJlc29sdmVUeXBlTmFtZXNJ
bkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikK
IHsKICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25E
ZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50TmFtZVNwYWNl
KGZ1bmN0aW9uRGVmaW5pdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNv
bHZlci5jaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKICAgICAgICAgaWYg
KG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZl
ci5yZXN1bHQoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5h
bWVSZXNvbHZlci5zZXRDdXJyZW50TmFtZVNwYWNlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
Z2V0KCkubmFtZVNwYWNlKCkpOwogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZp
c2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVy
Lmhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
UmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFt
ZVJlc29sdmVyLmgKaW5kZXggNjU4YzM1ZmNkYjU3MmUyNGQ1ODIxNzFmMTFlOGM2YTJiYTAzMmU3
My4uYTc5MjRlMDVmZjZhYTBhZGY2OWJkM2M2ODIyYTNjYmVmZDdjMzE0YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZl
ci5oCkBAIC00Niw2ICs0Niw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfk5hbWVSZXNvbHZl
cigpOwogCisgICAgdm9pZCBzZXRDdXJyZW50TmFtZVNwYWNlKEFTVDo6TmFtZVNwYWNlIG5hbWVT
cGFjZSkgeyBtX2N1cnJlbnROYW1lU3BhY2UgPSBuYW1lU3BhY2U7IH0KKwogcHJpdmF0ZToKICAg
ICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCB2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKQEAgLTYz
LDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICBOYW1lQ29udGV4dCYgbV9uYW1lQ29udGV4dDsKICAg
ICBIYXNoU2V0PEFTVDo6VHlwZVJlZmVyZW5jZSo+IG1fdHlwZVJlZmVyZW5jZXM7CiAgICAgTmFt
ZVJlc29sdmVyKiBtX3BhcmVudE5hbWVSZXNvbHZlciB7IG51bGxwdHIgfTsKKyAgICBBU1Q6Ok5h
bWVTcGFjZSBtX2N1cnJlbnROYW1lU3BhY2UgeyBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJy
YXJ5IH07CiB9OwogCiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZU5hbWVzSW5UeXBlcyhQ
cm9ncmFtJiwgTmFtZVJlc29sdmVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKaW5kZXggMDE2MTE0YTYxMGUxMTAwZWZlNjk3
MmNhMmEyMzUzMjdjMTUyZTdhYi4uY2Y1YjQ2ZmQxMmMzN2M1ZTNkMGNiYzZhNTMyNDU0MzRlMjIy
YTU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUGFyc2VyLmNwcApAQCAtNDEsMjQgKzQxLDIzIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAjZGVm
aW5lIFBBUlNFKG5hbWUsIGVsZW1lbnQsIC4uLikgXAogICAgIGF1dG8gbmFtZSA9IHBhcnNlIyNl
bGVtZW50KF9fVkFfQVJHU19fKTsgXAogICAgIGlmICghbmFtZSkgXAotICAgICAgICByZXR1cm4g
VW5leHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsgXAorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsgXAogCiAjZGVmaW5lIENPTlNVTUVfVFlQRShuYW1lLCB0
eXBlKSBcCiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5cGUoVG9rZW46OlR5cGU6OnR5cGUpOyBc
CiAgICAgaWYgKCFuYW1lKSBcCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1l
LmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsK
IAogI2RlZmluZSBQRUVLKG5hbWUpIFwKICAgICBhdXRvIG5hbWUgPSBwZWVrKCk7IFwKICAgICBp
ZiAoIW5hbWUpIFwKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3Io
KSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChuYW1lLmVycm9yKCkpOwogCiAjZGVm
aW5lIFBFRUtfRlVSVEhFUihuYW1lKSBcCiAgICAgYXV0byBuYW1lID0gcGVla0Z1cnRoZXIoKTsg
XAogICAgIGlmICghbmFtZSkgXAotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFt
ZS5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG5hbWUuZXJyb3IoKSk7
CiAKLS8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1
NjgyIFJldHVybiBhIGJldHRlciBlcnJvciBjb2RlIGZyb20gdGhpcywgYW5kIHJlcG9ydCBpdCB0
byBKYXZhU2NyaXB0LgogYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cmlu
Z1ZpZXcgc3RyaW5nVmlldywgUGFyc2luZ01vZGUgbW9kZSkgLT4gRXhwZWN0ZWQ8dm9pZCwgRXJy
b3I+CiB7CiAgICAgbV9sZXhlciA9IExleGVyKHN0cmluZ1ZpZXcpOwpAQCAtOTQsNyArOTMsOCBA
QCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5nVmlldyBzdHJpbmdW
aWV3LCBQYXJzaW5nTW9kZSBtb2RlKSAtPgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6TmF0aXZlOiB7Ci0gICAgICAgICAgICBBU1NF
UlQobV9tb2RlID09IFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpOworICAgICAgICAgICAg
aWYgKG1fbW9kZSAhPSBQYXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWlsKG1ha2VTdHJpbmcoIiduYXRpdmUnIGNhbid0IGV4aXN0IG91dHNpZGUg
b2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuIikpOwogICAgICAgICAgICAgYXV0byBmdXJ0aGVyVG9r
ZW4gPSBwZWVrRnVydGhlcigpOwogICAgICAgICAgICAgaWYgKCFmdXJ0aGVyVG9rZW4pCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCmluZGV4IDczZjQ4MzIwM2EwNGE0ODMzYzE1
NDUzODBkYjFlODVkYzJiMmE0ODAuLjBkMDQ1MmJlM2FmMmY2ZmU1ZWVjZjk3ZWViNDE5YmQ4Y2E3
MDNhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIldITFNMTGl0ZXJh
bFR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgorI2luY2x1ZGUgIldITFNMTmFtZVNwYWNlLmgi
CiAjaW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByZXNlcnZlVmFyaWFi
bGVMaWZldGltZXMuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKQEAgLTEyNCwxMyArMTI1
LDMzIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotCiBwcml2YXRlOgogICAgIFN0cmlu
ZyBtX3BoYXNlTmFtZTsKICAgICBQaGFzZVRpbWVzJiBtX3BoYXNlVGltZXM7CiAgICAgTW9ub3Rv
bmljVGltZSBtX3N0YXJ0OwogfTsKIAorc3RydWN0IFNoYWRlck1vZHVsZSB7CisgICAgU2hhZGVy
TW9kdWxlKGNvbnN0IFN0cmluZyYgd2hsc2xTb3VyY2UpCisgICAgICAgIDogd2hsc2xTb3VyY2Uo
d2hsc2xTb3VyY2UpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyB3aGxzbFNvdXJjZTsKK307
CisKK093bmVkU2hhZGVyTW9kdWxlIGNyZWF0ZVNoYWRlck1vZHVsZShjb25zdCBTdHJpbmcmIHdo
bHNsU291cmNlKQoreworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAwODcyIFdlIHNob3VsZCBjb25zaWRlciBtb3ZpbmcgYXMgbXVjaCB3b3Jr
IGZyb20gcHJlcGFyZSgpIGludG8gaGVyZSBhcyBwb3NzaWJsZS4KKyAgICByZXR1cm4gT3duZWRT
aGFkZXJNb2R1bGUobmV3IFNoYWRlck1vZHVsZSh3aGxzbFNvdXJjZSkpOworfQorCit2b2lkIFNo
YWRlck1vZHVsZURlbGV0ZXI6Om9wZXJhdG9yKCkoU2hhZGVyTW9kdWxlKiBtb2R1bGUpCit7Cisg
ICAgZGVsZXRlIG1vZHVsZTsKK30KKworLy8gRklYTUU6IFRoZSBmaXJzdCBhcmd1bWVudCB0byBl
cnJvclN0cmluZygpCiAjZGVmaW5lIENIRUNLX1BBU1MocGFzcywgLi4uKSBcCiAgICAgZG8geyBc
CiAgICAgICAgIGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRlZChwcm9ncmFtLCAiQVNUIGJl
Zm9yZSAiICMgcGFzcyk7IFwKQEAgLTEzOCw4ICsxNTksOCBAQCBwcml2YXRlOgogICAgICAgICBh
dXRvIHJlc3VsdCA9IHBhc3MoX19WQV9BUkdTX18pOyBcCiAgICAgICAgIGlmICghcmVzdWx0KSB7
IFwKICAgICAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpIFwKLSAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oImZhaWxlZCBwYXNzOiAiICMgcGFzcywgTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNs
U291cmNlLCByZXN1bHQuZXJyb3IoKSkpOyBcCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCByZXN1bHQuZXJyb3IoKSkpOyBc
CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgcGFzczogIiAjIHBhc3MsIExleGVy
OjplcnJvclN0cmluZyhTdHJpbmcoKSwgcmVzdWx0LmVycm9yKCkpKTsgXAorICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyhTdHJpbmcoKSwgcmVzdWx0
LmVycm9yKCkpKTsgXAogICAgICAgICB9IFwKICAgICB9IHdoaWxlICgwKQogCkBAIC0xNTAsMTkg
KzE3MSwzNyBAQCBwcml2YXRlOgogICAgICAgICBwYXNzKF9fVkFfQVJHU19fKTsgXAogICAgIH0g
d2hpbGUgKDApCiAKLXN0YXRpYyBFeHBlY3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBhcmVTaGFy
ZWQoUGhhc2VUaW1lcyYgcGhhc2VUaW1lcywgU3RyaW5nJiB3aGxzbFNvdXJjZSkKK3N0YXRpYyBF
eHBlY3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBhcmVTaGFyZWQoUGhhc2VUaW1lcyYgcGhhc2VU
aW1lcywgY29uc3QgU3RyaW5nJiB3aGxzbFNvdXJjZTEsIGNvbnN0IFN0cmluZyogd2hsc2xTb3Vy
Y2UyID0gbnVsbHB0cikKIHsKICAgICBQcm9ncmFtIHByb2dyYW07CiAgICAgUGFyc2VyIHBhcnNl
cjsKIAogICAgIHsKKyAgICAgICAgcHJvZ3JhbS5uYW1lQ29udGV4dCgpLnNldEN1cnJlbnROYW1l
U3BhY2UoQVNUOjpOYW1lU3BhY2U6Ok5hbWVTcGFjZTEpOworCiAgICAgICAgIFBoYXNlVGltZXIg
cGhhc2VUaW1lcigicGFyc2UiLCBwaGFzZVRpbWVzKTsKLSAgICAgICAgYXV0byBwYXJzZVJlc3Vs
dCA9IHBhcnNlci5wYXJzZShwcm9ncmFtLCB3aGxzbFNvdXJjZSwgUGFyc2luZ01vZGU6OlVzZXIp
OworICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNs
U291cmNlMSwgUGFyc2luZ01vZGU6OlVzZXIpOwogICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7
Ci0gICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKQotICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCBMZXhlcjo6ZXJyb3JTdHJpbmco
d2hsc2xTb3VyY2UsIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIHBhcnNlUmVzdWx0
LmVycm9yKCkpKTsKKyAgICAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yU3RyaW5nKCkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwg
TGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZygpLCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVy
cm9yU3RyaW5nKCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJy
b3JTdHJpbmcoU3RyaW5nKCksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAod2hsc2xTb3VyY2UyKSB7CisgICAgICAgICAgICBwcm9ncmFtLm5hbWVDb250ZXh0
KCkuc2V0Q3VycmVudE5hbWVTcGFjZShBU1Q6Ok5hbWVTcGFjZTo6TmFtZVNwYWNlMik7CisgICAg
ICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sICp3aGxzbFNv
dXJjZTIsIFBhcnNpbmdNb2RlOjpVc2VyKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VSZXN1bHQp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTog
IiwgTGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZygpLCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJn
dW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcoU3RyaW5nKCksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBwcm9ncmFtLm5hbWVDb250ZXh0KCku
c2V0Q3VycmVudE5hbWVTcGFjZShBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KTsKICAg
ICB9CiAKICAgICB7CkBAIC0yMDAsMTQgKzIzOSwxNyBAQCBzdGF0aWMgRXhwZWN0ZWQ8UHJvZ3Jh
bSwgU3RyaW5nPiBwcmVwYXJlU2hhcmVkKFBoYXNlVGltZXMmIHBoYXNlVGltZXMsIFN0cmluZyYg
dwogICAgIHJldHVybiBwcm9ncmFtOwogfQogCi1FeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0
LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpCitFeHBlY3RlZDxSZW5kZXJQcmVwYXJl
UmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoY29uc3QgU2hhZGVyTW9kdWxlJiB2ZXJ0ZXhTaGFkZXJN
b2R1bGUsIGNvbnN0IFNoYWRlck1vZHVsZSogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIFJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKQogewogICAgIFBoYXNl
VGltZXMgcGhhc2VUaW1lczsKICAgICBNZXRhbDo6UmVuZGVyTWV0YWxDb2RlIGdlbmVyYXRlZENv
ZGU7CiAKICAgICB7CiAgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigicHJlcGFyZSB0b3Rh
bCIsIHBoYXNlVGltZXMpOwotICAgICAgICBhdXRvIHByb2dyYW0gPSBwcmVwYXJlU2hhcmVkKHBo
YXNlVGltZXMsIHdobHNsU291cmNlKTsKKyAgICAgICAgY29uc3QgU3RyaW5nKiBzZWNvbmRTaGFk
ZXIgPSBudWxscHRyOworICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXJNb2R1bGUgJiYgZnJhZ21l
bnRTaGFkZXJNb2R1bGUgIT0gJnZlcnRleFNoYWRlck1vZHVsZSkKKyAgICAgICAgICAgIHNlY29u
ZFNoYWRlciA9ICZmcmFnbWVudFNoYWRlck1vZHVsZS0+d2hsc2xTb3VyY2U7CisgICAgICAgIGF1
dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQocGhhc2VUaW1lcywgdmVydGV4U2hhZGVyTW9kdWxl
LndobHNsU291cmNlLCBzZWNvbmRTaGFkZXIpOwogICAgICAgICBpZiAoIXByb2dyYW0pCiAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocHJvZ3JhbS5lcnJvcigpKTsKIApAQCAtMjE1
LDggKzI1NywxMCBAQCBFeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBh
cmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbgogICAgICAgICB7CiAgICAgICAg
ICAgICBQaGFzZVRpbWVyIHBoYXNlVGltZXIoIm1hdGNoU2VtYW50aWNzIiwgcGhhc2VUaW1lcyk7
CiAgICAgICAgICAgICBtYXRjaGVkU2VtYW50aWNzID0gbWF0Y2hTZW1hbnRpY3MoKnByb2dyYW0s
IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoZWRTZW1h
bnRpY3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJv
clN0cmluZyh3aGxzbFNvdXJjZSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBzZW1hbnRpY3MiX3N0
cikpKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykgeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcoU3RyaW5n
KCksIEVycm9yKCJDb3VsZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9zdHIpKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICB7CkBAIC0yMzQsNyArMjc4LDcgQEAgRXhwZWN0ZWQ8
UmVuZGVyUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2Us
IFJlbmRlclBpcGVsaW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FeHBlY3RlZDxDb21wdXRl
UHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpCitFeHBlY3Rl
ZDxDb21wdXRlUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKGNvbnN0IFNoYWRlck1vZHVs
ZSYgc2hhZGVyTW9kdWxlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yKQogewogICAgIFBoYXNlVGltZXMgcGhhc2VUaW1lczsKICAgICBNZXRhbDo6
Q29tcHV0ZU1ldGFsQ29kZSBnZW5lcmF0ZWRDb2RlOwpAQCAtMjQyLDcgKzI4Niw3IEBAIEV4cGVj
dGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNv
dXJjZSwgQ29tcHV0ZVBpcGVsCiAKICAgICB7CiAgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1l
cigicHJlcGFyZSB0b3RhbCIsIHBoYXNlVGltZXMpOwotICAgICAgICBhdXRvIHByb2dyYW0gPSBw
cmVwYXJlU2hhcmVkKHBoYXNlVGltZXMsIHdobHNsU291cmNlKTsKKyAgICAgICAgYXV0byBwcm9n
cmFtID0gcHJlcGFyZVNoYXJlZChwaGFzZVRpbWVzLCBzaGFkZXJNb2R1bGUud2hsc2xTb3VyY2Up
OwogICAgICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQocHJvZ3JhbS5lcnJvcigpKTsKIApAQCAtMjUwLDE1ICsyOTQsMjAgQEAgRXhwZWN0ZWQ8Q29t
cHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBD
b21wdXRlUGlwZWwKICAgICAgICAgewogICAgICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVy
KCJtYXRjaFNlbWFudGljcyIsIHBoYXNlVGltZXMpOwogICAgICAgICAgICAgbWF0Y2hlZFNlbWFu
dGljcyA9IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFtLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
KTsKLSAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCBFcnJv
cigiQ291bGQgbm90IG1hdGNoIHNlbWFudGljcyJfc3RyKSkpOworICAgICAgICAgICAgaWYgKCFt
YXRjaGVkU2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBmaXJzdCBh
cmd1bWVudCB0byBlcnJvclN0cmluZygpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKExleGVyOjplcnJvclN0cmluZyhTdHJpbmcoKSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRj
aCBzZW1hbnRpY3MiX3N0cikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgfQogCiAgICAgICAgIHsKICAgICAgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigi
Y29tcHV0ZURpbWVuc2lvbnMiLCBwaGFzZVRpbWVzKTsKICAgICAgICAgICAgIGNvbXB1dGVEaW1l
bnNpb25zID0gV0hMU0w6OmNvbXB1dGVEaW1lbnNpb25zKCpwcm9ncmFtLCAqbWF0Y2hlZFNlbWFu
dGljcy0+c2hhZGVyKTsKLSAgICAgICAgICAgIGlmICghY29tcHV0ZURpbWVuc2lvbnMpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyh3aGxz
bFNvdXJjZSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBjb21wdXRlIGRpbWVuc2lvbnMiX3N0cikp
KTsKKyAgICAgICAgICAgIGlmICghY29tcHV0ZURpbWVuc2lvbnMpIHsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yU3RyaW5nKCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZygp
LCBFcnJvcigiQ291bGQgbm90IG1hdGNoIGNvbXB1dGUgZGltZW5zaW9ucyJfc3RyKSkpOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAppbmRleCA1ZGE3N2Y1ZjJlZGRi
OTUwOTc0ODM0N2U5NGNhN2I1OWNlYjRhNWI0Li5lZmQ2NWE3MDU3NWY1OWFjNjRkYjI1YTRmMjc2
NmQzN2M0MTJhYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByZXBhcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByZXBhcmUuaApAQCAtMzksMTIgKzM5LDIwIEBAIG5hbWVzcGFjZSBXSExTTCB7
CiAKIGNvbnN0ZXhwciBib29sIGR1bXBNZXRhbENvbXBpbGVUaW1lcyA9IGZhbHNlOwogCisvLyBI
aWRlIHRoZSBjb250ZW50cyBvZiB0aGUgU2hhZGVyTW9kdWxlLiBDbGllbnRzIG9mIHRoZSBjb21w
aWxlciBzaG91bGRuJ3QgY2FyZSB3aGF0J3MgaW5zaWRlIGl0Lgorc3RydWN0IFNoYWRlck1vZHVs
ZTsKK3N0cnVjdCBTaGFkZXJNb2R1bGVEZWxldGVyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoU2hh
ZGVyTW9kdWxlKik7Cit9OwordXNpbmcgT3duZWRTaGFkZXJNb2R1bGUgPSBzdGQ6OnVuaXF1ZV9w
dHI8U2hhZGVyTW9kdWxlLCBTaGFkZXJNb2R1bGVEZWxldGVyPjsKK093bmVkU2hhZGVyTW9kdWxl
IGNyZWF0ZVNoYWRlck1vZHVsZShjb25zdCBTdHJpbmcmIHdobHNsU291cmNlKTsKKwogc3RydWN0
IFJlbmRlclByZXBhcmVSZXN1bHQgewogICAgIFN0cmluZ0J1aWxkZXIgbWV0YWxTb3VyY2U7CiAg
ICAgTWV0YWw6Ok1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZFZlcnRleEVudHJ5UG9pbnROYW1l
OwogICAgIE1ldGFsOjpNYW5nbGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRGcmFnbWVudEVudHJ5UG9p
bnROYW1lOwogfTsKLUV4cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFy
ZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImKTsKK0V4cGVj
dGVkPFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShjb25zdCBTaGFkZXJNb2R1
bGUmIHZlcnRleFNoYWRlck1vZHVsZSwgY29uc3QgU2hhZGVyTW9kdWxlKiBmcmFnbWVudFNoYWRl
ck1vZHVsZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7CiAKIHN0cnVjdCBDb21wdXRlRGlt
ZW5zaW9ucyB7CiAgICAgdW5zaWduZWQgd2lkdGg7CkBAIC01Nyw3ICs2NSw3IEBAIHN0cnVjdCBD
b21wdXRlUHJlcGFyZVJlc3VsdCB7CiAgICAgTWV0YWw6Ok1hbmdsZWRGdW5jdGlvbk5hbWUgbWFu
Z2xlZEVudHJ5UG9pbnROYW1lOwogICAgIENvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNp
b25zOwogfTsKLUV4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUo
U3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYpOworRXhwZWN0
ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShjb25zdCBTaGFkZXJNb2R1
bGUmLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNM
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCmluZGV4IDQyNGU3OTUxNWU3OTMxYWZl
ODQ2MzRlYzRiNmVjNmMzOTc3Mzg2ZjguLjdjNjU2OTc4ODQ5ZGZiMGI5ZjVmMTEwZmRlZDRjZGVj
MTgyZmRhNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApAQCAtNTIsMTIgKzUy
LDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24mIGNhbmRpZGF0ZSwgY29uc3QgVmVjdG9yCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
eXBlS2luZD4KLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3Zlcmxv
YWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBUeXBlS2luZCogY2FzdFJldHVyblR5
cGUpCitzdGF0aWMgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVy
bG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIFR5cGVLaW5kKiBjYXN0UmV0dXJu
VHlwZSwgQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlKQogewogICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IGNhbmRpZGF0ZXM7CiAg
ICAgZm9yIChhdXRvJiBwb3NzaWJsZUZ1bmN0aW9uIDogcG9zc2libGVGdW5jdGlvbnMpIHsKICAg
ICAgICAgaWYgKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkuZW50cnlQb2ludFR5cGUoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobmFtZVNwYWNlID09IEFTVDo6TmFtZVNwYWNl
OjpTdGFuZGFyZExpYnJhcnkpIHsKKyAgICAgICAgICAgIGlmIChwb3NzaWJsZUZ1bmN0aW9uLmdl
dCgpLm5hbWVTcGFjZSgpICE9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
cG9zc2libGVGdW5jdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSAhPSBBU1Q6Ok5hbWVTcGFjZTo6U3Rh
bmRhcmRMaWJyYXJ5ICYmIHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkubmFtZVNwYWNlKCkgIT0gbmFt
ZVNwYWNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAgICAgICAgIGlm
IChpbmZlclR5cGVzRm9yQ2FsbChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLCBhcmd1bWVudFR5cGVz
LCBjYXN0UmV0dXJuVHlwZSkpCiAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChwb3NzaWJs
ZUZ1bmN0aW9uLmdldCgpKTsKICAgICB9CkBAIC03NywxOSArODQsMTkgQEAgQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBl
cykKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZp
bmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkKIHsKLSAg
ICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBh
cmd1bWVudFR5cGVzLCBzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSo+KG51bGxwdHIpKTsKKyAg
ICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBh
cmd1bWVudFR5cGVzLCBzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSo+KG51bGxwdHIpLCBuYW1l
U3BhY2UpOwogfQogCi1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92
ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJl
dHVyblR5cGUpCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVy
blR5cGUsIEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2ZUZ1
bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0
UmV0dXJuVHlwZSk7CisgICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwb3Nz
aWJsZUZ1bmN0aW9ucywgYXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUsIG5hbWVTcGFjZSk7
CiB9CiAKLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQo
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwg
MT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNv
bHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5U
eXBlKQorQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
PiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29s
dmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpVbm5hbWVkVHlwZSogY2FzdFJldHVyblR5
cGUsIEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0
dXJuVHlwZSk7CisgICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwb3NzaWJs
ZUZ1bmN0aW9ucywgYXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUsIG5hbWVTcGFjZSk7CiB9
CiAKIEFTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiBwb3NzaWJsZVR5cGVzLCBBU1Q6
OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5o
CmluZGV4IDNkMzRhYjZmMzhkNDk5YzlkMzU4NmNkMTMwYTczYTI5MWU3ZDBkMTIuLjNiMTk1YTIx
YzU3MmUwZjcyMGZhZGFkZmRhMWExN2RhNDYwNDEyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2Fk
SW1wbC5oCkBAIC00Myw5ICs0Myw5IEBAIGNsYXNzIE5hbWVkVHlwZTsKIAogfQogCi1BU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1
bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBh
cmd1bWVudFR5cGVzKTsKLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBjYXN0
UmV0dXJuVHlwZSk7Ci1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92
ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6OlVubmFtZWRUeXBlKiBjYXN0
UmV0dXJuVHlwZSk7CitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92
ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVTcGFjZSk7CitBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJs
ZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+
JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUsIEFTVDo6TmFt
ZVNwYWNlKTsKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3Zlcmxv
YWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxS
ZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1
cm5UeXBlLCBBU1Q6Ok5hbWVTcGFjZSk7CiBBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVy
bG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAx
PiYsIEFTVDo6VHlwZUFyZ3VtZW50cyYpOwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTdiYzNhOTA1ODUyNmEyOGRiZTc1
NThhZTY0ZjkyNzhlOWU1MTA5ZC4uM2Q0ZTFlMmM2YTJhZTcwOGJmNTBkOTdlYzhmYjc1NTNlY2I5
Yjc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTMzNDQsNiArMTMzNDQsNyBAQAogCQlDMjM0QTlCNTIxRTkyQzIzMDAzQzk4
NEQgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjM0QTlCNjIxRTkyQ0MwMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjM0QTlCNzIxRTkyQ0MxMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyMzk4RUJEMjMwQTFCNzYwMDY0MTUwNyAvKiBXSExTTE5hbWVTcGFjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENhY2hlQ29yZVRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRm9udENhY2hlQ29yZVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzI0QTU3QUYyMUZBRDUzRjAwNEM2REQxIC8qIFdITFNMUGlwZWxpbmVEZXNjcmlw
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEE1N0IyMjFGQjhEREEwMDRDNkREMSAvKiBXSExTTFNl
bWFudGljTWF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFNlbWFudGljTWF0Y2hl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzExNCw2ICsxNzExNSw3IEBA
CiAJCQkJQzIxQkY3MkQyMUNEODlFOTAwMjI3OTc5IC8qIFdITFNMTWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5oICovLAogCQkJCUMyMUJGNzJDMjFDRDg5RTkwMDIyNzk3OSAvKiBXSExTTE1h
a2VQb2ludGVyRXhwcmVzc2lvbi5oICovLAogCQkJCTFDMzMyNzcxMjFDRjBCRTEwMDBEQzlGMiAv
KiBXSExTTE5hbWVkVHlwZS5oICovLAorCQkJCUMyMzk4RUJEMjMwQTFCNzYwMDY0MTUwNyAvKiBX
SExTTE5hbWVTcGFjZS5oICovLAogCQkJCUMyMUJGNzIzMjFDRDg5RTEwMDIyNzk3OSAvKiBXSExT
TE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCAqLywKIAkJCQlDMjFCRjcyQTIxQ0Q4OUU3MDAy
Mjc5NzkgLyogV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCAqLywKIAkJCQlDMjFCRjcwNzIx
Q0Q4OUM4MDAyMjc5NzkgLyogV0hMU0xOdWxsTGl0ZXJhbC5oICovLApAQCAtMTg1NTgsMTQgKzE4
NTYwLDE0IEBACiAJCTUxMEE1OEVFMUJBQjcxRTAwMEMxOTI4MiAvKiBzZXJ2ZXIgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTkzMjNCMDZEMjMwNjFFOUIw
MDkwMUM4QiAvKiBJREJTZXJpYWxpemF0aW9uQ29udGV4dC5jcHAgKi8sCi0JCQkJOTMyM0IwNkYy
MzA2MUU5QzAwOTAxQzhCIC8qIElEQlNlcmlhbGl6YXRpb25Db250ZXh0LmggKi8sCiAJCQkJNTFC
QTRBQzcxQkJDNUFENjAwREYzRDZEIC8qIElEQkJhY2tpbmdTdG9yZS5oICovLAogCQkJCTUxNkQ3
RDZEMUJCNUYwNjUwMEFGN0M3NyAvKiBJREJDb25uZWN0aW9uVG9DbGllbnQuY3BwICovLAogCQkJ
CTUxMEE1OEZFMUJCMDdBQTUwMEMxOTI4MiAvKiBJREJDb25uZWN0aW9uVG9DbGllbnQuaCAqLywK
IAkJCQk1MTZEN0Q2RTFCQjVGMDY1MDBBRjdDNzcgLyogSURCQ29ubmVjdGlvblRvQ2xpZW50RGVs
ZWdhdGUuaCAqLywKIAkJCQk1MTFFQzEyNTFDNTBBQTU3MDAzMkY5ODMgLyogSURCU2VyaWFsaXph
dGlvbi5jcHAgKi8sCiAJCQkJNTExRUMxMjYxQzUwQUE1NzAwMzJGOTgzIC8qIElEQlNlcmlhbGl6
YXRpb24uaCAqLywKKwkJCQk5MzIzQjA2RDIzMDYxRTlCMDA5MDFDOEIgLyogSURCU2VyaWFsaXph
dGlvbkNvbnRleHQuY3BwICovLAorCQkJCTkzMjNCMDZGMjMwNjFFOUMwMDkwMUM4QiAvKiBJREJT
ZXJpYWxpemF0aW9uQ29udGV4dC5oICovLAogCQkJCTUxMEE1OEVGMUJBQjcyMEYwMEMxOTI4MiAv
KiBJREJTZXJ2ZXIuY3BwICovLAogCQkJCTUxMEE1OEYwMUJBQjcyMEYwMEMxOTI4MiAvKiBJREJT
ZXJ2ZXIuaCAqLywKIAkJCQk1MUVFQUE3MTFCRUZGQTc5MDAyMTgwMDggLyogSW5kZXhWYWx1ZUVu
dHJ5LmNwcCAqLywKQEAgLTI5NTM2LDYgKzI5NTM4LDcgQEAKIAkJCQk1MTQ1QjEwQTFCQzQ4RTJF
MDBFODYyMTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MUQ3MjM2RDFCQjYxNzQ5MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTExRUMxMjgxQzUwQUFDQTAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTkzMjNCMDcwMjMwNjFGOTcwMDkwMUM4QiAvKiBJREJTZXJpYWxpemF0
aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQkIxQkI0Q0JGODAwMTI4OThG
IC8qIElEQlNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQUQxQkI0QzRFODAwMTI4
OThGIC8qIElEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTk4RjdBRDFCQkRE
M0VCMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTMw
MDA5LDcgKzMwMDEyLDYgQEAKIAkJCQlCQzQ5MThDOTBCRkVBMDUwMDA5RDYzMTYgLyogSlNIVE1M
SUZyYW1lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFBOTgwQTFDREQyRDAwQjQy
QjI1IC8qIEpTSFRNTEltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdFOTcw
QTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTElucHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJOTMyM0IwNzAyMzA2MUY5NzAwOTAxQzhCIC8qIElEQlNlcmlhbGl6YXRpb25Db250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4MzZCMDk1NjFGNUYzNEQ5MDAzQzM3MDIgLyogSlNIVE1MSW5w
dXRFbGVtZW50RW50cmllc0FQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTYxNDhBNzkxMkU0MUUz
QjAwNDRBNzg0IC8qIEpTSFRNTEtleWdlbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
RTJBQjIyMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJlbEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VVNoYWRlck1vZHVsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VVNoYWRlck1vZHVsZS5oCmluZGV4IGNlMzM0MWU0ZmE3NzQyMWE4M2VmMTBmNjgxNGExOWY4M2Rj
OThlYWMuLmI4NjBlZWFkNjFmMTA5MjhlNjEwOWUxYWQ2NTBmN2MyNmY4MDc2YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVTaGFkZXJNb2R1bGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVU2hhZGVyTW9k
dWxlLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRl
ICJXSExTTFByZXBhcmUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00NiwxNSArNDcs
MTUgQEAgY2xhc3MgR1BVU2hhZGVyTW9kdWxlIDogcHVibGljIFJlZkNvdW50ZWQ8R1BVU2hhZGVy
TW9kdWxlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxHUFVTaGFkZXJNb2R1bGU+IHRy
eUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmLCBjb25zdCBHUFVTaGFkZXJNb2R1bGVEZXNjcmlwdG9y
Jik7CiAKLSAgICBQbGF0Zm9ybVNoYWRlck1vZHVsZSogcGxhdGZvcm1TaGFkZXJNb2R1bGUoKSBj
b25zdCB7IHJldHVybiBtX3dobHNsU291cmNlLmlzTnVsbCgpID8gbV9wbGF0Zm9ybVNoYWRlck1v
ZHVsZS5nZXQoKSA6IG51bGxwdHI7IH0KLSAgICBjb25zdCBTdHJpbmcmIHdobHNsU291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV93aGxzbFNvdXJjZTsgfQorICAgIFBsYXRmb3JtU2hhZGVyTW9kdWxl
KiBwbGF0Zm9ybVNoYWRlck1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2hsc2xNb2R1bGUgPyBu
dWxscHRyIDogbV9wbGF0Zm9ybVNoYWRlck1vZHVsZS5nZXQoKTsgfQorICAgIGNvbnN0IFdITFNM
OjpTaGFkZXJNb2R1bGUqIHdobHNsTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV93aGxzbE1vZHVs
ZS5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIEdQVVNoYWRlck1vZHVsZShQbGF0Zm9ybVNoYWRl
ck1vZHVsZVNtYXJ0UHRyJiYpOwotICAgIEdQVVNoYWRlck1vZHVsZShTdHJpbmcmJiB3aGxzbFNv
dXJjZSk7CisgICAgR1BVU2hhZGVyTW9kdWxlKFdITFNMOjpPd25lZFNoYWRlck1vZHVsZSYmIHdo
bHNsTW9kdWxlKTsKIAogICAgIFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHIgbV9wbGF0Zm9y
bVNoYWRlck1vZHVsZTsKLSAgICBTdHJpbmcgbV93aGxzbFNvdXJjZTsKKyAgICBXSExTTDo6T3du
ZWRTaGFkZXJNb2R1bGUgbV93aGxzbE1vZHVsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQppbmRleCAxY2VmZWVk
Yjk4NWU0YTc2NzQ1MzJmZDI4MzQ2MDdhOTc5YTAwYjU5Li5lMDFiNzVhZjk1MTc1YzA0OTY1NTgw
ODkzZjYxNjAwZDU2ZTUyZDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1l
dGFsLm1tCkBAIC03MCwxMyArNzAsMTEgQEAgc3RhdGljIE9wdGlvbmFsPFdITFNMOjpDb21wdXRl
RGltZW5zaW9ucz4gdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBpcGVsaW5lU3RhZ2UKICAgICBX
SExTTDo6Q29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnMgeyAxLCAxLCAxIH07CiAK
ICAgICBpZiAod2hsc2xEZXNjcmlwdG9yKSB7Ci0gICAgICAgIC8vIFdITFNMIGZ1bmN0aW9ucyBh
cmUgY29tcGlsZWQgdG8gTVNMIGZpcnN0LgotICAgICAgICBTdHJpbmcgd2hsc2xTb3VyY2UgPSBj
b21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbFNvdXJjZSgpOwotICAgICAgICBBU1NFUlQoIXdobHNs
U291cmNlLmlzTnVsbCgpKTsKKyAgICAgICAgQVNTRVJUKGNvbXB1dGVTdGFnZS5tb2R1bGUtPndo
bHNsTW9kdWxlKCkpOwogCiAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+ZW50cnlQb2ludE5hbWUg
PSBjb21wdXRlU3RhZ2UuZW50cnlQb2ludDsKIAotICAgICAgICBhdXRvIHdobHNsQ29tcGlsZVJl
c3VsdCA9IFdITFNMOjpwcmVwYXJlKHdobHNsU291cmNlLCAqd2hsc2xEZXNjcmlwdG9yKTsKKyAg
ICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSgqY29tcHV0ZVN0
YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSwgKndobHNsRGVzY3JpcHRvcik7CiAgICAgICAgIGlm
ICghd2hsc2xDb21waWxlUmVzdWx0KSB7CiAgICAgICAgICAgICBlcnJvclNjb3Blcy5nZW5lcmF0
ZVByZWZpeGVkRXJyb3IobWFrZVN0cmluZygiV0hMU0wgY29tcGlsZSBlcnJvcjogIiwgd2hsc2xD
b21waWxlUmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CkBAIC0xMzQsNyArMTMyLDcgQEAgc3RhdGljIE9wdGlvbmFsPENvbnZlcnRSZXN1bHQ+IGNvbnZl
cnRDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKGNvbnN0IEdQVUNvbXB1dGUKIAogICAgIGNvbnN0
IGF1dG8mIGNvbXB1dGVTdGFnZSA9IGRlc2NyaXB0b3IuY29tcHV0ZVN0YWdlOwogCi0gICAgYm9v
bCBpc1dobHNsID0gIWNvbXB1dGVTdGFnZS5tb2R1bGUtPndobHNsU291cmNlKCkuaXNOdWxsKCk7
CisgICAgYm9vbCBpc1dobHNsID0gY29tcHV0ZVN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKTsK
IAogICAgIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yPiB3aGxzbERl
c2NyaXB0b3I7CiAgICAgaWYgKGlzV2hsc2wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGlu
ZU1ldGFsLm1tCmluZGV4IDg2YWFkZDg0MjA4MTI1NWNkMzU4MWQyNDgyMjBmZWQ1MGIyNTdhMTAu
LmM4YWE4YTIzMDRiZjIxOWU2YTI2ZTUyZWQ2M2JkYjE5MGQ1OWViZTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGlu
ZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCkBAIC0zODIsMTUgKzM4MiwxNCBAQCBzdGF0aWMg
Ym9vbCB0cnlTZXRGdW5jdGlvbnMoY29uc3QgR1BVUGlwZWxpbmVTdGFnZURlc2NyaXB0b3ImIHZl
cnRleFN0YWdlLCBjb25zdAogICAgIFN0cmluZyB2ZXJ0ZXhFbnRyeVBvaW50LCBmcmFnbWVudEVu
dHJ5UG9pbnQ7CiAKICAgICBpZiAod2hsc2xEZXNjcmlwdG9yKSB7Ci0gICAgICAgIC8vIFdITFNM
IGZ1bmN0aW9ucyBhcmUgY29tcGlsZWQgdG8gTVNMIGZpcnN0LgotICAgICAgICBTdHJpbmcgd2hs
c2xTb3VyY2UgPSB2ZXJ0ZXhTdGFnZS5tb2R1bGUtPndobHNsU291cmNlKCk7Ci0gICAgICAgIEFT
U0VSVCghd2hsc2xTb3VyY2UuaXNOdWxsKCkpOworICAgICAgICBBU1NFUlQodmVydGV4U3RhZ2Uu
bW9kdWxlLT53aGxzbE1vZHVsZSgpKTsKKyAgICAgICAgQVNTRVJUKCFmcmFnbWVudFN0YWdlIHx8
IGZyYWdtZW50U3RhZ2UtPm1vZHVsZS0+d2hsc2xNb2R1bGUoKSk7CiAKICAgICAgICAgd2hsc2xE
ZXNjcmlwdG9yLT52ZXJ0ZXhFbnRyeVBvaW50TmFtZSA9IHZlcnRleFN0YWdlLmVudHJ5UG9pbnQ7
CiAgICAgICAgIGlmIChmcmFnbWVudFN0YWdlKQogICAgICAgICAgICAgd2hsc2xEZXNjcmlwdG9y
LT5mcmFnbWVudEVudHJ5UG9pbnROYW1lID0gZnJhZ21lbnRTdGFnZS0+ZW50cnlQb2ludDsKIAot
ICAgICAgICBhdXRvIHdobHNsQ29tcGlsZVJlc3VsdCA9IFdITFNMOjpwcmVwYXJlKHdobHNsU291
cmNlLCAqd2hsc2xEZXNjcmlwdG9yKTsKKyAgICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQg
PSBXSExTTDo6cHJlcGFyZSgqdmVydGV4U3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpLCBmcmFn
bWVudFN0YWdlID8gZnJhZ21lbnRTdGFnZS0+bW9kdWxlLT53aGxzbE1vZHVsZSgpIDogbnVsbHB0
ciwgKndobHNsRGVzY3JpcHRvcik7CiAgICAgICAgIGlmICghd2hsc2xDb21waWxlUmVzdWx0KSB7
CiAgICAgICAgICAgICBlcnJvclNjb3Blcy5nZW5lcmF0ZVByZWZpeGVkRXJyb3IobWFrZVN0cmlu
ZygiV0hMU0wgY29tcGlsZSBlcnJvcjogIiwgd2hsc2xDb21waWxlUmVzdWx0LmVycm9yKCkpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1Miw4ICs0NTEsOSBAQCBzdGF0aWMgUmV0
YWluUHRyPE1UTFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcj4gY29udmVydFJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvcihjbwogICAgIGNvbnN0IGF1dG8mIHZlcnRleFN0YWdlID0gZGVzY3JpcHRvci52
ZXJ0ZXhTdGFnZTsKICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN0YWdlID0gZGVzY3JpcHRvci5m
cmFnbWVudFN0YWdlOwogCi0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTU0NDYgQWxsb3cgV0hMU0wgc2hhZGVycyB0byBjb21lIGZyb20gZGlm
ZmVyZW50IHByb2dyYW1zLgotICAgIGJvb2wgaXNXaGxzbCA9ICF2ZXJ0ZXhTdGFnZS5tb2R1bGUt
PndobHNsU291cmNlKCkuaXNOdWxsKCkgJiYgKCFmcmFnbWVudFN0YWdlIHx8IHZlcnRleFN0YWdl
Lm1vZHVsZS5wdHIoKSA9PSBmcmFnbWVudFN0YWdlLT5tb2R1bGUucHRyKCkpOworICAgIGlmIChm
cmFnbWVudFN0YWdlICYmIHN0YXRpY19jYXN0PGJvb2w+KHZlcnRleFN0YWdlLm1vZHVsZS0+d2hs
c2xNb2R1bGUoKSkgIT0gc3RhdGljX2Nhc3Q8Ym9vbD4oZnJhZ21lbnRTdGFnZS0+bW9kdWxlLT53
aGxzbE1vZHVsZSgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYm9vbCBpc1dobHNs
ID0gdmVydGV4U3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpOwogCiAgICAgLy8gU2V0IGRhdGEg
Zm9yIHRoZSBNZXRhbCBwaXBlbGluZSBkZXNjcmlwdG9yIChhbmQgV0hMU0wncywgaWYgbmVlZGVk
KS4KICAgICBPcHRpb25hbDxXSExTTDo6UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yPiB3aGxzbERl
c2NyaXB0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvY29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0KaW5kZXggYjdmNTZj
ODMyN2NhYWJiMTQyNDk1MDA0YTYyZTkyYzVkNzA4OWJkMS4uMzIyMTQ4NTkwNjI3ODE2NzA3Y2Ji
ZmEwOTI5MGJmNWYyYzU3MjYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVNoYWRlck1vZHVsZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVTaGFkZXJNb2R1bGVNZXRhbC5t
bQpAQCAtNDQsOCArNDQsMTEgQEAgUmVmUHRyPEdQVVNoYWRlck1vZHVsZT4gR1BVU2hhZGVyTW9k
dWxlOjp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnMKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAotICAgIGlmIChkZXNjcmlwdG9yLmlzV0hMU0wpCi0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR1BVU2hhZGVyTW9kdWxlKFN0cmluZyhkZXNjcmlw
dG9yLmNvZGUpKSk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNXSExTTCkgeworICAgICAgICBpZiAo
YXV0byB3aGxzbE1vZHVsZSA9IFdITFNMOjpjcmVhdGVTaGFkZXJNb2R1bGUoZGVzY3JpcHRvci5j
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR1BVU2hhZGVyTW9kdWxlKFdU
Rk1vdmUod2hsc2xNb2R1bGUpKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAog
ICAgIFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHIgbW9kdWxlOwogCkBAIC02Niw4ICs2OSw4
IEBAIEdQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFBsYXRmb3JtU2hhZGVyTW9kdWxl
U21hcnRQdHImJiBtb2R1bGUpCiB7CiB9CiAKLUdQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9k
dWxlKFN0cmluZyYmIHdobHNsU291cmNlKQotICAgIDogbV93aGxzbFNvdXJjZShXVEZNb3ZlKHdo
bHNsU291cmNlKSkKK0dQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFdITFNMOjpPd25l
ZFNoYWRlck1vZHVsZSYmIHdobHNsTW9kdWxlKQorICAgIDogbV93aGxzbE1vZHVsZShXVEZNb3Zl
KHdobHNsTW9kdWxlKSkKIHsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376657</attachid>
            <date>2019-08-18 18:39:42 -0700</date>
            <delta_ts>2019-08-18 19:05:49 -0700</delta_ts>
            <desc>Needs tests</desc>
            <filename>bug-195446-20190818183941.patch</filename>
            <type>text/plain</type>
            <size>58147</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmOTFkYzVmYTQzOTFh
NGRmNWNkOWRkMDQ1Yjk5MmIwMTdkYWJhYS4uMjhkZjU5ODFiNDg1YmI0Zjk1ZGRkZThjYTM0NTFl
NTEzOGRjMTA1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTA4LTE4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBW
ZXJ0ZXggc2hhZGVyIGFuZCBmcmFnbWVudCBzaGFkZXIgbmVlZCB0byBiZSBhYmxlIHRvIGNvbWUg
ZnJvbSB0d28gZGlmZmVyZW50IHByb2dyYW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU0NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6cHJlcGFyZVNoYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9k
dWxlOjpTaGFkZXJNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNyZWF0ZVNoYWRl
ck1vZHVsZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9kdWxlRGVsZXRlcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZSk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6R1BV
U2hhZGVyTW9kdWxlOjpwbGF0Zm9ybVNoYWRlck1vZHVsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHUFVTaGFkZXJNb2R1bGU6OndobHNsTW9kdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdQVVNoYWRlck1vZHVsZTo6d2hsc2xTb3VyY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnRyeVNldEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW06CisgICAgICAgIChX
ZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVVNoYWRlck1vZHVsZU1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVy
TW9kdWxlOjp0cnlDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVyTW9kdWxlOjpH
UFVTaGFkZXJNb2R1bGUpOgorCiAyMDE5LTA4LTE2ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVl
dWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQ4Nzcy
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDY4MDVkNjY2NGY5MDdj
ODNjZDViN2FmOGRhNGJkZmE0NmRlMmIyYmQuLmI3MjU2ZDUwNTQ4ZmU5OTA4YTQyN2JmOGY1YjAx
ZDdkOWJlMzE1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMRW50cnlQb2ludFR5cGUuaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgi
CisjaW5jbHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIKICNpbmNsdWRlICJXSExTTFBhcnNpbmdNb2Rl
LmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5
cGUuaCIKQEAgLTgzLDYgKzg0LDkgQEAgcHVibGljOgogCiAgICAgUGFyc2luZ01vZGUgcGFyc2lu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcnNpbmdNb2RlOyB9CiAKKyAgICBOYW1lU3BhY2Ug
bmFtZVNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU3BhY2U7IH0KKyAgICB2b2lkIHNldE5h
bWVTcGFjZShOYW1lU3BhY2UgbmFtZVNwYWNlKSB7IG1fbmFtZVNwYWNlID0gbmFtZVNwYWNlOyB9
CisKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uIG1fY29kZUxvY2F0aW9uOwogICAgIEF0dHJp
YnV0ZUJsb2NrIG1fYXR0cmlidXRlQmxvY2s7CkBAIC05Myw2ICs5Nyw3IEBAIHByaXZhdGU6CiAg
ICAgU3RyaW5nIG1fbmFtZTsKICAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3BhcmFtZXRlcnM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiBtX3NlbWFudGljOworICAgIE5hbWVTcGFj
ZSBtX25hbWVTcGFjZSB7IE5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5IH07CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hbWVTcGFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTmFtZVNwYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ2ZmRlZjE1ZmI3MTc2
OGJlMDUxOWEwZWExM2Y1MmUyNDk2ZThhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVTcGFjZS5oCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFT
VCB7CisKKy8vIERpZmZlcmVudCBzaGFkZXIgbW9kdWxlcyBvcGVyYXRlIGluIGRpZmZlcmVudCBu
YW1lc3BhY2VzLgorLy8gVGhpcyBtZWFucyBpdCdzIHBvc3NpYmxlIHRvIGhhdmUgdHdvIGZ1bmN0
aW9ucyB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZXMsIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlm
ZmVyZW50IG1vZHVsZXMuCitlbnVtIGNsYXNzIE5hbWVTcGFjZSA6IHVpbnQ4X3QgeworICAgIFN0
YW5kYXJkTGlicmFyeSA9IDAsCisgICAgTmFtZVNwYWNlMSA9IDEsCisgICAgTmFtZVNwYWNlMiA9
IDIKK307CisKK30KKworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRU
eXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1l
ZFR5cGUuaAppbmRleCA0NWI4MDEwY2QyOGViZGQ1MGY4NzAxN2ViZTdhY2IzNDJlNGNmN2FlLi41
OTljNDZjNTg1Mzg1YjAxODdjMDJlYmM5ZDJjMzA0M2NjYjNiODc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUu
aApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExT
TENvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmFtZVNwYWNlLmgiCiAjaW5jbHVkZSAi
V0hMU0xUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYwLDEyICs2MSwxNSBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KIAorICAgIE5hbWVTcGFjZSBuYW1lU3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX25hbWVTcGFjZTsgfQorICAgIHZvaWQgc2V0TmFtZVNwYWNlKE5h
bWVTcGFjZSBuYW1lU3BhY2UpIHsgbV9uYW1lU3BhY2UgPSBuYW1lU3BhY2U7IH0KIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgVHlwZTsKICAgICBUeXBlJiB1bmlmeU5vZGVJbXBsKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KICAgICBDb2RlTG9jYXRpb24gbV9jb2RlTG9jYXRpb247CiAgICAgU3Ry
aW5nIG1fbmFtZTsKKyAgICBOYW1lU3BhY2UgbV9uYW1lU3BhY2UgeyBOYW1lU3BhY2U6OlN0YW5k
YXJkTGlicmFyeSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAppbmRleCA2MzI1
NWQ0NjRhZWI1MDNmZjkwMDY0ZWY0ZGIzNDVjMjg4YWRlMzM3Li5hZDQ4NGI2YmMzOGM1NzAzOTUy
YTFjMTc2ODg5NjEwYTg3Njg1NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKCEhbV9jYXN0UmV0dXJuVHlwZSAhPSAhIW90aGVyLm1fY2FzdFJldHVyblR5cGUpCisgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihtX2Nhc3RSZXR1cm5UeXBlKSAhPSBzdGF0aWNfY2Fz
dDxib29sPihvdGhlci5tX2Nhc3RSZXR1cm5UeXBlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBpZiAoIW1fY2FzdFJldHVyblR5cGUpCkBAIC00MjcsNyArNDI3LDcgQEAg
c3RhdGljIGJvb2wgY2hlY2tTZW1hbnRpY3MoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaW5wdXRJ
dGVtcywgVmVjdG9yPEVudHJ5UG9pbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJv
b2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBm
dW5jdGlvbkRlZmluaXRpb24sIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKK3N0YXRpYyBib29s
IGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uLCBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQsIEFTVDo6TmFtZVNwYWNl
IGN1cnJlbnROYW1lU3BhY2UpCiB7CiAgICAgZW51bSBjbGFzcyBDaGVja0tpbmQgewogICAgICAg
ICBJbmRleCwKQEAgLTQ4MywxNiArNDgzLDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JP
dmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGF1dG8mIHZhbHVlVHlwZSA9ICpmdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW251bUV4cGVjdGVkUGFyYW1ldGVycyAtIDFdLT50
eXBlKCk7CiAgICAgICAgIGF1dG8gZ2V0dGVyTmFtZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1l
KCkuc3Vic3RyaW5nKDAsIGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkubGVuZ3RoKCkgLSAxKTsK
LSAgICAgICAgYXV0byogZ2V0dGVyRnVuY3MgPSBuYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoZ2V0
dGVyTmFtZSk7Ci0gICAgICAgIGlmICghZ2V0dGVyRnVuY3MpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGF1dG8gZ2V0dGVyRnVuY3MgPSBuYW1lQ29udGV4dC5nZXRGdW5jdGlv
bnMoZ2V0dGVyTmFtZSwgY3VycmVudE5hbWVTcGFjZSk7CiAgICAgICAgIFZlY3RvcjxSZXNvbHZp
bmdUeXBlPiBhcmd1bWVudFR5cGVzOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4gYXJndW1lbnRUeXBlUmVmZXJlbmNlczsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxOyArK2kpCiAgICAg
ICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKVtpXS0+dHlwZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudFR5cGUgOiBhcmd1
bWVudFR5cGVzKQogICAgICAgICAgICAgYXJndW1lbnRUeXBlUmVmZXJlbmNlcy5hcHBlbmQoYXJn
dW1lbnRUeXBlKTsKLSAgICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVy
bG9hZCgqZ2V0dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMpOworICAgICAgICBhdXRv
KiBvdmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKGdldHRlckZ1bmNzLCBhcmd1bWVu
dFR5cGVSZWZlcmVuY2VzLCBjdXJyZW50TmFtZVNwYWNlKTsKICAgICAgICAgaWYgKCFvdmVybG9h
ZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYXV0byYgcmVzdWx0VHlwZSA9
IG92ZXJsb2FkLT50eXBlKCk7CkBAIC02ODAsNiArNjc4LDcgQEAgcHJpdmF0ZToKICAgICBBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxscHRyIH07CiAgICAg
SGFzaE1hcDxGdW5jdGlvbktleSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4sIEZ1bmN0aW9uS2V5OjpIYXNoLCBGdW5jdGlvbktleTo6
VHJhaXRzPiBtX2Z1bmN0aW9uczsKICAgICBIYXNoTWFwPEFuZE92ZXJsb2FkVHlwZUtleSwgUmVm
UHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBBbmRPdmVybG9hZFR5cGVLZXk6Okhhc2gsIEFuZE92ZXJs
b2FkVHlwZUtleTo6VHJhaXRzPiBtX2FuZE92ZXJsb2FkVHlwZU1hcDsKKyAgICBBU1Q6Ok5hbWVT
cGFjZSBtX2N1cnJlbnROYW1lU3BhY2UgeyBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5
IH07CiB9OwogCiB2b2lkIENoZWNrZXI6OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCkBAIC03MzUs
NiArNzM0LDcgQEAgYm9vbCBDaGVja2VyOjpjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIAogdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQogeworICAgIG1f
Y3VycmVudE5hbWVTcGFjZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lU3BhY2UoKTsKICAgICBt
X2N1cnJlbnRGdW5jdGlvbiA9ICZmdW5jdGlvbkRlZmluaXRpb247CiAgICAgaWYgKGZ1bmN0aW9u
RGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CiAgICAgICAgIGlmICghY2hlY2tTaGFkZXJU
eXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKQEAgLTc1MSw3ICs3NTEsNyBAQCB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFjaGVja09wZXJh
dG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uLCBtX3Byb2dyYW0ubmFtZUNvbnRleHQoKSkp
IHsKKyAgICBpZiAoIWNoZWNrT3BlcmF0b3JPdmVybG9hZChmdW5jdGlvbkRlZmluaXRpb24sIG1f
cHJvZ3JhbS5uYW1lQ29udGV4dCgpLCBtX2N1cnJlbnROYW1lU3BhY2UpKSB7CiAgICAgICAgIHNl
dEVycm9yKEVycm9yKCJPcGVyYXRvciBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBzaWduYXR1cmUu
IiwgZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC04MzQsNyArODM0LDcgQEAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBDaGVj
a2VyOjpyZXNvbHZlRnVuY3Rpb24oVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXIKICAgICB7
CiAgICAgICAgIGF1dG8gaXRlciA9IG1fZnVuY3Rpb25zLmZpbmQoRnVuY3Rpb25LZXkgeyBuYW1l
LCBXVEZNb3ZlKHVubmFtZWRUeXBlcyksIGNhc3RSZXR1cm5UeXBlIH0pOwogICAgICAgICBpZiAo
aXRlciAhPSBtX2Z1bmN0aW9ucy5lbmQoKSkgewotICAgICAgICAgICAgaWYgKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiogZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChpdGVyLT52
YWx1ZSwgdHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKKyAgICAgICAgICAgIGlmIChBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoaXRlci0+
dmFsdWUsIHR5cGVzLCBjYXN0UmV0dXJuVHlwZSwgbV9jdXJyZW50TmFtZVNwYWNlKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjUyLDE1
ICsxNjUyLDE0IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2Fs
bEV4cHJlc3Npb24pCiAKICAgICBpZiAoIWZ1bmN0aW9uKSB7CiAgICAgICAgIE5hbWVDb250ZXh0
JiBuYW1lQ29udGV4dCA9IG1fcHJvZ3JhbS5uYW1lQ29udGV4dCgpOwotICAgICAgICBpZiAoYXV0
byogY2FzdFR5cGVzID0gbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Npb24ubmFtZSgp
KSkgewotICAgICAgICAgICAgaWYgKGNhc3RUeXBlcy0+c2l6ZSgpID09IDEpIHsKLSAgICAgICAg
ICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgY2FzdFR5cGUgPSAoKmNhc3RUeXBlcylbMF0uZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb24odHlwZXMsICJvcGVy
YXRvciBjYXN0Il9zdHIsIGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAmY2FzdFR5cGUp
OwotICAgICAgICAgICAgICAgIGlmIChoYXNFcnJvcigpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAg
ICBjYWxsRXhwcmVzc2lvbi5zZXRDYXN0RGF0YShjYXN0VHlwZSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGF1dG8gY2FzdFR5cGVzID0gbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Np
b24ubmFtZSgpLCBtX2N1cnJlbnROYW1lU3BhY2UpOworICAgICAgICBpZiAoY2FzdFR5cGVzLnNp
emUoKSA9PSAxKSB7CisgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgY2FzdFR5cGUgPSBjYXN0
VHlwZXNbMF0uZ2V0KCk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbih0
eXBlcywgIm9wZXJhdG9yIGNhc3QiX3N0ciwgY2FsbEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCks
ICZjYXN0VHlwZSk7CisgICAgICAgICAgICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24pCisgICAgICAgICAgICAgICAgY2Fs
bEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoY2FzdFR5cGUpOwogICAgICAgICB9CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFt
ZUNvbnRleHQuY3BwCmluZGV4IDE5OTAyMTNhM2I3MjZhMzAzM2QwMTdhNjEzMWFmNGE2ZGI2NjVh
ZmUuLjhmODE2MTE4YWMxNzM4ZDQxYzQ4MWMyZWU5N2EzZGExM2Q3ZGE5MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRl
eHQuY3BwCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5o
IgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogCisjaW5jbHVkZSA8YWxn
b3JpdGhtPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CkBAIC00
Nyw2MyArNDksNzUgQEAgTmFtZUNvbnRleHQ6Ok5hbWVDb250ZXh0KE5hbWVDb250ZXh0KiBwYXJl
bnQpCiAKIGJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVm
aW5pdGlvbikKIHsKLSAgICBpZiAoZXhpc3RzKHR5cGVEZWZpbml0aW9uLm5hbWUoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHR5cGVEZWZp
bml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5
cGU+LCAxPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgIGlmIChnbG9iYWxF
eGlzdHModHlwZURlZmluaXRpb24ubmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHR5cGVEZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1
dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFtZVNwYWNlKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZCh0eXBlRGVmaW5pdGlvbi5uYW1lKCks
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7Cisg
ICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZCh0eXBlRGVmaW5pdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgTmFt
ZUNvbnRleHQ6OmFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRp
b24pCiB7Ci0gICAgaWYgKGV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHN0cnVjdHVy
ZURlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4sIDE+KCkpOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgaWYgKGds
b2JhbEV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1l
U3BhY2UpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50
TmFtZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZChzdHJ1Y3R1
cmVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpO
YW1lZFR5cGU+LCAxPigpKTsKKyAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOwogICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKIHsKLSAgICBpZiAoZXhpc3RzKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0
byByZXN1bHQgPSBtX3R5cGVzLmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOwotICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgaWYgKGdsb2JhbEV4aXN0cyhlbnVtZXJhdGlvbkRl
ZmluaXRpb24ubmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGVudW1lcmF0aW9u
RGVmaW5pdGlvbi5zZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIGlu
ZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0
byByZXN1bHQgPSBtX3R5cGVzW2luZGV4XS5hZGQoZW51bWVyYXRpb25EZWZpbml0aW9uLm5hbWUo
KSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsK
KyAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IGJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0aW9uKQogewotICAgIGlmIChtX3R5cGVzLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5h
bWUoKSkgIT0gbV90eXBlcy5lbmQoKQotICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKGZ1bmN0
aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgIGF1dG8gaW5k
ZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRv
IHN0YW5kYXJkTGlicmFyeUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNw
YWNlOjpTdGFuZGFyZExpYnJhcnkpOworICAgIGlmIChtX3R5cGVzW2luZGV4XS5maW5kKGZ1bmN0
aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdHlwZXNbaW5kZXhdLmVuZCgpCisgICAgICAgIHx8
IG1fdHlwZXNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5h
bWUoKSkgIT0gbV90eXBlc1tzdGFuZGFyZExpYnJhcnlJbmRleF0uZW5kKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICBmdW5jdGlvbkRlZmluaXRpb24uc2V0TmFtZVNw
YWNlKG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9uc1tp
bmRleF0uYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOwogICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiB7Ci0gICAgaWYgKG1fdHlwZXMuZmlu
ZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQotICAg
ICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
KSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byBzdGFuZGFyZExpYnJhcnlJbmRl
eCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5
KTsKKyAgICBpZiAobV90eXBlc1tpbmRleF0uZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSkgIT0gbV90eXBlc1tpbmRleF0uZW5kKCkKKyAgICAgICAgfHwgbV90eXBlc1tzdGFu
ZGFyZExpYnJhcnlJbmRleF0uZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkg
IT0gbV90eXBlc1tzdGFuZGFyZExpYnJhcnlJbmRleF0uZW5kKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4oKSk7CisgICAgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5z
ZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fZnVu
Y3Rpb25zW2luZGV4XS5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkp
OwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIE5hbWVDb250ZXh0OjphZGQoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKIHsKLSAgICBp
ZiAobV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1
bmN0aW9ucy5lbmQoKQotICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgIGF1dG8gaW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIHN0YW5k
YXJkTGlicmFyeUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpT
dGFuZGFyZExpYnJhcnkpOworICAgIGlmIChtX2Z1bmN0aW9uc1tpbmRleF0uZmluZChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1bmN0aW9uc1tpbmRleF0uZW5kKCkKKyAgICAg
ICAgfHwgbV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmZpbmQobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmVu
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFk
ZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlw
ZXNbaW5kZXhdLmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOwogICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0xMTIsMzIgKzEyNiw2NCBAQCBib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQogewogICAgIGlmICh2YXJp
YWJsZURlY2xhcmF0aW9uLm5hbWUoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgaWYgKGV4aXN0cyh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSkpCisgICAgaWYgKGxvY2Fs
RXhpc3RzKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGF1dG8gcmVzdWx0ID0gbV92YXJpYWJsZXMuYWRkKFN0cmluZyh2YXJpYWJsZURlY2xh
cmF0aW9uLm5hbWUoKSksICZ2YXJpYWJsZURlY2xhcmF0aW9uKTsKICAgICByZXR1cm4gcmVzdWx0
LmlzTmV3RW50cnk7CiB9CiAKLVZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFt
ZWRUeXBlPiwgMT4qIE5hbWVDb250ZXh0OjpnZXRUeXBlcyhjb25zdCBTdHJpbmcmIG5hbWUpCitW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+IE5hbWVDb250
ZXh0OjpnZXRUeXBlcyhjb25zdCBTdHJpbmcmIG5hbWUsIEFTVDo6TmFtZVNwYWNlIGZyb21OYW1l
c3BhY2UpCiB7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZXMuZmluZChuYW1lKTsKLSAgICBp
ZiAoaXRlcmF0b3IgPT0gbV90eXBlcy5lbmQoKSkgewotICAgICAgICBpZiAobV9wYXJlbnQpCi0g
ICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFR5cGVzKG5hbWUpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAvLyBOYW1lZCB0eXBlcyBjYW4gb25seSBiZSBkZWNsYXJlZCBpbiB0
aGUgZ2xvYmFsIG5hbWUgY29udGV4dC4KKyAgICBpZiAobV9wYXJlbnQpCisgICAgICAgIHJldHVy
biBtX3BhcmVudC0+Z2V0VHlwZXMobmFtZSwgZnJvbU5hbWVzcGFjZSk7CisKKyAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+IHJlc3VsdDsKKworICAg
IHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21OYW1lc3BhY2UpOwor
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVzW2luZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChp
dGVyYXRvciAhPSBtX3R5cGVzW2luZGV4XS5lbmQoKSkgeworICAgICAgICBmb3IgKGF1dG8gdHlw
ZSA6IGl0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7CiAg
ICAgfQotICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworCisgICAgaWYgKGZyb21OYW1lc3Bh
Y2UgIT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSkgeworICAgICAgICBpbmRleCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KTsK
KyAgICAgICAgaXRlcmF0b3IgPSBtX3R5cGVzW2luZGV4XS5maW5kKG5hbWUpOworICAgICAgICBp
ZiAoaXRlcmF0b3IgIT0gbV90eXBlc1tpbmRleF0uZW5kKCkpIHsKKyAgICAgICAgICAgIGZvciAo
YXV0byB0eXBlIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQodHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1W
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
PiogTmFtZUNvbnRleHQ6OmdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUpCitWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBOYW1l
Q29udGV4dDo6Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYgbmFtZSwgQVNUOjpOYW1lU3BhY2Ug
ZnJvbU5hbWVzcGFjZSkKIHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbnMuZmluZChu
YW1lKTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9mdW5jdGlvbnMuZW5kKCkpIHsKLSAgICAgICAg
aWYgKG1fcGFyZW50KQotICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRGdW5jdGlvbnMo
bmFtZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIEZ1bmN0aW9ucyBjYW4gb25s
eSBiZSBkZWNsYXJlZCBpbiB0aGUgZ2xvYmFsIG5hbWUgY29udGV4dC4KKyAgICBpZiAobV9wYXJl
bnQpCisgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0RnVuY3Rpb25zKG5hbWUsIGZyb21OYW1l
c3BhY2UpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4gcmVzdWx0OworCisgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZnJvbU5hbWVzcGFjZSk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fZnVu
Y3Rpb25zW2luZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciAhPSBtX2Z1bmN0aW9u
c1tpbmRleF0uZW5kKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHR5cGUgOiBpdGVyYXRvci0+dmFs
dWUpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHR5cGUpOworICAgIH0KKworICAgIGlmIChm
cm9tTmFtZXNwYWNlICE9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpIHsKKyAgICAg
ICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJk
TGlicmFyeSk7CisgICAgICAgIGl0ZXJhdG9yID0gbV9mdW5jdGlvbnNbaW5kZXhdLmZpbmQobmFt
ZSk7CisgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uc1tpbmRleF0uZW5kKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byB0eXBlIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJu
ICZpdGVyYXRvci0+dmFsdWU7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24qIE5hbWVDb250ZXh0OjpnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmIG5h
bWUpCkBAIC0xNTEsMTEgKzE5NywyMSBAQCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIE5hbWVD
b250ZXh0OjpnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgcmV0dXJuIGl0ZXJh
dG9yLT52YWx1ZTsKIH0KIAotYm9vbCBOYW1lQ29udGV4dDo6ZXhpc3RzKFN0cmluZyYgbmFtZSkK
K2Jvb2wgTmFtZUNvbnRleHQ6Omdsb2JhbEV4aXN0cyhTdHJpbmcmIG5hbWUpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgYXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gc3RhbmRhcmRMaWJyYXJ5SW5kZXgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSk7
CisgICAgcmV0dXJuIG1fdHlwZXNbaW5kZXhdLmZpbmQobmFtZSkgIT0gbV90eXBlc1tpbmRleF0u
ZW5kKCkKKyAgICAgICAgfHwgbV9mdW5jdGlvbnNbaW5kZXhdLmZpbmQobmFtZSkgIT0gbV9mdW5j
dGlvbnNbaW5kZXhdLmVuZCgpCisgICAgICAgIHx8IG1fdHlwZXNbc3RhbmRhcmRMaWJyYXJ5SW5k
ZXhdLmZpbmQobmFtZSkgIT0gbV90eXBlc1tzdGFuZGFyZExpYnJhcnlJbmRleF0uZW5kKCkKKyAg
ICAgICAgfHwgbV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmZpbmQobmFtZSkgIT0g
bV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmVuZCgpOworfQorCitib29sIE5hbWVD
b250ZXh0Ojpsb2NhbEV4aXN0cyhTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
dHlwZXMuZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgpCi0gICAgICAgIHx8IG1fZnVuY3Rpb25z
LmZpbmQobmFtZSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKLSAgICAgICAgfHwgbV92YXJpYWJsZXMu
ZmluZChuYW1lKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKTsKKyAgICBBU1NFUlQobV9wYXJlbnQpOwor
ICAgIHJldHVybiBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpICE9IG1fdmFyaWFibGVzLmVuZCgpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCmluZGV4IGEwNDg3OGFlN2U5ZjFk
ODNlNWQ1OTJjMmZkNzUyYmVkYzkwZmE5Y2IuLjRkNGEwMmI1ZjM5NjMzMjJlZjMwOTdkNTI1OTVk
OGY1ODYwNDQxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMTmFtZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTE5hbWVTcGFjZS5oIgorCiAjaW5jbHVkZSA8ZnVu
Y3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KQEAgLTU0LDYgKzU2LDEyIEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKIHB1YmxpYzoKICAgICBO
YW1lQ29udGV4dChOYW1lQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7CiAKKyAgICB2b2lkIHNl
dEN1cnJlbnROYW1lU3BhY2UoQVNUOjpOYW1lU3BhY2UgY3VycmVudE5hbWVTcGFjZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVCghbV9wYXJlbnQpOworICAgICAgICBtX2N1cnJlbnROYW1lU3BhY2Ug
PSBjdXJyZW50TmFtZVNwYWNlOworICAgIH0KKwogICAgIGJvb2wgYWRkKEFTVDo6VHlwZURlZmlu
aXRpb24mKTsKICAgICBib29sIGFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsKICAgICBi
b29sIGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOwpAQCAtNjIsMTcgKzcwLDE5IEBA
IHB1YmxpYzoKICAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOwogICAg
IGJvb2wgYWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOwogCi0gICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogZ2V0VHlwZXMoY29uc3QgU3Ry
aW5nJik7Ci0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmKTsKKyAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+IGdldFR5cGVzKGNvbnN0
IFN0cmluZyYsIEFTVDo6TmFtZVNwYWNlIGZyb21OYW1lc3BhY2UpOworICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IGdldEZ1bmN0
aW9ucyhjb25zdCBTdHJpbmcmLCBBU1Q6Ok5hbWVTcGFjZSBmcm9tTmFtZXNwYWNlKTsKICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYpOwogCiBw
cml2YXRlOgotICAgIGJvb2wgZXhpc3RzKFN0cmluZyYpOworICAgIGJvb2wgZ2xvYmFsRXhpc3Rz
KFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgYm9vbCBsb2NhbEV4aXN0cyhTdHJpbmcmIG5hbWUp
IGNvbnN0OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
PiBtX2Z1bmN0aW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPj4gbV90eXBlc1szXTsKKyAgICBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4+IG1fZnVuY3Rpb25zWzNdOwogICAgIEhhc2hNYXA8U3RyaW5nLCBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24qPiBtX3ZhcmlhYmxlczsKICAgICBOYW1lQ29udGV4dCogbV9wYXJlbnQ7
CisgICAgQVNUOjpOYW1lU3BhY2UgbV9jdXJyZW50TmFtZVNwYWNlIHsgQVNUOjpOYW1lU3BhY2U6
OlN0YW5kYXJkTGlicmFyeSB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDY3YjFj
OWI2ZDg2MDUyNDdmYzEyYzRiMWU1M2YzMjk1YmZiOTQ0NzMuLjI3MWViZDEyNmEzMTA3ODliNGM4
Y2Y3MGRmODQ1NzlmYTFmODI0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTU3LDYgKzU3LDcg
QEAgTmFtZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIoTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQog
TmFtZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIoTmFtZVJlc29sdmVyJiBwYXJlbnRSZXNvbHZlciwg
TmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQogICAgIDogbV9uYW1lQ29udGV4dChuYW1lQ29udGV4
dCkKICAgICAsIG1fcGFyZW50TmFtZVJlc29sdmVyKCZwYXJlbnRSZXNvbHZlcikKKyAgICAsIG1f
Y3VycmVudE5hbWVTcGFjZShwYXJlbnRSZXNvbHZlci5tX2N1cnJlbnROYW1lU3BhY2UpCiB7CiB9
CiAKQEAgLTgwLDE0ICs4MSwxMCBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpUeXBl
UmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQogICAgIGlmICh0eXBlUmVmZXJlbmNlLm1heWJlUmVz
b2x2ZWRUeXBlKCkpIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MTYxIFNob3VsZG4ndCB3ZSBrbm93IGJ5IG5vdyB3aGV0aGVyIHRoZSB0eXBlIGhh
cyBiZWVuIHJlc29sdmVkIG9yIG5vdD8KICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogY2Fu
ZGlkYXRlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXModHlwZVJlZmVyZW5jZS5uYW1lKCkpOwot
ICAgIGlmIChjYW5kaWRhdGVzID09IG51bGxwdHIpIHsKLSAgICAgICAgc2V0RXJyb3IoRXJyb3Io
IkNhbm5vdCBmaW5kIHR5cGUgcmVmZXJlbmNlLiIsIHR5cGVSZWZlcmVuY2UuY29kZUxvY2F0aW9u
KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6
ICpjYW5kaWRhdGVzKQorICAgIGF1dG8gY2FuZGlkYXRlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlw
ZXModHlwZVJlZmVyZW5jZS5uYW1lKCksIG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgZm9yIChh
dXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKQogICAgICAgICBWaXNpdG9yOjp2aXNpdChjYW5k
aWRhdGUpOwotICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKCpj
YW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkpCisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoY2FuZGlkYXRlcywgdHlwZVJlZmVyZW5j
ZS50eXBlQXJndW1lbnRzKCkpKQogICAgICAgICB0eXBlUmVmZXJlbmNlLnNldFJlc29sdmVkVHlw
ZSgqcmVzdWx0KTsKICAgICBlbHNlIHsKICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBy
ZXNvbHZlIHR5cGUgYXJndW1lbnRzLiIsIHR5cGVSZWZlcmVuY2UuY29kZUxvY2F0aW9uKCkpKTsK
QEAgLTE5Miw5ICsxODksOSBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHBy
ZXNzaW9uJiBkb3RFeHByZXNzaW9uKQogICAgICAgICBhdXRvJiB2YXJpYWJsZVJlZmVyZW5jZSA9
IGRvd25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Npb24uYmFzZSgpKTsK
ICAgICAgICAgaWYgKCFtX25hbWVDb250ZXh0LmdldFZhcmlhYmxlKHZhcmlhYmxlUmVmZXJlbmNl
Lm5hbWUoKSkpIHsKICAgICAgICAgICAgIGF1dG8gYmFzZU5hbWUgPSB2YXJpYWJsZVJlZmVyZW5j
ZS5uYW1lKCk7Ci0gICAgICAgICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1l
Q29udGV4dC5nZXRUeXBlcyhiYXNlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZW51
bWVyYXRpb25UeXBlcy0+c2l6ZSgpID09IDEpOwotICAgICAgICAgICAgICAgIEFTVDo6TmFtZWRU
eXBlJiB0eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgICAgIGF1dG8gZW51
bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoYmFzZU5hbWUsIG1fY3VycmVu
dE5hbWVTcGFjZSk7CisgICAgICAgICAgICBpZiAoZW51bWVyYXRpb25UeXBlcy5zaXplKCkgPT0g
MSkgeworICAgICAgICAgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gZW51bWVyYXRpb25U
eXBlc1swXTsKICAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24+KHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbj4odHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWVtYmVyTmFtZSA9IGRv
dEV4cHJlc3Npb24uZmllbGROYW1lKCk7CkBAIC0yMDYsNyArMjAzLDggQEAgdm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKICAgICAgICAg
ICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIk5vIGVudW0gbWVtYmVyIG1hdGNoZXMgdGhlIHVz
ZWQgbmFtZS4iLCBkb3RFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy5pc0Vt
cHR5KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTgsOSArMjE2LDEwIEBAIHZvaWQgTmFt
ZVJlc29sdmVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsCiAgICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJh
dGlvbk1lbWJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0byBlbnVtZXJhdGlv
blR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwu
bGVmdCgpKSkgewotICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+c2l6ZSgpID09IDEp
OwotICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRpb25UeXBlcylbMF07
CisgICAgYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhlbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwubGVmdCgpLCBtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGlm
IChlbnVtZXJhdGlvblR5cGVzLnNpemUoKSA9PSAxKSB7CisgICAgICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MzM1IFRoaXMgbmVlZHMgdG8g
d29yayB3aXRoIHR5cGVkZWYnZWQgZW51bXMuCisgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBl
ID0gZW51bWVyYXRpb25UeXBlc1swXTsKICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uPih0eXBlKSkgewogICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uPih0eXBlKTsKICAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBlbnVtZXJhdGlv
bkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5yaWdodCgp
KSkgewpAQCAtMjI5LDcgKzIyOCw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBzZXRFcnJvcihFcnJvcigiQ2Fu
bm90IHJlc29sdmUgZW51bWVyYXRpb24gbWVtYmVyIGxpdGVyYWwuIiwgZW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsLmNvZGVMb2NhdGlvbigpKSk7CiB9CiAKQEAgLTI0NSwyMSArMjQ0LDI1IEBAIHZv
aWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpCiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZU5hbWVz
SW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKIHsK
ICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMo
KSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudE5hbWVTcGFjZSh0eXBlRGVmaW5p
dGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9y
QW5kVmlzaXQodHlwZURlZmluaXRpb24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vy
cm9yKCkpCiAgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwogICAgIH0K
ICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURl
ZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnROYW1lU3BhY2Uo
c3RydWN0dXJlRGVmaW5pdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNv
bHZlci5jaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CiAgICAgICAgIGlm
IChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKICAgICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2
ZXIucmVzdWx0KCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9u
IDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29s
dmVyLnNldEN1cnJlbnROYW1lU3BhY2UoZW51bWVyYXRpb25EZWZpbml0aW9uLmdldCgpLm5hbWVT
cGFjZSgpKTsKICAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJh
dGlvbkRlZmluaXRpb24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAg
ICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwogICAgIH0KICAgICBmb3Ig
KGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0
aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50TmFtZVNwYWNlKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZl
ci5jaGVja0Vycm9yQW5kVmlzaXQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgaWYg
KG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZl
ci5yZXN1bHQoKTsKQEAgLTI3MCwxMSArMjczLDEzIEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBy
ZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJl
CiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25zKFByb2dy
YW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQogewogICAgIGZvciAoYXV0
byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsK
KyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnROYW1lU3BhY2UoZnVuY3Rpb25EZWZpbml0
aW9uLmdldCgpLm5hbWVTcGFjZSgpKTsKICAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JB
bmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhh
c0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwogICAg
IH0KICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1
cnJlbnROYW1lU3BhY2UobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5nZXQoKS5uYW1lU3BhY2Uo
KSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbik7CiAgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKICAg
ICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2ZXIucmVzdWx0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAppbmRl
eCA2NThjMzVmY2RiNTcyZTI0ZDU4MjE3MWYxMWU4YzZhMmJhMDMyZTczLi5hNzkyNGUwNWZmNmFh
MGFkZjY5YmQzYzY4MjJhM2NiZWZkN2MzMTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKQEAgLTQ2LDYgKzQ2
LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+TmFtZVJlc29sdmVyKCk7CiAKKyAgICB2b2lk
IHNldEN1cnJlbnROYW1lU3BhY2UoQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlKSB7IG1fY3VycmVu
dE5hbWVTcGFjZSA9IG5hbWVTcGFjZTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgdmlzaXQoQVNU
OjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlOwpAQCAtNjMsNiArNjUsNyBAQCBwcml2
YXRlOgogICAgIE5hbWVDb250ZXh0JiBtX25hbWVDb250ZXh0OwogICAgIEhhc2hTZXQ8QVNUOjpU
eXBlUmVmZXJlbmNlKj4gbV90eXBlUmVmZXJlbmNlczsKICAgICBOYW1lUmVzb2x2ZXIqIG1fcGFy
ZW50TmFtZVJlc29sdmVyIHsgbnVsbHB0ciB9OworICAgIEFTVDo6TmFtZVNwYWNlIG1fY3VycmVu
dE5hbWVTcGFjZSB7IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkgfTsKIH07CiAKIEV4
cGVjdGVkPHZvaWQsIEVycm9yPiByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mLCBOYW1lUmVz
b2x2ZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUGFyc2VyLmNwcAppbmRleCAwMTYxMTRhNjEwZTExMDBlZmU2OTcyY2EyYTIzNTMyN2MxNTJl
N2FiLi5jZjViNDZmZDEyYzM3YzVlM2QwY2JjNmE1MzI0NTQzNGUyMjJhNTVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBA
IC00MSwyNCArNDEsMjMgQEAgbmFtZXNwYWNlIFdITFNMIHsKICNkZWZpbmUgUEFSU0UobmFtZSwg
ZWxlbWVudCwgLi4uKSBcCiAgICAgYXV0byBuYW1lID0gcGFyc2UjI2VsZW1lbnQoX19WQV9BUkdT
X18pOyBcCiAgICAgaWYgKCFuYW1lKSBcCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihuYW1lLmVycm9yKCkpOyBcCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChuYW1lLmVy
cm9yKCkpOyBcCiAKICNkZWZpbmUgQ09OU1VNRV9UWVBFKG5hbWUsIHR5cGUpIFwKICAgICBhdXRv
IG5hbWUgPSBjb25zdW1lVHlwZShUb2tlbjo6VHlwZTo6dHlwZSk7IFwKICAgICBpZiAoIW5hbWUp
IFwKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChuYW1lLmVycm9yKCkpOwogCiAjZGVmaW5lIFBFRUso
bmFtZSkgXAogICAgIGF1dG8gbmFtZSA9IHBlZWsoKTsgXAogICAgIGlmICghbmFtZSkgXAotICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKG5hbWUuZXJyb3IoKSk7CiAKICNkZWZpbmUgUEVFS19GVVJUSEVS
KG5hbWUpIFwKICAgICBhdXRvIG5hbWUgPSBwZWVrRnVydGhlcigpOyBcCiAgICAgaWYgKCFuYW1l
KSBcCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsKIAotLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2ODIgUmV0dXJuIGEgYmV0
dGVyIGVycm9yIGNvZGUgZnJvbSB0aGlzLCBhbmQgcmVwb3J0IGl0IHRvIEphdmFTY3JpcHQuCiBh
dXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5nVmlldyBzdHJpbmdWaWV3
LCBQYXJzaW5nTW9kZSBtb2RlKSAtPiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4KIHsKICAgICBtX2xl
eGVyID0gTGV4ZXIoc3RyaW5nVmlldyk7CkBAIC05NCw3ICs5Myw4IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFBhcnNpbmdNb2Rl
IG1vZGUpIC0+CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBjYXNl
IFRva2VuOjpUeXBlOjpOYXRpdmU6IHsKLSAgICAgICAgICAgIEFTU0VSVChtX21vZGUgPT0gUGFy
c2luZ01vZGU6OlN0YW5kYXJkTGlicmFyeSk7CisgICAgICAgICAgICBpZiAobV9tb2RlICE9IFBh
cnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwo
bWFrZVN0cmluZygiJ25hdGl2ZScgY2FuJ3QgZXhpc3Qgb3V0c2lkZSBvZiB0aGUgc3RhbmRhcmQg
bGlicmFyeS4iKSk7CiAgICAgICAgICAgICBhdXRvIGZ1cnRoZXJUb2tlbiA9IHBlZWtGdXJ0aGVy
KCk7CiAgICAgICAgICAgICBpZiAoIWZ1cnRoZXJUb2tlbikKICAgICAgICAgICAgICAgICByZXR1
cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAKaW5kZXggNzNmNDgzMjAzYTA0YTQ4MzNjMTU0NTM4MGRiMWU4NWRjMmIy
YTQ4MC4uMGQwNDUyYmUzYWYyZjZmZTVlZWNmOTdlZWI0MTliZDhjYTcwM2EzYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3Bw
CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuaCIK
ICNpbmNsdWRlICJXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldITFNMTmFt
ZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIKICNpbmNsdWRlICJXSExT
TFBhcnNlci5oIgogI2luY2x1ZGUgIldITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5oIgog
I2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgpAQCAtMTI0LDEzICsxMjUsMzMgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgfQogCi0KIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fcGhhc2VOYW1lOwog
ICAgIFBoYXNlVGltZXMmIG1fcGhhc2VUaW1lczsKICAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnQ7
CiB9OwogCitzdHJ1Y3QgU2hhZGVyTW9kdWxlIHsKKyAgICBTaGFkZXJNb2R1bGUoY29uc3QgU3Ry
aW5nJiB3aGxzbFNvdXJjZSkKKyAgICAgICAgOiB3aGxzbFNvdXJjZSh3aGxzbFNvdXJjZSkKKyAg
ICB7CisgICAgfQorCisgICAgU3RyaW5nIHdobHNsU291cmNlOworfTsKKworT3duZWRTaGFkZXJN
b2R1bGUgY3JlYXRlU2hhZGVyTW9kdWxlKGNvbnN0IFN0cmluZyYgd2hsc2xTb3VyY2UpCit7Cisg
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4
NzIgV2Ugc2hvdWxkIGNvbnNpZGVyIG1vdmluZyBhcyBtdWNoIHdvcmsgZnJvbSBwcmVwYXJlKCkg
aW50byBoZXJlIGFzIHBvc3NpYmxlLgorICAgIHJldHVybiBPd25lZFNoYWRlck1vZHVsZShuZXcg
U2hhZGVyTW9kdWxlKHdobHNsU291cmNlKSk7Cit9CisKK3ZvaWQgU2hhZGVyTW9kdWxlRGVsZXRl
cjo6b3BlcmF0b3IoKShTaGFkZXJNb2R1bGUqIG1vZHVsZSkKK3sKKyAgICBkZWxldGUgbW9kdWxl
OworfQorCisvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yU3RyaW5nKCkKICNk
ZWZpbmUgQ0hFQ0tfUEFTUyhwYXNzLCAuLi4pIFwKICAgICBkbyB7IFwKICAgICAgICAgZHVtcEFT
VEJldHdlZW5FYWNoUGFzc0lmTmVlZGVkKHByb2dyYW0sICJBU1QgYmVmb3JlICIgIyBwYXNzKTsg
XApAQCAtMTM4LDggKzE1OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcGFz
cyhfX1ZBX0FSR1NfXyk7IFwKICAgICAgICAgaWYgKCFyZXN1bHQpIHsgXAogICAgICAgICAgICAg
aWYgKGR1bXBQYXNzRmFpbHVyZSkgXAotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVk
IHBhc3M6ICIgIyBwYXNzLCBMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIHJlc3VsdC5l
cnJvcigpKSk7IFwKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJy
b3JTdHJpbmcod2hsc2xTb3VyY2UsIHJlc3VsdC5lcnJvcigpKSk7IFwKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oImZhaWxlZCBwYXNzOiAiICMgcGFzcywgTGV4ZXI6OmVycm9yU3RyaW5nKFN0
cmluZygpLCByZXN1bHQuZXJyb3IoKSkpOyBcCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZygpLCByZXN1bHQuZXJyb3IoKSkpOyBcCiAg
ICAgICAgIH0gXAogICAgIH0gd2hpbGUgKDApCiAKQEAgLTE1MCwxOSArMTcxLDM3IEBAIHByaXZh
dGU6CiAgICAgICAgIHBhc3MoX19WQV9BUkdTX18pOyBcCiAgICAgfSB3aGlsZSAoMCkKIAotc3Rh
dGljIEV4cGVjdGVkPFByb2dyYW0sIFN0cmluZz4gcHJlcGFyZVNoYXJlZChQaGFzZVRpbWVzJiBw
aGFzZVRpbWVzLCBTdHJpbmcmIHdobHNsU291cmNlKQorc3RhdGljIEV4cGVjdGVkPFByb2dyYW0s
IFN0cmluZz4gcHJlcGFyZVNoYXJlZChQaGFzZVRpbWVzJiBwaGFzZVRpbWVzLCBjb25zdCBTdHJp
bmcmIHdobHNsU291cmNlMSwgY29uc3QgU3RyaW5nKiB3aGxzbFNvdXJjZTIgPSBudWxscHRyKQog
ewogICAgIFByb2dyYW0gcHJvZ3JhbTsKICAgICBQYXJzZXIgcGFyc2VyOwogCiAgICAgeworICAg
ICAgICBwcm9ncmFtLm5hbWVDb250ZXh0KCkuc2V0Q3VycmVudE5hbWVTcGFjZShBU1Q6Ok5hbWVT
cGFjZTo6TmFtZVNwYWNlMSk7CisKICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJwYXJz
ZSIsIHBoYXNlVGltZXMpOwotICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNl
KHByb2dyYW0sIHdobHNsU291cmNlLCBQYXJzaW5nTW9kZTo6VXNlcik7CisgICAgICAgIGF1dG8g
cGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgd2hsc2xTb3VyY2UxLCBQYXJzaW5n
TW9kZTo6VXNlcik7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKLSAgICAgICAgICAgIGlm
IChkdW1wUGFzc0ZhaWx1cmUpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8g
cGFyc2UgdGhlIHByb2dyYW06ICIsIExleGVyOjplcnJvclN0cmluZyh3aGxzbFNvdXJjZSwgcGFy
c2VSZXN1bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExl
eGVyOjplcnJvclN0cmluZyh3aGxzbFNvdXJjZSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkpOworICAg
ICAgICAgICAgaWYgKGR1bXBQYXNzRmFpbHVyZSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCBMZXhlcjo6ZXJyb3JTdHJp
bmcoU3RyaW5nKCksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyhTdHJpbmco
KSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkpOworICAgICAgICB9CisgICAgICAgIGlmICh3aGxzbFNv
dXJjZTIpIHsKKyAgICAgICAgICAgIHByb2dyYW0ubmFtZUNvbnRleHQoKS5zZXRDdXJyZW50TmFt
ZVNwYWNlKEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UyKTsKKyAgICAgICAgICAgIGF1dG8gcGFy
c2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgKndobHNsU291cmNlMiwgUGFyc2luZ01v
ZGU6OlVzZXIpOworICAgICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFRoZSBmaXJzdCBhcmd1bWVudCB0byBlcnJvclN0cmluZygpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCBMZXhlcjo6ZXJyb3JT
dHJpbmcoU3RyaW5nKCksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBmaXJzdCBhcmd1bWVudCB0byBlcnJvclN0
cmluZygpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJv
clN0cmluZyhTdHJpbmcoKSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CisgICAgICAgIHByb2dyYW0ubmFtZUNvbnRleHQoKS5zZXRDdXJyZW50TmFtZVNw
YWNlKEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOwogICAgIH0KIAogICAgIHsKQEAg
LTIwMCwxNCArMjM5LDE3IEBAIHN0YXRpYyBFeHBlY3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBh
cmVTaGFyZWQoUGhhc2VUaW1lcyYgcGhhc2VUaW1lcywgU3RyaW5nJiB3CiAgICAgcmV0dXJuIHBy
b2dyYW07CiB9CiAKLUV4cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFy
ZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcikKK0V4cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4g
cHJlcGFyZShjb25zdCBTaGFkZXJNb2R1bGUmIHZlcnRleFNoYWRlck1vZHVsZSwgY29uc3QgU2hh
ZGVyTW9kdWxlKiBmcmFnbWVudFNoYWRlck1vZHVsZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
JiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpCiB7CiAgICAgUGhhc2VUaW1lcyBwaGFzZVRpbWVz
OwogICAgIE1ldGFsOjpSZW5kZXJNZXRhbENvZGUgZ2VuZXJhdGVkQ29kZTsKIAogICAgIHsKICAg
ICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJwcmVwYXJlIHRvdGFsIiwgcGhhc2VUaW1lcyk7
Ci0gICAgICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQocGhhc2VUaW1lcywgd2hsc2xT
b3VyY2UpOworICAgICAgICBjb25zdCBTdHJpbmcqIHNlY29uZFNoYWRlciA9IG51bGxwdHI7Cisg
ICAgICAgIGlmIChmcmFnbWVudFNoYWRlck1vZHVsZSAmJiBmcmFnbWVudFNoYWRlck1vZHVsZSAh
PSAmdmVydGV4U2hhZGVyTW9kdWxlKQorICAgICAgICAgICAgc2Vjb25kU2hhZGVyID0gJmZyYWdt
ZW50U2hhZGVyTW9kdWxlLT53aGxzbFNvdXJjZTsKKyAgICAgICAgYXV0byBwcm9ncmFtID0gcHJl
cGFyZVNoYXJlZChwaGFzZVRpbWVzLCB2ZXJ0ZXhTaGFkZXJNb2R1bGUud2hsc2xTb3VyY2UsIHNl
Y29uZFNoYWRlcik7CiAgICAgICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChwcm9ncmFtLmVycm9yKCkpOwogCkBAIC0yMTUsOCArMjU3LDEwIEBAIEV4
cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNs
U291cmNlLCBSZW5kZXJQaXBlbGluCiAgICAgICAgIHsKICAgICAgICAgICAgIFBoYXNlVGltZXIg
cGhhc2VUaW1lcigibWF0Y2hTZW1hbnRpY3MiLCBwaGFzZVRpbWVzKTsKICAgICAgICAgICAgIG1h
dGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3JhbSwgcmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291
cmNlLCBFcnJvcigiQ291bGQgbm90IG1hdGNoIHNlbWFudGljcyJfc3RyKSkpOworICAgICAgICAg
ICAgaWYgKCFtYXRjaGVkU2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRo
ZSBmaXJzdCBhcmd1bWVudCB0byBlcnJvclN0cmluZygpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyhTdHJpbmcoKSwgRXJyb3IoIkNvdWxk
IG5vdCBtYXRjaCBzZW1hbnRpY3MiX3N0cikpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIHsKQEAgLTIzNCw3ICsyNzgsNyBAQCBFeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVz
dWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbgog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUV4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBT
dHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3Jp
cHRvciYgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcikKK0V4cGVjdGVkPENvbXB1dGVQcmVwYXJl
UmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoY29uc3QgU2hhZGVyTW9kdWxlJiBzaGFkZXJNb2R1bGUs
IENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpCiB7
CiAgICAgUGhhc2VUaW1lcyBwaGFzZVRpbWVzOwogICAgIE1ldGFsOjpDb21wdXRlTWV0YWxDb2Rl
IGdlbmVyYXRlZENvZGU7CkBAIC0yNDIsNyArMjg2LDcgQEAgRXhwZWN0ZWQ8Q29tcHV0ZVByZXBh
cmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlw
ZWwKIAogICAgIHsKICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJwcmVwYXJlIHRvdGFs
IiwgcGhhc2VUaW1lcyk7Ci0gICAgICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQocGhh
c2VUaW1lcywgd2hsc2xTb3VyY2UpOworICAgICAgICBhdXRvIHByb2dyYW0gPSBwcmVwYXJlU2hh
cmVkKHBoYXNlVGltZXMsIHNoYWRlck1vZHVsZS53aGxzbFNvdXJjZSk7CiAgICAgICAgIGlmICgh
cHJvZ3JhbSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChwcm9ncmFtLmVycm9y
KCkpOwogCkBAIC0yNTAsMTUgKzI5NCwyMCBAQCBFeHBlY3RlZDxDb21wdXRlUHJlcGFyZVJlc3Vs
dCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQaXBlbAogICAg
ICAgICB7CiAgICAgICAgICAgICBQaGFzZVRpbWVyIHBoYXNlVGltZXIoIm1hdGNoU2VtYW50aWNz
IiwgcGhhc2VUaW1lcyk7CiAgICAgICAgICAgICBtYXRjaGVkU2VtYW50aWNzID0gbWF0Y2hTZW1h
bnRpY3MoKnByb2dyYW0sIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOwotICAgICAgICAgICAg
aWYgKCFtYXRjaGVkU2VtYW50aWNzKQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIEVycm9yKCJDb3VsZCBub3QgbWF0
Y2ggc2VtYW50aWNzIl9zdHIpKSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3Mp
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9y
U3RyaW5nKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVy
cm9yU3RyaW5nKFN0cmluZygpLCBFcnJvcigiQ291bGQgbm90IG1hdGNoIHNlbWFudGljcyJfc3Ry
KSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICB9CiAKICAgICAg
ICAgewogICAgICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJjb21wdXRlRGltZW5zaW9u
cyIsIHBoYXNlVGltZXMpOwogICAgICAgICAgICAgY29tcHV0ZURpbWVuc2lvbnMgPSBXSExTTDo6
Y29tcHV0ZURpbWVuc2lvbnMoKnByb2dyYW0sICptYXRjaGVkU2VtYW50aWNzLT5zaGFkZXIpOwot
ICAgICAgICAgICAgaWYgKCFjb21wdXRlRGltZW5zaW9ucykKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCBFcnJvcigi
Q291bGQgbm90IG1hdGNoIGNvbXB1dGUgZGltZW5zaW9ucyJfc3RyKSkpOworICAgICAgICAgICAg
aWYgKCFjb21wdXRlRGltZW5zaW9ucykgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUg
Zmlyc3QgYXJndW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcoU3RyaW5nKCksIEVycm9yKCJDb3VsZCBu
b3QgbWF0Y2ggY29tcHV0ZSBkaW1lbnNpb25zIl9zdHIpKSk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXBhcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJlcGFyZS5oCmluZGV4IDVkYTc3ZjVmMmVkZGI5NTA5NzQ4MzQ3ZTk0Y2E3
YjU5Y2ViNGE1YjQuLmVmZDY1YTcwNTc1ZjU5YWM2NGRiMjVhNGYyNzY2ZDM3YzQxMmFiODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFy
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFy
ZS5oCkBAIC0zOSwxMiArMzksMjAgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogY29uc3RleHByIGJv
b2wgZHVtcE1ldGFsQ29tcGlsZVRpbWVzID0gZmFsc2U7CiAKKy8vIEhpZGUgdGhlIGNvbnRlbnRz
IG9mIHRoZSBTaGFkZXJNb2R1bGUuIENsaWVudHMgb2YgdGhlIGNvbXBpbGVyIHNob3VsZG4ndCBj
YXJlIHdoYXQncyBpbnNpZGUgaXQuCitzdHJ1Y3QgU2hhZGVyTW9kdWxlOworc3RydWN0IFNoYWRl
ck1vZHVsZURlbGV0ZXIgeworICAgIHZvaWQgb3BlcmF0b3IoKShTaGFkZXJNb2R1bGUqKTsKK307
Cit1c2luZyBPd25lZFNoYWRlck1vZHVsZSA9IHN0ZDo6dW5pcXVlX3B0cjxTaGFkZXJNb2R1bGUs
IFNoYWRlck1vZHVsZURlbGV0ZXI+OworT3duZWRTaGFkZXJNb2R1bGUgY3JlYXRlU2hhZGVyTW9k
dWxlKGNvbnN0IFN0cmluZyYgd2hsc2xTb3VyY2UpOworCiBzdHJ1Y3QgUmVuZGVyUHJlcGFyZVJl
c3VsdCB7CiAgICAgU3RyaW5nQnVpbGRlciBtZXRhbFNvdXJjZTsKICAgICBNZXRhbDo6TWFuZ2xl
ZEZ1bmN0aW9uTmFtZSBtYW5nbGVkVmVydGV4RW50cnlQb2ludE5hbWU7CiAgICAgTWV0YWw6Ok1h
bmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZEZyYWdtZW50RW50cnlQb2ludE5hbWU7CiB9OwotRXhw
ZWN0ZWQ8UmVuZGVyUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xT
b3VyY2UsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYpOworRXhwZWN0ZWQ8UmVuZGVyUHJlcGFy
ZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKGNvbnN0IFNoYWRlck1vZHVsZSYgdmVydGV4U2hhZGVy
TW9kdWxlLCBjb25zdCBTaGFkZXJNb2R1bGUqIGZyYWdtZW50U2hhZGVyTW9kdWxlLCBSZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3ImKTsKIAogc3RydWN0IENvbXB1dGVEaW1lbnNpb25zIHsKICAgICB1
bnNpZ25lZCB3aWR0aDsKQEAgLTU3LDcgKzY1LDcgQEAgc3RydWN0IENvbXB1dGVQcmVwYXJlUmVz
dWx0IHsKICAgICBNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZSBtYW5nbGVkRW50cnlQb2ludE5h
bWU7CiAgICAgQ29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnM7CiB9OwotRXhwZWN0
ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291
cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CitFeHBlY3RlZDxDb21wdXRlUHJlcGFy
ZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKGNvbnN0IFNoYWRlck1vZHVsZSYsIENvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3ImKTsKIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5jcHAKaW5kZXggNDI0ZTc5NTE1ZTc5MzFhZmU4NDYzNGVjNGI2ZWM2YzM5
NzczODZmOC4uN2M2NTY5Nzg4NDlkZmIwYjlmNWYxMTBmZGVkNGNkZWMxODJmZGE0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3Zl
cmxvYWRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCkBAIC01MiwxMiArNTIsMTkgQEAgc3RhdGljIHVu
c2lnbmVkIGNvbnZlcnNpb25Db3N0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgY2FuZGlkYXRl
LCBjb25zdCBWZWN0b3IKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVLaW5kPgotQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3Np
YmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4mIGFyZ3VtZW50VHlwZXMsIFR5cGVLaW5kKiBjYXN0UmV0dXJuVHlwZSkKK3N0YXRpYyBBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9z
c2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5
cGU+PiYgYXJndW1lbnRUeXBlcywgVHlwZUtpbmQqIGNhc3RSZXR1cm5UeXBlLCBBU1Q6Ok5hbWVT
cGFjZSBuYW1lU3BhY2UpCiB7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gY2FuZGlkYXRlczsKICAgICBmb3IgKGF1dG8mIHBv
c3NpYmxlRnVuY3Rpb24gOiBwb3NzaWJsZUZ1bmN0aW9ucykgewogICAgICAgICBpZiAocG9zc2li
bGVGdW5jdGlvbi5nZXQoKS5lbnRyeVBvaW50VHlwZSgpKQogICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChuYW1lU3BhY2UgPT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFy
eSkgeworICAgICAgICAgICAgaWYgKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkubmFtZVNwYWNlKCkg
IT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChwb3NzaWJsZUZ1bmN0aW9u
LmdldCgpLm5hbWVTcGFjZSgpICE9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkgJiYg
cG9zc2libGVGdW5jdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSAhPSBuYW1lU3BhY2UpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAgICAgICAgaWYgKGluZmVyVHlwZXNGb3JD
YWxsKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCksIGFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBl
KSkKICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkp
OwogICAgIH0KQEAgLTc3LDE5ICs4NCwxOSBAQCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJl
c29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcAogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVG
dW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzKQorQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlv
bnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1l
bnRUeXBlcywgQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlKQogewotICAgIHJldHVybiByZXNvbHZl
RnVuY3Rpb25PdmVybG9hZEltcGwocG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIHN0
YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlKj4obnVsbHB0cikpOworICAgIHJldHVybiByZXNvbHZl
RnVuY3Rpb25PdmVybG9hZEltcGwocG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIHN0
YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlKj4obnVsbHB0ciksIG5hbWVTcGFjZSk7CiB9CiAKLUFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3Np
YmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSkKK0FTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxl
RnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4m
IGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSwgQVNUOjpOYW1l
U3BhY2UgbmFtZVNwYWNlKQogewotICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZElt
cGwocG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAg
ICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBh
cmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSwgbmFtZVNwYWNlKTsKIH0KIAotQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5j
dGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJn
dW1lbnRUeXBlcywgQVNUOjpVbm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpCitBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0
aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1
bWVudFR5cGVzLCBBU1Q6OlVubmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSwgQVNUOjpOYW1lU3Bh
Y2UgbmFtZVNwYWNlKQogewotICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwo
cG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICBy
ZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1
bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSwgbmFtZVNwYWNlKTsKIH0KIAogQVNUOjpOYW1lZFR5
cGUqIHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6TmFtZWRUeXBlPiwgMT4mIHBvc3NpYmxlVHlwZXMsIEFTVDo6VHlwZUFyZ3VtZW50cyYg
dHlwZUFyZ3VtZW50cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKaW5kZXggM2QzNGFiNmYz
OGQ0OTljOWQzNTg2Y2QxMzBhNzNhMjkxZTdkMGQxMi4uM2IxOTVhMjFjNTcyZTBmNzIwZmFkYWRm
ZGExYTE3ZGE0NjA0MTJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKQEAgLTQzLDkg
KzQzLDkgQEAgY2xhc3MgTmFtZWRUeXBlOwogCiB9CiAKLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMpOwot
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9z
c2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5
cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKLUFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3Np
YmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKK0FT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3Np
YmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZVNwYWNlKTsKK0FTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMs
IEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSwgQVNUOjpOYW1lU3BhY2UpOworQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVG
dW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYg
YXJndW1lbnRUeXBlcywgQVNUOjpVbm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUsIEFTVDo6TmFt
ZVNwYWNlKTsKIEFTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiwgQVNUOjpUeXBlQXJn
dW1lbnRzJik7CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBhN2JjM2E5MDU4NTI2YTI4ZGJlNzU1OGFlNjRmOTI3OGU5ZTUx
MDlkLi4zZDRlMWUyYzZhMmFlNzA4YmY1MGQ5N2VjOGZiNzU1M2VjYjliNzY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzM0
NCw2ICsxMzM0NCw3IEBACiAJCUMyMzRBOUI1MjFFOTJDMjMwMDNDOTg0RCAvKiBXSExTTFN5bnRo
ZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVzaXpl
U3RydWN0dXJlQWNjZXNzb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMzRB
OUI2MjFFOTJDQzAwMDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xJbnRyaW5zaWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMzRBOUI3
MjFFOTJDQzEwMDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0hMU0xJbnRyaW5zaWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIz
OThFQkQyMzBBMUI3NjAwNjQxNTA3IC8qIFdITFNMTmFtZVNwYWNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMTmFtZVNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNDU4RTYx
MUZFODk3OUUwMDU5NDc1OSAvKiBGb250Q2FjaGVDb3JlVGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
b250Q2FjaGVDb3JlVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjRBNTdB
RjIxRkFENTNGMDA0QzZERDEgLyogV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzI0QTU3QjIyMUZCOEREQTAwNEM2REQxIC8qIFdITFNMU2VtYW50aWNNYXRjaGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU2VtYW50aWNNYXRjaGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MTE0LDYgKzE3MTE1LDcgQEAKIAkJCQlDMjFCRjcyRDIx
Q0Q4OUU5MDAyMjc5NzkgLyogV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmggKi8s
CiAJCQkJQzIxQkY3MkMyMUNEODlFOTAwMjI3OTc5IC8qIFdITFNMTWFrZVBvaW50ZXJFeHByZXNz
aW9uLmggKi8sCiAJCQkJMUMzMzI3NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBl
LmggKi8sCisJCQkJQzIzOThFQkQyMzBBMUI3NjAwNjQxNTA3IC8qIFdITFNMTmFtZVNwYWNlLmgg
Ki8sCiAJCQkJQzIxQkY3MjMyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oICovLAogCQkJCUMyMUJGNzJBMjFDRDg5RTcwMDIyNzk3OSAvKiBXSExTTE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5oICovLAogCQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIyNzk3OSAv
KiBXSExTTE51bGxMaXRlcmFsLmggKi8sCkBAIC0xODU1OCwxNCArMTg1NjAsMTQgQEAKIAkJNTEw
QTU4RUUxQkFCNzFFMDAwQzE5MjgyIC8qIHNlcnZlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJOTMyM0IwNkQyMzA2MUU5QjAwOTAxQzhCIC8qIElEQlNl
cmlhbGl6YXRpb25Db250ZXh0LmNwcCAqLywKLQkJCQk5MzIzQjA2RjIzMDYxRTlDMDA5MDFDOEIg
LyogSURCU2VyaWFsaXphdGlvbkNvbnRleHQuaCAqLywKIAkJCQk1MUJBNEFDNzFCQkM1QUQ2MDBE
RjNENkQgLyogSURCQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJNTE2RDdENkQxQkI1RjA2NTAwQUY3
Qzc3IC8qIElEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAgKi8sCiAJCQkJNTEwQTU4RkUxQkIwN0FB
NTAwQzE5MjgyIC8qIElEQkNvbm5lY3Rpb25Ub0NsaWVudC5oICovLAogCQkJCTUxNkQ3RDZFMUJC
NUYwNjUwMEFGN0M3NyAvKiBJREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5oICovLAogCQkJ
CTUxMUVDMTI1MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmNwcCAqLywKIAkJ
CQk1MTFFQzEyNjFDNTBBQTU3MDAzMkY5ODMgLyogSURCU2VyaWFsaXphdGlvbi5oICovLAorCQkJ
CTkzMjNCMDZEMjMwNjFFOUIwMDkwMUM4QiAvKiBJREJTZXJpYWxpemF0aW9uQ29udGV4dC5jcHAg
Ki8sCisJCQkJOTMyM0IwNkYyMzA2MUU5QzAwOTAxQzhCIC8qIElEQlNlcmlhbGl6YXRpb25Db250
ZXh0LmggKi8sCiAJCQkJNTEwQTU4RUYxQkFCNzIwRjAwQzE5MjgyIC8qIElEQlNlcnZlci5jcHAg
Ki8sCiAJCQkJNTEwQTU4RjAxQkFCNzIwRjAwQzE5MjgyIC8qIElEQlNlcnZlci5oICovLAogCQkJ
CTUxRUVBQTcxMUJFRkZBNzkwMDIxODAwOCAvKiBJbmRleFZhbHVlRW50cnkuY3BwICovLApAQCAt
Mjk1MzYsNiArMjk1MzgsNyBAQAogCQkJCTUxNDVCMTBBMUJDNDhFMkUwMEU4NjIxOSAvKiBJREJS
ZXNvdXJjZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcyMzZEMUJCNjE3NDkw
MDQ3OENBMyAvKiBJREJSZXN1bHREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTFFQzEyODFD
NTBBQUNBMDAzMkY5ODMgLyogSURCU2VyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTMyM0IwNzAyMzA2MUY5NzAwOTAxQzhCIC8qIElEQlNlcmlhbGl6YXRpb25Db250ZXh0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTg1RkNCQjFCQjRDQkY4MDAxMjg5OEYgLyogSURCU2VydmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkNBRDFCQjRDNEU4MDAxMjg5OEYgLyogSURCVHJhbnNh
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOThGN0FEMUJCREQzRUIwMEUyQ0M1RiAvKiBJ
REJUcmFuc2FjdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMzAwMDksNyArMzAwMTIsNiBA
QAogCQkJCUJDNDkxOEM5MEJGRUEwNTAwMDlENjMxNiAvKiBKU0hUTUxJRnJhbWVFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUE5ODBBMUNERDJEMDBCNDJCMjUgLyogSlNIVE1MSW1h
Z2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFN0U5NzBBMUE4M0UzMDA3RkI4QzUg
LyogSlNIVE1MSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk5MzIzQjA3MDIzMDYx
Rjk3MDA5MDFDOEIgLyogSURCU2VyaWFsaXphdGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTgzNkIwOTU2MUY1RjM0RDkwMDNDMzcwMiAvKiBKU0hUTUxJbnB1dEVsZW1lbnRFbnRyaWVz
QVBJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNjE0OEE3OTEyRTQxRTNCMDA0NEE3ODQgLyogSlNI
VE1MS2V5Z2VuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFCMjIwQTFDRTYzQjAw
QjQyQjI1IC8qIEpTSFRNTExhYmVsRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVU2hhZGVyTW9kdWxlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVU2hhZGVyTW9kdWxlLmgK
aW5kZXggY2UzMzQxZTRmYTc3NDIxYTgzZWYxMGY2ODE0YTE5ZjgzZGM5OGVhYy4uYjg2MGVlYWQ2
MWYxMDkyOGU2MTA5ZTFhZDY1MGY3YzI2ZjgwNzZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVTaGFkZXJNb2R1bGUuaApAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMUHJlcGFyZS5o
IgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ2LDE1ICs0NywxNSBAQCBjbGFzcyBHUFVT
aGFkZXJNb2R1bGUgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVTaGFkZXJNb2R1bGU+IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmUHRyPEdQVVNoYWRlck1vZHVsZT4gdHJ5Q3JlYXRlKGNvbnN0IEdQ
VURldmljZSYsIGNvbnN0IEdQVVNoYWRlck1vZHVsZURlc2NyaXB0b3ImKTsKIAotICAgIFBsYXRm
b3JtU2hhZGVyTW9kdWxlKiBwbGF0Zm9ybVNoYWRlck1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
d2hsc2xTb3VyY2UuaXNOdWxsKCkgPyBtX3BsYXRmb3JtU2hhZGVyTW9kdWxlLmdldCgpIDogbnVs
bHB0cjsgfQotICAgIGNvbnN0IFN0cmluZyYgd2hsc2xTb3VyY2UoKSBjb25zdCB7IHJldHVybiBt
X3dobHNsU291cmNlOyB9CisgICAgUGxhdGZvcm1TaGFkZXJNb2R1bGUqIHBsYXRmb3JtU2hhZGVy
TW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV93aGxzbE1vZHVsZSA/IG51bGxwdHIgOiBtX3BsYXRm
b3JtU2hhZGVyTW9kdWxlLmdldCgpOyB9CisgICAgY29uc3QgV0hMU0w6OlNoYWRlck1vZHVsZSog
d2hsc2xNb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX3dobHNsTW9kdWxlLmdldCgpOyB9CiAKIHBy
aXZhdGU6CiAgICAgR1BVU2hhZGVyTW9kdWxlKFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHIm
Jik7Ci0gICAgR1BVU2hhZGVyTW9kdWxlKFN0cmluZyYmIHdobHNsU291cmNlKTsKKyAgICBHUFVT
aGFkZXJNb2R1bGUoV0hMU0w6Ok93bmVkU2hhZGVyTW9kdWxlJiYgd2hsc2xNb2R1bGUpOwogCiAg
ICAgUGxhdGZvcm1TaGFkZXJNb2R1bGVTbWFydFB0ciBtX3BsYXRmb3JtU2hhZGVyTW9kdWxlOwot
ICAgIFN0cmluZyBtX3dobHNsU291cmNlOworICAgIFdITFNMOjpPd25lZFNoYWRlck1vZHVsZSBt
X3dobHNsTW9kdWxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBl
bGluZU1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29h
L0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCmluZGV4IDFjZWZlZWRiOTg1ZTRhNzY3NDUzMmZk
MjgzNDYwN2E5NzlhMDBiNTkuLmUwMWI3NWFmOTUxNzVjMDQ5NjU1ODA4OTNmNjE2MDBkNTZlNTJk
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KQEAgLTcwLDEz
ICs3MCwxMSBAQCBzdGF0aWMgT3B0aW9uYWw8V0hMU0w6OkNvbXB1dGVEaW1lbnNpb25zPiB0cnlT
ZXRGdW5jdGlvbnMoY29uc3QgR1BVUGlwZWxpbmVTdGFnZQogICAgIFdITFNMOjpDb21wdXRlRGlt
ZW5zaW9ucyBjb21wdXRlRGltZW5zaW9ucyB7IDEsIDEsIDEgfTsKIAogICAgIGlmICh3aGxzbERl
c2NyaXB0b3IpIHsKLSAgICAgICAgLy8gV0hMU0wgZnVuY3Rpb25zIGFyZSBjb21waWxlZCB0byBN
U0wgZmlyc3QuCi0gICAgICAgIFN0cmluZyB3aGxzbFNvdXJjZSA9IGNvbXB1dGVTdGFnZS5tb2R1
bGUtPndobHNsU291cmNlKCk7Ci0gICAgICAgIEFTU0VSVCghd2hsc2xTb3VyY2UuaXNOdWxsKCkp
OworICAgICAgICBBU1NFUlQoY29tcHV0ZVN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSk7CiAK
ICAgICAgICAgd2hsc2xEZXNjcmlwdG9yLT5lbnRyeVBvaW50TmFtZSA9IGNvbXB1dGVTdGFnZS5l
bnRyeVBvaW50OwogCi0gICAgICAgIGF1dG8gd2hsc2xDb21waWxlUmVzdWx0ID0gV0hMU0w6OnBy
ZXBhcmUod2hsc2xTb3VyY2UsICp3aGxzbERlc2NyaXB0b3IpOworICAgICAgICBhdXRvIHdobHNs
Q29tcGlsZVJlc3VsdCA9IFdITFNMOjpwcmVwYXJlKCpjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxz
bE1vZHVsZSgpLCAqd2hsc2xEZXNjcmlwdG9yKTsKICAgICAgICAgaWYgKCF3aGxzbENvbXBpbGVS
ZXN1bHQpIHsKICAgICAgICAgICAgIGVycm9yU2NvcGVzLmdlbmVyYXRlUHJlZml4ZWRFcnJvciht
YWtlU3RyaW5nKCJXSExTTCBjb21waWxlIGVycm9yOiAiLCB3aGxzbENvbXBpbGVSZXN1bHQuZXJy
b3IoKSkpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTEzNCw3ICsxMzIs
NyBAQCBzdGF0aWMgT3B0aW9uYWw8Q29udmVydFJlc3VsdD4gY29udmVydENvbXB1dGVQaXBlbGlu
ZURlc2NyaXB0b3IoY29uc3QgR1BVQ29tcHV0ZQogCiAgICAgY29uc3QgYXV0byYgY29tcHV0ZVN0
YWdlID0gZGVzY3JpcHRvci5jb21wdXRlU3RhZ2U7CiAKLSAgICBib29sIGlzV2hsc2wgPSAhY29t
cHV0ZVN0YWdlLm1vZHVsZS0+d2hsc2xTb3VyY2UoKS5pc051bGwoKTsKKyAgICBib29sIGlzV2hs
c2wgPSBjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpOwogCiAgICAgT3B0aW9uYWw8
V0hMU0w6OkNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3I+IHdobHNsRGVzY3JpcHRvcjsKICAgICBp
ZiAoaXNXaGxzbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KaW5kZXgg
ODZhYWRkODQyMDgxMjU1Y2QzNTgxZDI0ODIyMGZlZDUwYjI1N2ExMC4uYzhhYThhMjMwNGJmMjE5
ZTZhMjZlNTJlZDYzYmRiMTkwZDU5ZWJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVs
aW5lTWV0YWwubW0KQEAgLTM4MiwxNSArMzgyLDE0IEBAIHN0YXRpYyBib29sIHRyeVNldEZ1bmN0
aW9ucyhjb25zdCBHUFVQaXBlbGluZVN0YWdlRGVzY3JpcHRvciYgdmVydGV4U3RhZ2UsIGNvbnN0
CiAgICAgU3RyaW5nIHZlcnRleEVudHJ5UG9pbnQsIGZyYWdtZW50RW50cnlQb2ludDsKIAogICAg
IGlmICh3aGxzbERlc2NyaXB0b3IpIHsKLSAgICAgICAgLy8gV0hMU0wgZnVuY3Rpb25zIGFyZSBj
b21waWxlZCB0byBNU0wgZmlyc3QuCi0gICAgICAgIFN0cmluZyB3aGxzbFNvdXJjZSA9IHZlcnRl
eFN0YWdlLm1vZHVsZS0+d2hsc2xTb3VyY2UoKTsKLSAgICAgICAgQVNTRVJUKCF3aGxzbFNvdXJj
ZS5pc051bGwoKSk7CisgICAgICAgIEFTU0VSVCh2ZXJ0ZXhTdGFnZS5tb2R1bGUtPndobHNsTW9k
dWxlKCkpOworICAgICAgICBBU1NFUlQoIWZyYWdtZW50U3RhZ2UgfHwgZnJhZ21lbnRTdGFnZS0+
bW9kdWxlLT53aGxzbE1vZHVsZSgpKTsKIAogICAgICAgICB3aGxzbERlc2NyaXB0b3ItPnZlcnRl
eEVudHJ5UG9pbnROYW1lID0gdmVydGV4U3RhZ2UuZW50cnlQb2ludDsKICAgICAgICAgaWYgKGZy
YWdtZW50U3RhZ2UpCiAgICAgICAgICAgICB3aGxzbERlc2NyaXB0b3ItPmZyYWdtZW50RW50cnlQ
b2ludE5hbWUgPSBmcmFnbWVudFN0YWdlLT5lbnRyeVBvaW50OwogCi0gICAgICAgIGF1dG8gd2hs
c2xDb21waWxlUmVzdWx0ID0gV0hMU0w6OnByZXBhcmUod2hsc2xTb3VyY2UsICp3aGxzbERlc2Ny
aXB0b3IpOworICAgICAgICBhdXRvIHdobHNsQ29tcGlsZVJlc3VsdCA9IFdITFNMOjpwcmVwYXJl
KCp2ZXJ0ZXhTdGFnZS5tb2R1bGUtPndobHNsTW9kdWxlKCksIGZyYWdtZW50U3RhZ2UgPyBmcmFn
bWVudFN0YWdlLT5tb2R1bGUtPndobHNsTW9kdWxlKCkgOiBudWxscHRyLCAqd2hsc2xEZXNjcmlw
dG9yKTsKICAgICAgICAgaWYgKCF3aGxzbENvbXBpbGVSZXN1bHQpIHsKICAgICAgICAgICAgIGVy
cm9yU2NvcGVzLmdlbmVyYXRlUHJlZml4ZWRFcnJvcihtYWtlU3RyaW5nKCJXSExTTCBjb21waWxl
IGVycm9yOiAiLCB3aGxzbENvbXBpbGVSZXN1bHQuZXJyb3IoKSkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNDUyLDggKzQ1MSw5IEBAIHN0YXRpYyBSZXRhaW5QdHI8TVRMUmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yPiBjb252ZXJ0UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKGNvCiAg
ICAgY29uc3QgYXV0byYgdmVydGV4U3RhZ2UgPSBkZXNjcmlwdG9yLnZlcnRleFN0YWdlOwogICAg
IGNvbnN0IGF1dG8mIGZyYWdtZW50U3RhZ2UgPSBkZXNjcmlwdG9yLmZyYWdtZW50U3RhZ2U7CiAK
LSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NTQ0NiBBbGxvdyBXSExTTCBzaGFkZXJzIHRvIGNvbWUgZnJvbSBkaWZmZXJlbnQgcHJvZ3JhbXMu
Ci0gICAgYm9vbCBpc1dobHNsID0gIXZlcnRleFN0YWdlLm1vZHVsZS0+d2hsc2xTb3VyY2UoKS5p
c051bGwoKSAmJiAoIWZyYWdtZW50U3RhZ2UgfHwgdmVydGV4U3RhZ2UubW9kdWxlLnB0cigpID09
IGZyYWdtZW50U3RhZ2UtPm1vZHVsZS5wdHIoKSk7CisgICAgaWYgKGZyYWdtZW50U3RhZ2UgJiYg
c3RhdGljX2Nhc3Q8Ym9vbD4odmVydGV4U3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpKSAhPSBz
dGF0aWNfY2FzdDxib29sPihmcmFnbWVudFN0YWdlLT5tb2R1bGUtPndobHNsTW9kdWxlKCkpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBib29sIGlzV2hsc2wgPSB2ZXJ0ZXhTdGFnZS5t
b2R1bGUtPndobHNsTW9kdWxlKCk7CiAKICAgICAvLyBTZXQgZGF0YSBmb3IgdGhlIE1ldGFsIHBp
cGVsaW5lIGRlc2NyaXB0b3IgKGFuZCBXSExTTCdzLCBpZiBuZWVkZWQpLgogICAgIE9wdGlvbmFs
PFdITFNMOjpSZW5kZXJQaXBlbGluZURlc2NyaXB0b3I+IHdobHNsRGVzY3JpcHRvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVTaGFk
ZXJNb2R1bGVNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVTaGFkZXJNb2R1bGVNZXRhbC5tbQppbmRleCBiN2Y1NmM4MzI3Y2FhYmIxNDI0OTUw
MDRhNjJlOTJjNWQ3MDg5YmQxLi4zMjIxNDg1OTA2Mjc4MTY3MDdjYmJmYTA5MjkwYmY1ZjJjNTcy
NjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVNoYWRlck1vZHVsZU1ldGFsLm1tCkBAIC00NCw4ICs0NCwx
MSBAQCBSZWZQdHI8R1BVU2hhZGVyTW9kdWxlPiBHUFVTaGFkZXJNb2R1bGU6OnRyeUNyZWF0ZShj
b25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29ucwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgCi0gICAgaWYgKGRlc2NyaXB0b3IuaXNXSExTTCkKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBHUFVTaGFkZXJNb2R1bGUoU3RyaW5nKGRlc2NyaXB0b3IuY29kZSkpKTsKKyAg
ICBpZiAoZGVzY3JpcHRvci5pc1dITFNMKSB7CisgICAgICAgIGlmIChhdXRvIHdobHNsTW9kdWxl
ID0gV0hMU0w6OmNyZWF0ZVNoYWRlck1vZHVsZShkZXNjcmlwdG9yLmNvZGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHUFVTaGFkZXJNb2R1bGUoV1RGTW92ZSh3aGxzbE1vZHVs
ZSkpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogCiAgICAgUGxhdGZvcm1TaGFk
ZXJNb2R1bGVTbWFydFB0ciBtb2R1bGU7CiAKQEAgLTY2LDggKzY5LDggQEAgR1BVU2hhZGVyTW9k
dWxlOjpHUFVTaGFkZXJNb2R1bGUoUGxhdGZvcm1TaGFkZXJNb2R1bGVTbWFydFB0ciYmIG1vZHVs
ZSkKIHsKIH0KIAotR1BVU2hhZGVyTW9kdWxlOjpHUFVTaGFkZXJNb2R1bGUoU3RyaW5nJiYgd2hs
c2xTb3VyY2UpCi0gICAgOiBtX3dobHNsU291cmNlKFdURk1vdmUod2hsc2xTb3VyY2UpKQorR1BV
U2hhZGVyTW9kdWxlOjpHUFVTaGFkZXJNb2R1bGUoV0hMU0w6Ok93bmVkU2hhZGVyTW9kdWxlJiYg
d2hsc2xNb2R1bGUpCisgICAgOiBtX3dobHNsTW9kdWxlKFdURk1vdmUod2hsc2xNb2R1bGUpKQog
ewogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376659</attachid>
            <date>2019-08-18 19:05:50 -0700</date>
            <delta_ts>2019-08-19 01:55:31 -0700</delta_ts>
            <desc>Needs tests</desc>
            <filename>bug-195446-20190818190549.patch</filename>
            <type>text/plain</type>
            <size>71582</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmOTFkYzVmYTQzOTFh
NGRmNWNkOWRkMDQ1Yjk5MmIwMTdkYWJhYS4uMjhkZjU5ODFiNDg1YmI0Zjk1ZGRkZThjYTM0NTFl
NTEzOGRjMTA1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTA4LTE4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBW
ZXJ0ZXggc2hhZGVyIGFuZCBmcmFnbWVudCBzaGFkZXIgbmVlZCB0byBiZSBhYmxlIHRvIGNvbWUg
ZnJvbSB0d28gZGlmZmVyZW50IHByb2dyYW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU0NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6cHJlcGFyZVNoYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9k
dWxlOjpTaGFkZXJNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNyZWF0ZVNoYWRl
ck1vZHVsZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9kdWxlRGVsZXRlcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZSk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6R1BV
U2hhZGVyTW9kdWxlOjpwbGF0Zm9ybVNoYWRlck1vZHVsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHUFVTaGFkZXJNb2R1bGU6OndobHNsTW9kdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdQVVNoYWRlck1vZHVsZTo6d2hsc2xTb3VyY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnRyeVNldEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW06CisgICAgICAgIChX
ZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVVNoYWRlck1vZHVsZU1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVy
TW9kdWxlOjp0cnlDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVyTW9kdWxlOjpH
UFVTaGFkZXJNb2R1bGUpOgorCiAyMDE5LTA4LTE2ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVl
dWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQ4Nzcy
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDY4MDVkNjY2NGY5MDdj
ODNjZDViN2FmOGRhNGJkZmE0NmRlMmIyYmQuLmI3MjU2ZDUwNTQ4ZmU5OTA4YTQyN2JmOGY1YjAx
ZDdkOWJlMzE1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJXSExTTENvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMRW50cnlQb2ludFR5cGUuaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgi
CisjaW5jbHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIKICNpbmNsdWRlICJXSExTTFBhcnNpbmdNb2Rl
LmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5
cGUuaCIKQEAgLTgzLDYgKzg0LDkgQEAgcHVibGljOgogCiAgICAgUGFyc2luZ01vZGUgcGFyc2lu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3BhcnNpbmdNb2RlOyB9CiAKKyAgICBOYW1lU3BhY2Ug
bmFtZVNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU3BhY2U7IH0KKyAgICB2b2lkIHNldE5h
bWVTcGFjZShOYW1lU3BhY2UgbmFtZVNwYWNlKSB7IG1fbmFtZVNwYWNlID0gbmFtZVNwYWNlOyB9
CisKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uIG1fY29kZUxvY2F0aW9uOwogICAgIEF0dHJp
YnV0ZUJsb2NrIG1fYXR0cmlidXRlQmxvY2s7CkBAIC05Myw2ICs5Nyw3IEBAIHByaXZhdGU6CiAg
ICAgU3RyaW5nIG1fbmFtZTsKICAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3BhcmFtZXRlcnM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlbWFudGljPiBtX3NlbWFudGljOworICAgIE5hbWVTcGFj
ZSBtX25hbWVTcGFjZSB7IE5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5IH07CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hbWVTcGFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTmFtZVNwYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ2ZmRlZjE1ZmI3MTc2
OGJlMDUxOWEwZWExM2Y1MmUyNDk2ZThhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVTcGFjZS5oCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFT
VCB7CisKKy8vIERpZmZlcmVudCBzaGFkZXIgbW9kdWxlcyBvcGVyYXRlIGluIGRpZmZlcmVudCBu
YW1lc3BhY2VzLgorLy8gVGhpcyBtZWFucyBpdCdzIHBvc3NpYmxlIHRvIGhhdmUgdHdvIGZ1bmN0
aW9ucyB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZXMsIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlm
ZmVyZW50IG1vZHVsZXMuCitlbnVtIGNsYXNzIE5hbWVTcGFjZSA6IHVpbnQ4X3QgeworICAgIFN0
YW5kYXJkTGlicmFyeSA9IDAsCisgICAgTmFtZVNwYWNlMSA9IDEsCisgICAgTmFtZVNwYWNlMiA9
IDIKK307CisKK30KKworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRU
eXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1l
ZFR5cGUuaAppbmRleCA0NWI4MDEwY2QyOGViZGQ1MGY4NzAxN2ViZTdhY2IzNDJlNGNmN2FlLi41
OTljNDZjNTg1Mzg1YjAxODdjMDJlYmM5ZDJjMzA0M2NjYjNiODc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUu
aApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExT
TENvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmFtZVNwYWNlLmgiCiAjaW5jbHVkZSAi
V0hMU0xUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYwLDEyICs2MSwxNSBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KIAorICAgIE5hbWVTcGFjZSBuYW1lU3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX25hbWVTcGFjZTsgfQorICAgIHZvaWQgc2V0TmFtZVNwYWNlKE5h
bWVTcGFjZSBuYW1lU3BhY2UpIHsgbV9uYW1lU3BhY2UgPSBuYW1lU3BhY2U7IH0KIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgVHlwZTsKICAgICBUeXBlJiB1bmlmeU5vZGVJbXBsKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KICAgICBDb2RlTG9jYXRpb24gbV9jb2RlTG9jYXRpb247CiAgICAgU3Ry
aW5nIG1fbmFtZTsKKyAgICBOYW1lU3BhY2UgbV9uYW1lU3BhY2UgeyBOYW1lU3BhY2U6OlN0YW5k
YXJkTGlicmFyeSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAppbmRleCA2MzI1
NWQ0NjRhZWI1MDNmZjkwMDY0ZWY0ZGIzNDVjMjg4YWRlMzM3Li5hZDQ4NGI2YmMzOGM1NzAzOTUy
YTFjMTc2ODg5NjEwYTg3Njg1NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKCEhbV9jYXN0UmV0dXJuVHlwZSAhPSAhIW90aGVyLm1fY2FzdFJldHVyblR5cGUpCisgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihtX2Nhc3RSZXR1cm5UeXBlKSAhPSBzdGF0aWNfY2Fz
dDxib29sPihvdGhlci5tX2Nhc3RSZXR1cm5UeXBlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBpZiAoIW1fY2FzdFJldHVyblR5cGUpCkBAIC00MjcsNyArNDI3LDcgQEAg
c3RhdGljIGJvb2wgY2hlY2tTZW1hbnRpY3MoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaW5wdXRJ
dGVtcywgVmVjdG9yPEVudHJ5UG9pbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJv
b2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBm
dW5jdGlvbkRlZmluaXRpb24sIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKK3N0YXRpYyBib29s
IGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uLCBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQsIEFTVDo6TmFtZVNwYWNl
IGN1cnJlbnROYW1lU3BhY2UpCiB7CiAgICAgZW51bSBjbGFzcyBDaGVja0tpbmQgewogICAgICAg
ICBJbmRleCwKQEAgLTQ4MywxNiArNDgzLDE0IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JP
dmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGF1dG8mIHZhbHVlVHlwZSA9ICpmdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW251bUV4cGVjdGVkUGFyYW1ldGVycyAtIDFdLT50
eXBlKCk7CiAgICAgICAgIGF1dG8gZ2V0dGVyTmFtZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1l
KCkuc3Vic3RyaW5nKDAsIGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkubGVuZ3RoKCkgLSAxKTsK
LSAgICAgICAgYXV0byogZ2V0dGVyRnVuY3MgPSBuYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoZ2V0
dGVyTmFtZSk7Ci0gICAgICAgIGlmICghZ2V0dGVyRnVuY3MpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGF1dG8gZ2V0dGVyRnVuY3MgPSBuYW1lQ29udGV4dC5nZXRGdW5jdGlv
bnMoZ2V0dGVyTmFtZSwgY3VycmVudE5hbWVTcGFjZSk7CiAgICAgICAgIFZlY3RvcjxSZXNvbHZp
bmdUeXBlPiBhcmd1bWVudFR5cGVzOwogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4gYXJndW1lbnRUeXBlUmVmZXJlbmNlczsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxOyArK2kpCiAgICAg
ICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKVtpXS0+dHlwZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudFR5cGUgOiBhcmd1
bWVudFR5cGVzKQogICAgICAgICAgICAgYXJndW1lbnRUeXBlUmVmZXJlbmNlcy5hcHBlbmQoYXJn
dW1lbnRUeXBlKTsKLSAgICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVy
bG9hZCgqZ2V0dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMpOworICAgICAgICBhdXRv
KiBvdmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKGdldHRlckZ1bmNzLCBhcmd1bWVu
dFR5cGVSZWZlcmVuY2VzLCBjdXJyZW50TmFtZVNwYWNlKTsKICAgICAgICAgaWYgKCFvdmVybG9h
ZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYXV0byYgcmVzdWx0VHlwZSA9
IG92ZXJsb2FkLT50eXBlKCk7CkBAIC02ODAsNiArNjc4LDcgQEAgcHJpdmF0ZToKICAgICBBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxscHRyIH07CiAgICAg
SGFzaE1hcDxGdW5jdGlvbktleSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4sIEZ1bmN0aW9uS2V5OjpIYXNoLCBGdW5jdGlvbktleTo6
VHJhaXRzPiBtX2Z1bmN0aW9uczsKICAgICBIYXNoTWFwPEFuZE92ZXJsb2FkVHlwZUtleSwgUmVm
UHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBBbmRPdmVybG9hZFR5cGVLZXk6Okhhc2gsIEFuZE92ZXJs
b2FkVHlwZUtleTo6VHJhaXRzPiBtX2FuZE92ZXJsb2FkVHlwZU1hcDsKKyAgICBBU1Q6Ok5hbWVT
cGFjZSBtX2N1cnJlbnROYW1lU3BhY2UgeyBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5
IH07CiB9OwogCiB2b2lkIENoZWNrZXI6OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCkBAIC03MzUs
NiArNzM0LDcgQEAgYm9vbCBDaGVja2VyOjpjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIAogdm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQogeworICAgIG1f
Y3VycmVudE5hbWVTcGFjZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lU3BhY2UoKTsKICAgICBt
X2N1cnJlbnRGdW5jdGlvbiA9ICZmdW5jdGlvbkRlZmluaXRpb247CiAgICAgaWYgKGZ1bmN0aW9u
RGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CiAgICAgICAgIGlmICghY2hlY2tTaGFkZXJU
eXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKQEAgLTc1MSw3ICs3NTEsNyBAQCB2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFjaGVja09wZXJh
dG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uLCBtX3Byb2dyYW0ubmFtZUNvbnRleHQoKSkp
IHsKKyAgICBpZiAoIWNoZWNrT3BlcmF0b3JPdmVybG9hZChmdW5jdGlvbkRlZmluaXRpb24sIG1f
cHJvZ3JhbS5uYW1lQ29udGV4dCgpLCBtX2N1cnJlbnROYW1lU3BhY2UpKSB7CiAgICAgICAgIHNl
dEVycm9yKEVycm9yKCJPcGVyYXRvciBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBzaWduYXR1cmUu
IiwgZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC04MzQsNyArODM0LDcgQEAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBDaGVj
a2VyOjpyZXNvbHZlRnVuY3Rpb24oVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXIKICAgICB7
CiAgICAgICAgIGF1dG8gaXRlciA9IG1fZnVuY3Rpb25zLmZpbmQoRnVuY3Rpb25LZXkgeyBuYW1l
LCBXVEZNb3ZlKHVubmFtZWRUeXBlcyksIGNhc3RSZXR1cm5UeXBlIH0pOwogICAgICAgICBpZiAo
aXRlciAhPSBtX2Z1bmN0aW9ucy5lbmQoKSkgewotICAgICAgICAgICAgaWYgKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiogZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChpdGVyLT52
YWx1ZSwgdHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKKyAgICAgICAgICAgIGlmIChBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoaXRlci0+
dmFsdWUsIHR5cGVzLCBjYXN0UmV0dXJuVHlwZSwgbV9jdXJyZW50TmFtZVNwYWNlKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjUyLDE1
ICsxNjUyLDE0IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2Fs
bEV4cHJlc3Npb24pCiAKICAgICBpZiAoIWZ1bmN0aW9uKSB7CiAgICAgICAgIE5hbWVDb250ZXh0
JiBuYW1lQ29udGV4dCA9IG1fcHJvZ3JhbS5uYW1lQ29udGV4dCgpOwotICAgICAgICBpZiAoYXV0
byogY2FzdFR5cGVzID0gbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Npb24ubmFtZSgp
KSkgewotICAgICAgICAgICAgaWYgKGNhc3RUeXBlcy0+c2l6ZSgpID09IDEpIHsKLSAgICAgICAg
ICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgY2FzdFR5cGUgPSAoKmNhc3RUeXBlcylbMF0uZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb24odHlwZXMsICJvcGVy
YXRvciBjYXN0Il9zdHIsIGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAmY2FzdFR5cGUp
OwotICAgICAgICAgICAgICAgIGlmIChoYXNFcnJvcigpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAg
ICBjYWxsRXhwcmVzc2lvbi5zZXRDYXN0RGF0YShjYXN0VHlwZSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGF1dG8gY2FzdFR5cGVzID0gbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Np
b24ubmFtZSgpLCBtX2N1cnJlbnROYW1lU3BhY2UpOworICAgICAgICBpZiAoY2FzdFR5cGVzLnNp
emUoKSA9PSAxKSB7CisgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgY2FzdFR5cGUgPSBjYXN0
VHlwZXNbMF0uZ2V0KCk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbih0
eXBlcywgIm9wZXJhdG9yIGNhc3QiX3N0ciwgY2FsbEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCks
ICZjYXN0VHlwZSk7CisgICAgICAgICAgICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24pCisgICAgICAgICAgICAgICAgY2Fs
bEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoY2FzdFR5cGUpOwogICAgICAgICB9CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFt
ZUNvbnRleHQuY3BwCmluZGV4IDE5OTAyMTNhM2I3MjZhMzAzM2QwMTdhNjEzMWFmNGE2ZGI2NjVh
ZmUuLjE4OTNhNWMxMTBjMmQxZDc1ZmQ4NTJiMzZhMmZiODliZGQ1MTllYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRl
eHQuY3BwCkBAIC00Nyw2MyArNDcsNzUgQEAgTmFtZUNvbnRleHQ6Ok5hbWVDb250ZXh0KE5hbWVD
b250ZXh0KiBwYXJlbnQpCiAKIGJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlR5cGVEZWZpbml0
aW9uJiB0eXBlRGVmaW5pdGlvbikKIHsKLSAgICBpZiAoZXhpc3RzKHR5cGVEZWZpbml0aW9uLm5h
bWUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMu
YWRkKHR5cGVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAg
IGlmIChnbG9iYWxFeGlzdHModHlwZURlZmluaXRpb24ubmFtZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHR5cGVEZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1lU3Bh
Y2UpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFt
ZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZCh0eXBlRGVmaW5p
dGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBl
PiwgMT4oKSk7CisgICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZCh0eXBlRGVmaW5pdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIGJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVj
dHVyZURlZmluaXRpb24pCiB7Ci0gICAgaWYgKGV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5h
bWUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMu
YWRkKHN0cnVjdHVyZURlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
CisgICAgaWYgKGdsb2JhbEV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uLnNldE5hbWVTcGFjZSht
X2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhd
LmFkZChzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50
cnkpOwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRp
b24pOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpF
bnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKIHsKLSAgICBpZiAo
ZXhpc3RzKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24u
bmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+
KCkpOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgaWYgKGdsb2JhbEV4aXN0cyhl
bnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5zZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsK
KyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFj
ZSk7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzW2luZGV4XS5hZGQoZW51bWVyYXRpb25EZWZp
bml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5
cGU+LCAxPigpKTsKKyAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOwogICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIGJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYgZnVuY3Rpb25EZWZpbml0aW9uKQogewotICAgIGlmIChtX3R5cGVzLmZpbmQoZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQotICAgICAgICB8fCBtX3ZhcmlhYmxl
cy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQor
ICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFtZVNwYWNl
KTsKKyAgICBhdXRvIHN0YW5kYXJkTGlicmFyeUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOworICAgIGlmIChtX3R5cGVzW2luZGV4
XS5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdHlwZXNbaW5kZXhdLmVuZCgp
CisgICAgICAgIHx8IG1fdHlwZXNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmZpbmQoZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKSkgIT0gbV90eXBlc1tzdGFuZGFyZExpYnJhcnlJbmRleF0uZW5kKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFk
ZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICBmdW5jdGlvbkRlZmluaXRp
b24uc2V0TmFtZVNwYWNlKG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byByZXN1bHQgPSBt
X2Z1bmN0aW9uc1tpbmRleF0uYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOwog
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbik7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiB7Ci0gICAgaWYg
KG1fdHlwZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90eXBl
cy5lbmQoKQotICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICBhdXRvIGluZGV4ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byBzdGFuZGFy
ZExpYnJhcnlJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBU1Q6Ok5hbWVTcGFjZTo6U3Rh
bmRhcmRMaWJyYXJ5KTsKKyAgICBpZiAobV90eXBlc1tpbmRleF0uZmluZChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlc1tpbmRleF0uZW5kKCkKKyAgICAgICAgfHwg
bV90eXBlc1tzdGFuZGFyZExpYnJhcnlJbmRleF0uZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSkgIT0gbV90eXBlc1tzdGFuZGFyZExpYnJhcnlJbmRleF0uZW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4oKSk7CisgICAgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5zZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1fZnVuY3Rpb25zW2luZGV4XS5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+KCkpOwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIE5hbWVDb250
ZXh0OjphZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bikKIHsKLSAgICBpZiAobV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpKSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQotICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgIGF1
dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFtZVNwYWNlKTsKKyAg
ICBhdXRvIHN0YW5kYXJkTGlicmFyeUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6
TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOworICAgIGlmIChtX2Z1bmN0aW9uc1tpbmRleF0u
ZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1bmN0aW9uc1tpbmRleF0u
ZW5kKCkKKyAgICAgICAgfHwgbV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmZpbmQo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJy
YXJ5SW5kZXhdLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byByZXN1bHQg
PSBtX3R5cGVzLmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5zZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOwogICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMTIsMzIgKzEyNCw2NCBAQCBib29sIE5hbWVDb250ZXh0
OjphZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQogewog
ICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKS5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgaWYgKGV4aXN0cyh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSkpCisg
ICAgaWYgKGxvY2FsRXhpc3RzKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGF1dG8gcmVzdWx0ID0gbV92YXJpYWJsZXMuYWRkKFN0cmluZyh2
YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSksICZ2YXJpYWJsZURlY2xhcmF0aW9uKTsKICAgICBy
ZXR1cm4gcmVzdWx0LmlzTmV3RW50cnk7CiB9CiAKLVZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4qIE5hbWVDb250ZXh0OjpnZXRUeXBlcyhjb25zdCBTdHJp
bmcmIG5hbWUpCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4s
IDE+IE5hbWVDb250ZXh0OjpnZXRUeXBlcyhjb25zdCBTdHJpbmcmIG5hbWUsIEFTVDo6TmFtZVNw
YWNlIGZyb21OYW1lc3BhY2UpCiB7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZXMuZmluZChu
YW1lKTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV90eXBlcy5lbmQoKSkgewotICAgICAgICBpZiAo
bV9wYXJlbnQpCi0gICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFR5cGVzKG5hbWUpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBOYW1lZCB0eXBlcyBjYW4gb25seSBiZSBk
ZWNsYXJlZCBpbiB0aGUgZ2xvYmFsIG5hbWUgY29udGV4dC4KKyAgICBpZiAobV9wYXJlbnQpCisg
ICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0VHlwZXMobmFtZSwgZnJvbU5hbWVzcGFjZSk7CisK
KyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+IHJl
c3VsdDsKKworICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21O
YW1lc3BhY2UpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVzW2luZGV4XS5maW5kKG5hbWUp
OworICAgIGlmIChpdGVyYXRvciAhPSBtX3R5cGVzW2luZGV4XS5lbmQoKSkgeworICAgICAgICBm
b3IgKGF1dG8gdHlwZSA6IGl0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQodHlwZSk7CiAgICAgfQotICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworCisgICAgaWYg
KGZyb21OYW1lc3BhY2UgIT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSkgeworICAg
ICAgICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRh
cmRMaWJyYXJ5KTsKKyAgICAgICAgaXRlcmF0b3IgPSBtX3R5cGVzW2luZGV4XS5maW5kKG5hbWUp
OworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV90eXBlc1tpbmRleF0uZW5kKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byB0eXBlIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQodHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1WZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiogTmFtZUNvbnRleHQ6OmdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmIG5h
bWUpCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24+LCAxPiBOYW1lQ29udGV4dDo6Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYgbmFtZSwgQVNU
OjpOYW1lU3BhY2UgZnJvbU5hbWVzcGFjZSkKIHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5j
dGlvbnMuZmluZChuYW1lKTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9mdW5jdGlvbnMuZW5kKCkp
IHsKLSAgICAgICAgaWYgKG1fcGFyZW50KQotICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5n
ZXRGdW5jdGlvbnMobmFtZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIEZ1bmN0
aW9ucyBjYW4gb25seSBiZSBkZWNsYXJlZCBpbiB0aGUgZ2xvYmFsIG5hbWUgY29udGV4dC4KKyAg
ICBpZiAobV9wYXJlbnQpCisgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0RnVuY3Rpb25zKG5h
bWUsIGZyb21OYW1lc3BhY2UpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gcmVzdWx0OworCisgICAgdW5zaWduZWQgaW5k
ZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbU5hbWVzcGFjZSk7CisgICAgYXV0byBpdGVy
YXRvciA9IG1fZnVuY3Rpb25zW2luZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciAh
PSBtX2Z1bmN0aW9uc1tpbmRleF0uZW5kKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHR5cGUgOiBp
dGVyYXRvci0+dmFsdWUpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHR5cGUpOworICAgIH0K
KworICAgIGlmIChmcm9tTmFtZXNwYWNlICE9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJh
cnkpIHsKKyAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQVNUOjpOYW1lU3Bh
Y2U6OlN0YW5kYXJkTGlicmFyeSk7CisgICAgICAgIGl0ZXJhdG9yID0gbV9mdW5jdGlvbnNbaW5k
ZXhdLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uc1tpbmRl
eF0uZW5kKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byB0eXBlIDogaXRlcmF0b3ItPnZhbHVl
KQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7CisgICAgICAgIH0KICAgICB9
Ci0gICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIE5hbWVDb250ZXh0OjpnZXRWYXJpYWJsZShjb25z
dCBTdHJpbmcmIG5hbWUpCkBAIC0xNTEsMTEgKzE5NSwyMSBAQCBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24qIE5hbWVDb250ZXh0OjpnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAg
cmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKIH0KIAotYm9vbCBOYW1lQ29udGV4dDo6ZXhpc3RzKFN0
cmluZyYgbmFtZSkKK2Jvb2wgTmFtZUNvbnRleHQ6Omdsb2JhbEV4aXN0cyhTdHJpbmcmIG5hbWUp
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgYXV0byBpbmRleCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gc3RhbmRhcmRM
aWJyYXJ5SW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQVNUOjpOYW1lU3BhY2U6OlN0YW5k
YXJkTGlicmFyeSk7CisgICAgcmV0dXJuIG1fdHlwZXNbaW5kZXhdLmZpbmQobmFtZSkgIT0gbV90
eXBlc1tpbmRleF0uZW5kKCkKKyAgICAgICAgfHwgbV9mdW5jdGlvbnNbaW5kZXhdLmZpbmQobmFt
ZSkgIT0gbV9mdW5jdGlvbnNbaW5kZXhdLmVuZCgpCisgICAgICAgIHx8IG1fdHlwZXNbc3RhbmRh
cmRMaWJyYXJ5SW5kZXhdLmZpbmQobmFtZSkgIT0gbV90eXBlc1tzdGFuZGFyZExpYnJhcnlJbmRl
eF0uZW5kKCkKKyAgICAgICAgfHwgbV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmZp
bmQobmFtZSkgIT0gbV9mdW5jdGlvbnNbc3RhbmRhcmRMaWJyYXJ5SW5kZXhdLmVuZCgpOworfQor
Citib29sIE5hbWVDb250ZXh0Ojpsb2NhbEV4aXN0cyhTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fdHlwZXMuZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgpCi0gICAgICAgIHx8
IG1fZnVuY3Rpb25zLmZpbmQobmFtZSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKLSAgICAgICAgfHwg
bV92YXJpYWJsZXMuZmluZChuYW1lKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKTsKKyAgICBBU1NFUlQo
bV9wYXJlbnQpOworICAgIHJldHVybiBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpICE9IG1fdmFyaWFi
bGVzLmVuZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCmluZGV4IGEw
NDg3OGFlN2U5ZjFkODNlNWQ1OTJjMmZkNzUyYmVkYzkwZmE5Y2IuLjRkNGEwMmI1ZjM5NjMzMjJl
ZjMwOTdkNTI1OTVkOGY1ODYwNDQxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKQEAgLTI3LDYgKzI3LDggQEAK
IAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTE5hbWVTcGFjZS5oIgorCiAj
aW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTU0LDYgKzU2LDEyIEBAIGNsYXNzIE5hbWVDb250ZXh0IHsKIHB1
YmxpYzoKICAgICBOYW1lQ29udGV4dChOYW1lQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7CiAK
KyAgICB2b2lkIHNldEN1cnJlbnROYW1lU3BhY2UoQVNUOjpOYW1lU3BhY2UgY3VycmVudE5hbWVT
cGFjZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9wYXJlbnQpOworICAgICAgICBtX2N1cnJl
bnROYW1lU3BhY2UgPSBjdXJyZW50TmFtZVNwYWNlOworICAgIH0KKwogICAgIGJvb2wgYWRkKEFT
VDo6VHlwZURlZmluaXRpb24mKTsKICAgICBib29sIGFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24mKTsKICAgICBib29sIGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOwpAQCAtNjIs
MTcgKzcwLDE5IEBAIHB1YmxpYzoKICAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiYpOwogICAgIGJvb2wgYWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOwogCi0gICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogZ2V0VHlw
ZXMoY29uc3QgU3RyaW5nJik7Ci0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmKTsK
KyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+IGdl
dFR5cGVzKGNvbnN0IFN0cmluZyYsIEFTVDo6TmFtZVNwYWNlIGZyb21OYW1lc3BhY2UpOworICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+IGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmLCBBU1Q6Ok5hbWVTcGFjZSBmcm9tTmFtZXNw
YWNlKTsKICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGdldFZhcmlhYmxlKGNvbnN0IFN0
cmluZyYpOwogCiBwcml2YXRlOgotICAgIGJvb2wgZXhpc3RzKFN0cmluZyYpOworICAgIGJvb2wg
Z2xvYmFsRXhpc3RzKFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgYm9vbCBsb2NhbEV4aXN0cyhT
dHJpbmcmIG5hbWUpIGNvbnN0OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXM7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+PiBtX2Z1bmN0aW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPj4gbV90eXBlc1szXTsKKyAg
ICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4+IG1fZnVuY3Rpb25zWzNdOwogICAgIEhhc2hNYXA8U3RyaW5n
LCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qPiBtX3ZhcmlhYmxlczsKICAgICBOYW1lQ29udGV4
dCogbV9wYXJlbnQ7CisgICAgQVNUOjpOYW1lU3BhY2UgbV9jdXJyZW50TmFtZVNwYWNlIHsgQVNU
OjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3Bw
CmluZGV4IDY3YjFjOWI2ZDg2MDUyNDdmYzEyYzRiMWU1M2YzMjk1YmZiOTQ0NzMuLjI3MWViZDEy
NmEzMTA3ODliNGM4Y2Y3MGRmODQ1NzlmYTFmODI0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAg
LTU3LDYgKzU3LDcgQEAgTmFtZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIoTmFtZUNvbnRleHQmIG5h
bWVDb250ZXh0KQogTmFtZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIoTmFtZVJlc29sdmVyJiBwYXJl
bnRSZXNvbHZlciwgTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQogICAgIDogbV9uYW1lQ29udGV4
dChuYW1lQ29udGV4dCkKICAgICAsIG1fcGFyZW50TmFtZVJlc29sdmVyKCZwYXJlbnRSZXNvbHZl
cikKKyAgICAsIG1fY3VycmVudE5hbWVTcGFjZShwYXJlbnRSZXNvbHZlci5tX2N1cnJlbnROYW1l
U3BhY2UpCiB7CiB9CiAKQEAgLTgwLDE0ICs4MSwxMCBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlz
aXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQogICAgIGlmICh0eXBlUmVmZXJl
bmNlLm1heWJlUmVzb2x2ZWRUeXBlKCkpIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYxIFNob3VsZG4ndCB3ZSBrbm93IGJ5IG5vdyB3aGV0aGVy
IHRoZSB0eXBlIGhhcyBiZWVuIHJlc29sdmVkIG9yIG5vdD8KICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byogY2FuZGlkYXRlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXModHlwZVJlZmVyZW5j
ZS5uYW1lKCkpOwotICAgIGlmIChjYW5kaWRhdGVzID09IG51bGxwdHIpIHsKLSAgICAgICAgc2V0
RXJyb3IoRXJyb3IoIkNhbm5vdCBmaW5kIHR5cGUgcmVmZXJlbmNlLiIsIHR5cGVSZWZlcmVuY2Uu
Y29kZUxvY2F0aW9uKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmb3IgKGF1dG8m
IGNhbmRpZGF0ZSA6ICpjYW5kaWRhdGVzKQorICAgIGF1dG8gY2FuZGlkYXRlcyA9IG1fbmFtZUNv
bnRleHQuZ2V0VHlwZXModHlwZVJlZmVyZW5jZS5uYW1lKCksIG1fY3VycmVudE5hbWVTcGFjZSk7
CisgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKQogICAgICAgICBWaXNpdG9y
Ojp2aXNpdChjYW5kaWRhdGUpOwotICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29sdmVUeXBlT3Zl
cmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkpCisg
ICAgaWYgKGF1dG8gcmVzdWx0ID0gcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoY2FuZGlkYXRlcywg
dHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpKQogICAgICAgICB0eXBlUmVmZXJlbmNlLnNl
dFJlc29sdmVkVHlwZSgqcmVzdWx0KTsKICAgICBlbHNlIHsKICAgICAgICAgc2V0RXJyb3IoRXJy
b3IoIkNhbm5vdCByZXNvbHZlIHR5cGUgYXJndW1lbnRzLiIsIHR5cGVSZWZlcmVuY2UuY29kZUxv
Y2F0aW9uKCkpKTsKQEAgLTE5Miw5ICsxODksOSBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQo
QVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQogICAgICAgICBhdXRvJiB2YXJpYWJs
ZVJlZmVyZW5jZSA9IGRvd25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Np
b24uYmFzZSgpKTsKICAgICAgICAgaWYgKCFtX25hbWVDb250ZXh0LmdldFZhcmlhYmxlKHZhcmlh
YmxlUmVmZXJlbmNlLm5hbWUoKSkpIHsKICAgICAgICAgICAgIGF1dG8gYmFzZU5hbWUgPSB2YXJp
YWJsZVJlZmVyZW5jZS5uYW1lKCk7Ci0gICAgICAgICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5
cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhiYXNlTmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+c2l6ZSgpID09IDEpOwotICAgICAgICAgICAgICAg
IEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAg
ICAgIGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoYmFzZU5h
bWUsIG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgICAgICAgICBpZiAoZW51bWVyYXRpb25UeXBl
cy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0g
ZW51bWVyYXRpb25UeXBlc1swXTsKICAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+KHR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWVt
YmVyTmFtZSA9IGRvdEV4cHJlc3Npb24uZmllbGROYW1lKCk7CkBAIC0yMDYsNyArMjAzLDggQEAg
dm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lv
bikKICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIk5vIGVudW0gbWVtYmVyIG1h
dGNoZXMgdGhlIHVzZWQgbmFtZS4iLCBkb3RFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRp
b25UeXBlcy5pc0VtcHR5KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTgsOSArMjE2LDEw
IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsCiAgICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0
byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhlbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwubGVmdCgpKSkgewotICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+
c2l6ZSgpID09IDEpOwotICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRp
b25UeXBlcylbMF07CisgICAgYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5n
ZXRUeXBlcyhlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwubGVmdCgpLCBtX2N1cnJlbnROYW1lU3Bh
Y2UpOworICAgIGlmIChlbnVtZXJhdGlvblR5cGVzLnNpemUoKSA9PSAxKSB7CisgICAgICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MzM1IFRo
aXMgbmVlZHMgdG8gd29yayB3aXRoIHR5cGVkZWYnZWQgZW51bXMuCisgICAgICAgIEFTVDo6TmFt
ZWRUeXBlJiB0eXBlID0gZW51bWVyYXRpb25UeXBlc1swXTsKICAgICAgICAgaWYgKGlzPEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uPih0eXBlKSkgewogICAgICAgICAgICAgQVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uPih0eXBlKTsKICAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIg
PSBlbnVtZXJhdGlvbkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5yaWdodCgpKSkgewpAQCAtMjI5LDcgKzIyOCw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2
aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBzZXRFcnJv
cihFcnJvcigiQ2Fubm90IHJlc29sdmUgZW51bWVyYXRpb24gbWVtYmVyIGxpdGVyYWwuIiwgZW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLmNvZGVMb2NhdGlvbigpKSk7CiB9CiAKQEAgLTI0NSwyMSAr
MjQ0LDI1IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpCiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4g
cmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVS
ZXNvbHZlcikKIHsKICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBl
RGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudE5hbWVTcGFj
ZSh0eXBlRGVmaW5pdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZl
ci5jaGVja0Vycm9yQW5kVmlzaXQodHlwZURlZmluaXRpb24pOwogICAgICAgICBpZiAobmFtZVJl
c29sdmVyLmhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJlc3Vs
dCgpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFt
LnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJl
bnROYW1lU3BhY2Uoc3RydWN0dXJlRGVmaW5pdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAg
ICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7
CiAgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKICAgICAgICAgICAgIHJldHVy
biBuYW1lUmVzb2x2ZXIucmVzdWx0KCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgZW51bWVyYXRp
b25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAg
ICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnROYW1lU3BhY2UoZW51bWVyYXRpb25EZWZpbml0aW9u
LmdldCgpLm5hbWVTcGFjZSgpKTsKICAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRW
aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhh
c0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwogICAg
IH0KICAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZl
VHlwZURlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50TmFt
ZVNwYWNlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAg
IG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsK
ICAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQogICAgICAgICAgICAgcmV0dXJu
IG5hbWVSZXNvbHZlci5yZXN1bHQoKTsKQEAgLTI3MCwxMSArMjczLDEzIEBAIEV4cGVjdGVkPHZv
aWQsIEVycm9yPiByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNv
bHZlciYgbmFtZVJlCiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZVR5cGVOYW1lc0luRnVu
Y3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQogewog
ICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmlu
aXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnROYW1lU3BhY2UoZnVu
Y3Rpb25EZWZpbml0aW9uLmdldCgpLm5hbWVTcGFjZSgpKTsKICAgICAgICAgbmFtZVJlc29sdmVy
LmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwogICAgICAgICBpZiAobmFt
ZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJl
c3VsdCgpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
OiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJl
c29sdmVyLnNldEN1cnJlbnROYW1lU3BhY2UobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5nZXQo
KS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CiAgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFz
RXJyb3IoKSkKICAgICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2ZXIucmVzdWx0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNv
bHZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVz
b2x2ZXIuaAppbmRleCA2NThjMzVmY2RiNTcyZTI0ZDU4MjE3MWYxMWU4YzZhMmJhMDMyZTczLi5h
NzkyNGUwNWZmNmFhMGFkZjY5YmQzYzY4MjJhM2NiZWZkN2MzMTRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgK
QEAgLTQ2LDYgKzQ2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+TmFtZVJlc29sdmVyKCk7
CiAKKyAgICB2b2lkIHNldEN1cnJlbnROYW1lU3BhY2UoQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNl
KSB7IG1fY3VycmVudE5hbWVTcGFjZSA9IG5hbWVTcGFjZTsgfQorCiBwcml2YXRlOgogICAgIHZv
aWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZp
c2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlOwpAQCAtNjMsNiAr
NjUsNyBAQCBwcml2YXRlOgogICAgIE5hbWVDb250ZXh0JiBtX25hbWVDb250ZXh0OwogICAgIEhh
c2hTZXQ8QVNUOjpUeXBlUmVmZXJlbmNlKj4gbV90eXBlUmVmZXJlbmNlczsKICAgICBOYW1lUmVz
b2x2ZXIqIG1fcGFyZW50TmFtZVJlc29sdmVyIHsgbnVsbHB0ciB9OworICAgIEFTVDo6TmFtZVNw
YWNlIG1fY3VycmVudE5hbWVTcGFjZSB7IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkg
fTsKIH07CiAKIEV4cGVjdGVkPHZvaWQsIEVycm9yPiByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dy
YW0mLCBOYW1lUmVzb2x2ZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAppbmRleCAwMTYxMTRhNjEwZTExMDBlZmU2OTcyY2Ey
YTIzNTMyN2MxNTJlN2FiLi5jZjViNDZmZDEyYzM3YzVlM2QwY2JjNmE1MzI0NTQzNGUyMjJhNTVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwCkBAIC00MSwyNCArNDEsMjMgQEAgbmFtZXNwYWNlIFdITFNMIHsKICNkZWZpbmUg
UEFSU0UobmFtZSwgZWxlbWVudCwgLi4uKSBcCiAgICAgYXV0byBuYW1lID0gcGFyc2UjI2VsZW1l
bnQoX19WQV9BUkdTX18pOyBcCiAgICAgaWYgKCFuYW1lKSBcCi0gICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOyBcCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChuYW1lLmVycm9yKCkpOyBcCiAKICNkZWZpbmUgQ09OU1VNRV9UWVBFKG5hbWUsIHR5cGUp
IFwKICAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZShUb2tlbjo6VHlwZTo6dHlwZSk7IFwKICAg
ICBpZiAoIW5hbWUpIFwKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChuYW1lLmVycm9yKCkpOwogCiAj
ZGVmaW5lIFBFRUsobmFtZSkgXAogICAgIGF1dG8gbmFtZSA9IHBlZWsoKTsgXAogICAgIGlmICgh
bmFtZSkgXAotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG5hbWUuZXJyb3IoKSk7CiAKICNkZWZpbmUg
UEVFS19GVVJUSEVSKG5hbWUpIFwKICAgICBhdXRvIG5hbWUgPSBwZWVrRnVydGhlcigpOyBcCiAg
ICAgaWYgKCFuYW1lKSBcCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVy
cm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsKIAot
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2ODIg
UmV0dXJuIGEgYmV0dGVyIGVycm9yIGNvZGUgZnJvbSB0aGlzLCBhbmQgcmVwb3J0IGl0IHRvIEph
dmFTY3JpcHQuCiBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5nVmll
dyBzdHJpbmdWaWV3LCBQYXJzaW5nTW9kZSBtb2RlKSAtPiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4K
IHsKICAgICBtX2xleGVyID0gTGV4ZXIoc3RyaW5nVmlldyk7CkBAIC05NCw3ICs5Myw4IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcs
IFBhcnNpbmdNb2RlIG1vZGUpIC0+CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpOYXRpdmU6IHsKLSAgICAgICAgICAgIEFTU0VSVCht
X21vZGUgPT0gUGFyc2luZ01vZGU6OlN0YW5kYXJkTGlicmFyeSk7CisgICAgICAgICAgICBpZiAo
bV9tb2RlICE9IFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhaWwobWFrZVN0cmluZygiJ25hdGl2ZScgY2FuJ3QgZXhpc3Qgb3V0c2lkZSBvZiB0
aGUgc3RhbmRhcmQgbGlicmFyeS4iKSk7CiAgICAgICAgICAgICBhdXRvIGZ1cnRoZXJUb2tlbiA9
IHBlZWtGdXJ0aGVyKCk7CiAgICAgICAgICAgICBpZiAoIWZ1cnRoZXJUb2tlbikKICAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKaW5kZXggNzNmNDgzMjAzYTA0YTQ4MzNjMTU0NTM4
MGRiMWU4NWRjMmIyYTQ4MC4uOTc2MzNmYWZmZTgyMzA2ZjBmNmEwNTRmYTVjZTk3Y2U3ZjZiNzZj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXBhcmUuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiV0hMU0xMaXRlcmFsVHlw
ZUNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIKICNp
bmNsdWRlICJXSExTTFBhcnNlci5oIgogI2luY2x1ZGUgIldITFNMUHJlc2VydmVWYXJpYWJsZUxp
ZmV0aW1lcy5oIgogI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgpAQCAtMTI0LDEzICsxMjUsMzMg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0KIHByaXZhdGU6CiAgICAgU3RyaW5nIG1f
cGhhc2VOYW1lOwogICAgIFBoYXNlVGltZXMmIG1fcGhhc2VUaW1lczsKICAgICBNb25vdG9uaWNU
aW1lIG1fc3RhcnQ7CiB9OwogCitzdHJ1Y3QgU2hhZGVyTW9kdWxlIHsKKyAgICBTaGFkZXJNb2R1
bGUoY29uc3QgU3RyaW5nJiB3aGxzbFNvdXJjZSkKKyAgICAgICAgOiB3aGxzbFNvdXJjZSh3aGxz
bFNvdXJjZSkKKyAgICB7CisgICAgfQorCisgICAgU3RyaW5nIHdobHNsU291cmNlOworfTsKKwor
T3duZWRTaGFkZXJNb2R1bGUgY3JlYXRlU2hhZGVyTW9kdWxlKGNvbnN0IFN0cmluZyYgd2hsc2xT
b3VyY2UpCit7CisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDA4NzIgV2Ugc2hvdWxkIGNvbnNpZGVyIG1vdmluZyBhcyBtdWNoIHdvcmsgZnJv
bSBwcmVwYXJlKCkgaW50byBoZXJlIGFzIHBvc3NpYmxlLgorICAgIHJldHVybiBPd25lZFNoYWRl
ck1vZHVsZShuZXcgU2hhZGVyTW9kdWxlKHdobHNsU291cmNlKSk7Cit9CisKK3ZvaWQgU2hhZGVy
TW9kdWxlRGVsZXRlcjo6b3BlcmF0b3IoKShTaGFkZXJNb2R1bGUqIG1vZHVsZSkKK3sKKyAgICBk
ZWxldGUgbW9kdWxlOworfQorCisvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9y
U3RyaW5nKCkKICNkZWZpbmUgQ0hFQ0tfUEFTUyhwYXNzLCAuLi4pIFwKICAgICBkbyB7IFwKICAg
ICAgICAgZHVtcEFTVEJldHdlZW5FYWNoUGFzc0lmTmVlZGVkKHByb2dyYW0sICJBU1QgYmVmb3Jl
ICIgIyBwYXNzKTsgXApAQCAtMTM4LDggKzE1OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8g
cmVzdWx0ID0gcGFzcyhfX1ZBX0FSR1NfXyk7IFwKICAgICAgICAgaWYgKCFyZXN1bHQpIHsgXAog
ICAgICAgICAgICAgaWYgKGR1bXBQYXNzRmFpbHVyZSkgXAotICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiZmFpbGVkIHBhc3M6ICIgIyBwYXNzLCBMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3Vy
Y2UsIHJlc3VsdC5lcnJvcigpKSk7IFwKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIHJlc3VsdC5lcnJvcigpKSk7IFwKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCBwYXNzOiAiICMgcGFzcywgTGV4ZXI6OmVy
cm9yU3RyaW5nKFN0cmluZygpLCByZXN1bHQuZXJyb3IoKSkpOyBcCisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZygpLCByZXN1bHQuZXJy
b3IoKSkpOyBcCiAgICAgICAgIH0gXAogICAgIH0gd2hpbGUgKDApCiAKQEAgLTE1MCwxOSArMTcx
LDM3IEBAIHByaXZhdGU6CiAgICAgICAgIHBhc3MoX19WQV9BUkdTX18pOyBcCiAgICAgfSB3aGls
ZSAoMCkKIAotc3RhdGljIEV4cGVjdGVkPFByb2dyYW0sIFN0cmluZz4gcHJlcGFyZVNoYXJlZChQ
aGFzZVRpbWVzJiBwaGFzZVRpbWVzLCBTdHJpbmcmIHdobHNsU291cmNlKQorc3RhdGljIEV4cGVj
dGVkPFByb2dyYW0sIFN0cmluZz4gcHJlcGFyZVNoYXJlZChQaGFzZVRpbWVzJiBwaGFzZVRpbWVz
LCBjb25zdCBTdHJpbmcmIHdobHNsU291cmNlMSwgY29uc3QgU3RyaW5nKiB3aGxzbFNvdXJjZTIg
PSBudWxscHRyKQogewogICAgIFByb2dyYW0gcHJvZ3JhbTsKICAgICBQYXJzZXIgcGFyc2VyOwog
CiAgICAgeworICAgICAgICBwcm9ncmFtLm5hbWVDb250ZXh0KCkuc2V0Q3VycmVudE5hbWVTcGFj
ZShBU1Q6Ok5hbWVTcGFjZTo6TmFtZVNwYWNlMSk7CisKICAgICAgICAgUGhhc2VUaW1lciBwaGFz
ZVRpbWVyKCJwYXJzZSIsIHBoYXNlVGltZXMpOwotICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0g
cGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNlLCBQYXJzaW5nTW9kZTo6VXNlcik7Cisg
ICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgd2hsc2xTb3Vy
Y2UxLCBQYXJzaW5nTW9kZTo6VXNlcik7CiAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKLSAg
ICAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJmYWlsZWQgdG8gcGFyc2UgdGhlIHByb2dyYW06ICIsIExleGVyOjplcnJvclN0cmluZyh3aGxz
bFNvdXJjZSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyh3aGxzbFNvdXJjZSwgcGFyc2VSZXN1bHQuZXJy
b3IoKSkpOworICAgICAgICAgICAgaWYgKGR1bXBQYXNzRmFpbHVyZSkgeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCBMZXhl
cjo6ZXJyb3JTdHJpbmcoU3RyaW5nKCksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JT
dHJpbmcoKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0
cmluZyhTdHJpbmcoKSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkpOworICAgICAgICB9CisgICAgICAg
IGlmICh3aGxzbFNvdXJjZTIpIHsKKyAgICAgICAgICAgIHByb2dyYW0ubmFtZUNvbnRleHQoKS5z
ZXRDdXJyZW50TmFtZVNwYWNlKEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UyKTsKKyAgICAgICAg
ICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgKndobHNsU291cmNl
MiwgUGFyc2luZ01vZGU6OlVzZXIpOworICAgICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewor
ICAgICAgICAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZSBmaXJzdCBhcmd1bWVudCB0byBlcnJvclN0cmluZygpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCBM
ZXhlcjo6ZXJyb3JTdHJpbmcoU3RyaW5nKCksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBmaXJzdCBhcmd1bWVu
dCB0byBlcnJvclN0cmluZygpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KExleGVyOjplcnJvclN0cmluZyhTdHJpbmcoKSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkpOworICAg
ICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHByb2dyYW0ubmFtZUNvbnRleHQoKS5zZXRD
dXJyZW50TmFtZVNwYWNlKEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOwogICAgIH0K
IAogICAgIHsKQEAgLTIwMCwyMyArMjM5LDMxIEBAIHN0YXRpYyBFeHBlY3RlZDxQcm9ncmFtLCBT
dHJpbmc+IHByZXBhcmVTaGFyZWQoUGhhc2VUaW1lcyYgcGhhc2VUaW1lcywgU3RyaW5nJiB3CiAg
ICAgcmV0dXJuIHByb2dyYW07CiB9CiAKLUV4cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1bHQsIFN0
cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0
b3ImIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcikKK0V4cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1
bHQsIFN0cmluZz4gcHJlcGFyZShjb25zdCBTaGFkZXJNb2R1bGUmIHZlcnRleFNoYWRlck1vZHVs
ZSwgY29uc3QgU2hhZGVyTW9kdWxlKiBmcmFnbWVudFNoYWRlck1vZHVsZSwgUmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpCiB7CiAgICAgUGhhc2VUaW1l
cyBwaGFzZVRpbWVzOwogICAgIE1ldGFsOjpSZW5kZXJNZXRhbENvZGUgZ2VuZXJhdGVkQ29kZTsK
IAogICAgIHsKICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJwcmVwYXJlIHRvdGFsIiwg
cGhhc2VUaW1lcyk7Ci0gICAgICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQocGhhc2VU
aW1lcywgd2hsc2xTb3VyY2UpOworICAgICAgICBjb25zdCBTdHJpbmcqIHNlY29uZFNoYWRlciA9
IG51bGxwdHI7CisgICAgICAgIGJvb2wgZGlzdGluY3RGcmFnbWVudFNoYWRlciA9IGZhbHNlOwor
ICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXJNb2R1bGUgJiYgZnJhZ21lbnRTaGFkZXJNb2R1bGUg
IT0gJnZlcnRleFNoYWRlck1vZHVsZSkgeworICAgICAgICAgICAgc2Vjb25kU2hhZGVyID0gJmZy
YWdtZW50U2hhZGVyTW9kdWxlLT53aGxzbFNvdXJjZTsKKyAgICAgICAgICAgIGRpc3RpbmN0RnJh
Z21lbnRTaGFkZXIgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGF1dG8gcHJvZ3JhbSA9IHBy
ZXBhcmVTaGFyZWQocGhhc2VUaW1lcywgdmVydGV4U2hhZGVyTW9kdWxlLndobHNsU291cmNlLCBz
ZWNvbmRTaGFkZXIpOwogICAgICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQocHJvZ3JhbS5lcnJvcigpKTsKIAogICAgICAgICBPcHRpb25hbDxNYXRj
aGVkUmVuZGVyU2VtYW50aWNzPiBtYXRjaGVkU2VtYW50aWNzOwogICAgICAgICB7CiAgICAgICAg
ICAgICBQaGFzZVRpbWVyIHBoYXNlVGltZXIoIm1hdGNoU2VtYW50aWNzIiwgcGhhc2VUaW1lcyk7
Ci0gICAgICAgICAgICBtYXRjaGVkU2VtYW50aWNzID0gbWF0Y2hTZW1hbnRpY3MoKnByb2dyYW0s
IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoZWRTZW1h
bnRpY3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJv
clN0cmluZyh3aGxzbFNvdXJjZSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBzZW1hbnRpY3MiX3N0
cikpKTsKKyAgICAgICAgICAgIG1hdGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJv
Z3JhbSwgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLCBkaXN0aW5jdEZyYWdtZW50U2hhZGVyKTsK
KyAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcoU3RyaW5nKCksIEVy
cm9yKCJDb3VsZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9zdHIpKSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAogICAgICAgICB7CkBAIC0yMzQsNyArMjgxLDcgQEAgRXhwZWN0ZWQ8UmVuZGVy
UHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJlbmRl
clBpcGVsaW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FeHBlY3RlZDxDb21wdXRlUHJlcGFy
ZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpCitFeHBlY3RlZDxDb21w
dXRlUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKGNvbnN0IFNoYWRlck1vZHVsZSYgc2hh
ZGVyTW9kdWxlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxpbmVEZXNj
cmlwdG9yKQogewogICAgIFBoYXNlVGltZXMgcGhhc2VUaW1lczsKICAgICBNZXRhbDo6Q29tcHV0
ZU1ldGFsQ29kZSBnZW5lcmF0ZWRDb2RlOwpAQCAtMjQyLDcgKzI4OSw3IEBAIEV4cGVjdGVkPENv
bXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwg
Q29tcHV0ZVBpcGVsCiAKICAgICB7CiAgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigicHJl
cGFyZSB0b3RhbCIsIHBoYXNlVGltZXMpOwotICAgICAgICBhdXRvIHByb2dyYW0gPSBwcmVwYXJl
U2hhcmVkKHBoYXNlVGltZXMsIHdobHNsU291cmNlKTsKKyAgICAgICAgYXV0byBwcm9ncmFtID0g
cHJlcGFyZVNoYXJlZChwaGFzZVRpbWVzLCBzaGFkZXJNb2R1bGUud2hsc2xTb3VyY2UpOwogICAg
ICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocHJv
Z3JhbS5lcnJvcigpKTsKIApAQCAtMjUwLDE1ICsyOTcsMjAgQEAgRXhwZWN0ZWQ8Q29tcHV0ZVBy
ZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRl
UGlwZWwKICAgICAgICAgewogICAgICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJtYXRj
aFNlbWFudGljcyIsIHBoYXNlVGltZXMpOwogICAgICAgICAgICAgbWF0Y2hlZFNlbWFudGljcyA9
IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFtLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKLSAg
ICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykKLSAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCBFcnJvcigiQ291
bGQgbm90IG1hdGNoIHNlbWFudGljcyJfc3RyKSkpOworICAgICAgICAgICAgaWYgKCFtYXRjaGVk
U2VtYW50aWNzKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBmaXJzdCBhcmd1bWVu
dCB0byBlcnJvclN0cmluZygpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KExleGVyOjplcnJvclN0cmluZyhTdHJpbmcoKSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBzZW1h
bnRpY3MiX3N0cikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAg
fQogCiAgICAgICAgIHsKICAgICAgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigiY29tcHV0
ZURpbWVuc2lvbnMiLCBwaGFzZVRpbWVzKTsKICAgICAgICAgICAgIGNvbXB1dGVEaW1lbnNpb25z
ID0gV0hMU0w6OmNvbXB1dGVEaW1lbnNpb25zKCpwcm9ncmFtLCAqbWF0Y2hlZFNlbWFudGljcy0+
c2hhZGVyKTsKLSAgICAgICAgICAgIGlmICghY29tcHV0ZURpbWVuc2lvbnMpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyh3aGxzbFNvdXJj
ZSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBjb21wdXRlIGRpbWVuc2lvbnMiX3N0cikpKTsKKyAg
ICAgICAgICAgIGlmICghY29tcHV0ZURpbWVuc2lvbnMpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yU3RyaW5nKCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZygpLCBFcnJv
cigiQ291bGQgbm90IG1hdGNoIGNvbXB1dGUgZGltZW5zaW9ucyJfc3RyKSkpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAppbmRleCA1ZGE3N2Y1ZjJlZGRiOTUwOTc0
ODM0N2U5NGNhN2I1OWNlYjRhNWI0Li5lZmQ2NWE3MDU3NWY1OWFjNjRkYjI1YTRmMjc2NmQzN2M0
MTJhYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByZXBhcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByZXBhcmUuaApAQCAtMzksMTIgKzM5LDIwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIGNv
bnN0ZXhwciBib29sIGR1bXBNZXRhbENvbXBpbGVUaW1lcyA9IGZhbHNlOwogCisvLyBIaWRlIHRo
ZSBjb250ZW50cyBvZiB0aGUgU2hhZGVyTW9kdWxlLiBDbGllbnRzIG9mIHRoZSBjb21waWxlciBz
aG91bGRuJ3QgY2FyZSB3aGF0J3MgaW5zaWRlIGl0Lgorc3RydWN0IFNoYWRlck1vZHVsZTsKK3N0
cnVjdCBTaGFkZXJNb2R1bGVEZWxldGVyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoU2hhZGVyTW9k
dWxlKik7Cit9OwordXNpbmcgT3duZWRTaGFkZXJNb2R1bGUgPSBzdGQ6OnVuaXF1ZV9wdHI8U2hh
ZGVyTW9kdWxlLCBTaGFkZXJNb2R1bGVEZWxldGVyPjsKK093bmVkU2hhZGVyTW9kdWxlIGNyZWF0
ZVNoYWRlck1vZHVsZShjb25zdCBTdHJpbmcmIHdobHNsU291cmNlKTsKKwogc3RydWN0IFJlbmRl
clByZXBhcmVSZXN1bHQgewogICAgIFN0cmluZ0J1aWxkZXIgbWV0YWxTb3VyY2U7CiAgICAgTWV0
YWw6Ok1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZFZlcnRleEVudHJ5UG9pbnROYW1lOwogICAg
IE1ldGFsOjpNYW5nbGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRGcmFnbWVudEVudHJ5UG9pbnROYW1l
OwogfTsKLUV4cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJp
bmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImKTsKK0V4cGVjdGVkPFJl
bmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShjb25zdCBTaGFkZXJNb2R1bGUmIHZl
cnRleFNoYWRlck1vZHVsZSwgY29uc3QgU2hhZGVyTW9kdWxlKiBmcmFnbWVudFNoYWRlck1vZHVs
ZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7CiAKIHN0cnVjdCBDb21wdXRlRGltZW5zaW9u
cyB7CiAgICAgdW5zaWduZWQgd2lkdGg7CkBAIC01Nyw3ICs2NSw3IEBAIHN0cnVjdCBDb21wdXRl
UHJlcGFyZVJlc3VsdCB7CiAgICAgTWV0YWw6Ok1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZEVu
dHJ5UG9pbnROYW1lOwogICAgIENvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zOwog
fTsKLUV4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5n
JiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYpOworRXhwZWN0ZWQ8Q29t
cHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShjb25zdCBTaGFkZXJNb2R1bGUmLCBD
b21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCmluZGV4IDQyNGU3OTUxNWU3OTMxYWZlODQ2MzRl
YzRiNmVjNmMzOTc3Mzg2ZjguLjdjNjU2OTc4ODQ5ZGZiMGI5ZjVmMTEwZmRlZDRjZGVjMTgyZmRh
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApAQCAtNTIsMTIgKzUyLDE5IEBA
IHN0YXRpYyB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24m
IGNhbmRpZGF0ZSwgY29uc3QgVmVjdG9yCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlS2lu
ZD4KLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVz
b2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBUeXBlS2luZCogY2FzdFJldHVyblR5cGUpCitz
dGF0aWMgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZElt
cGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxS
ZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIFR5cGVLaW5kKiBjYXN0UmV0dXJuVHlwZSwg
QVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlKQogewogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IGNhbmRpZGF0ZXM7CiAgICAgZm9y
IChhdXRvJiBwb3NzaWJsZUZ1bmN0aW9uIDogcG9zc2libGVGdW5jdGlvbnMpIHsKICAgICAgICAg
aWYgKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkuZW50cnlQb2ludFR5cGUoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBpZiAobmFtZVNwYWNlID09IEFTVDo6TmFtZVNwYWNlOjpTdGFu
ZGFyZExpYnJhcnkpIHsKKyAgICAgICAgICAgIGlmIChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLm5h
bWVTcGFjZSgpICE9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocG9zc2li
bGVGdW5jdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSAhPSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRM
aWJyYXJ5ICYmIHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkubmFtZVNwYWNlKCkgIT0gbmFtZVNwYWNl
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAgICAgICAgIGlmIChpbmZl
clR5cGVzRm9yQ2FsbChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLCBhcmd1bWVudFR5cGVzLCBjYXN0
UmV0dXJuVHlwZSkpCiAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChwb3NzaWJsZUZ1bmN0
aW9uLmdldCgpKTsKICAgICB9CkBAIC03NywxOSArODQsMTkgQEAgQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcykKK0FT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3Np
YmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkKIHsKLSAgICByZXR1
cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVu
dFR5cGVzLCBzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSo+KG51bGxwdHIpKTsKKyAgICByZXR1
cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVu
dFR5cGVzLCBzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSo+KG51bGxwdHIpLCBuYW1lU3BhY2Up
OwogfQogCi1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2Fk
KFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVz
b2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5
cGUpCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUs
IEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJu
VHlwZSk7CisgICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwb3NzaWJsZUZ1
bmN0aW9ucywgYXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUsIG5hbWVTcGFjZSk7CiB9CiAK
LUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBv
c3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdU
eXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKQor
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9z
c2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5
cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpVbm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUsIEFT
VDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlw
ZSk7CisgICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwb3NzaWJsZUZ1bmN0
aW9ucywgYXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUsIG5hbWVTcGFjZSk7CiB9CiAKIEFT
VDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiBwb3NzaWJsZVR5cGVzLCBBU1Q6OlR5cGVB
cmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCmluZGV4
IDNkMzRhYjZmMzhkNDk5YzlkMzU4NmNkMTMwYTczYTI5MWU3ZDBkMTIuLjNiMTk1YTIxYzU3MmUw
ZjcyMGZhZGFkZmRhMWExN2RhNDYwNDEyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5o
CkBAIC00Myw5ICs0Myw5IEBAIGNsYXNzIE5hbWVkVHlwZTsKIAogfQogCi1BU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9u
cywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVu
dFR5cGVzKTsKLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3Zlcmxv
YWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxS
ZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJu
VHlwZSk7Ci1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2Fk
KFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVz
b2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6OlVubmFtZWRUeXBlKiBjYXN0UmV0dXJu
VHlwZSk7CitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2Fk
KFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVz
b2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVTcGFjZSk7CitBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0
aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1
bWVudFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUsIEFTVDo6TmFtZVNwYWNl
KTsKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZp
bmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBl
LCBBU1Q6Ok5hbWVTcGFjZSk7CiBBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZElt
cGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYsIEFT
VDo6VHlwZUFyZ3VtZW50cyYpOwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5jcHAKaW5kZXggMTU3
YTRiZmM5MjMzMWQ3ZTdjZDViY2UzMjBkNDExOGRjMDA4NzAyYi4uMmNjM2M4MTJiNTc2MGZkNjEx
MmRiNmY2YzY3YzJiNmY3NTkyNjVmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmNwcApAQCAtNDUs
MTYgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi1z
dGF0aWMgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZpbmRFbnRyeVBvaW50KFZlY3RvcjxVbmlx
dWVSZWY8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+PiYgZnVuY3Rpb25EZWZpbml0aW9ucywgU3Ry
aW5nJiBuYW1lKQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBzdGQ6OmZpbmRfaWYoZnVuY3Rpb25E
ZWZpbml0aW9ucy5iZWdpbigpLCBmdW5jdGlvbkRlZmluaXRpb25zLmVuZCgpLCBbJl0oQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgewotICAgICAgICByZXR1cm4g
ZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkgJiYgZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSA9PSBuYW1lOwotICAgIH0pOwotICAgIGlmIChpdGVyYXRvciA9PSBmdW5jdGlvbkRl
ZmluaXRpb25zLmVuZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gJipp
dGVyYXRvcjsKLX07Ci0KIHN0YXRpYyBib29sIG1hdGNoTW9kZShCaW5kaW5nOjpCaW5kaW5nRGV0
YWlscyBiaW5kaW5nVHlwZSwgQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlIG1vZGUpCiB7CiAg
ICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pZm9ybUJ1ZmZlckJp
bmRpbmcpIC0+IGJvb2wgewpAQCAtMjkwLDE0ICsyODAsMTkgQEAgc3RhdGljIGJvb2wgbWF0Y2hE
ZXB0aEF0dGFjaG1lbnQoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgZnJhZ21lbnRPdXRwdXRzLCBP
cHRpb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9wdGlvbmFsPE1hdGNoZWRSZW5kZXJTZW1h
bnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0mIHByb2dyYW0sIFJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciYgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKQorT3B0aW9uYWw8TWF0Y2hlZFJlbmRl
clNlbWFudGljcz4gbWF0Y2hTZW1hbnRpY3MoUHJvZ3JhbSYgcHJvZ3JhbSwgUmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IsIGJvb2wgZGlzdGluY3RGcmFn
bWVudFNoYWRlcikKIHsKLSAgICBhdXRvIHZlcnRleFNoYWRlckVudHJ5UG9pbnQgPSBmaW5kRW50
cnlQb2ludChwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSwgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yLnZlcnRleEVudHJ5UG9pbnROYW1lKTsKLSAgICBhdXRvIGZyYWdtZW50U2hhZGVyRW50
cnlQb2ludCA9IGZpbmRFbnRyeVBvaW50KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLCBy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IuZnJhZ21lbnRFbnRyeVBvaW50TmFtZSk7Ci0gICAgaWYg
KCF2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50IHx8ICFmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQpCisg
ICAgYXV0byB2ZXJ0ZXhGdW5jdGlvbnMgPSBwcm9ncmFtLm5hbWVDb250ZXh0KCkuZ2V0RnVuY3Rp
b25zKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci52ZXJ0ZXhFbnRyeVBvaW50TmFtZSwgQVNUOjpO
YW1lU3BhY2U6Ok5hbWVTcGFjZTEpOworICAgIGlmICh2ZXJ0ZXhGdW5jdGlvbnMuc2l6ZSgpICE9
IDEgfHwgIXZlcnRleEZ1bmN0aW9uc1swXS5nZXQoKS5lbnRyeVBvaW50VHlwZSgpIHx8ICFpczxB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4odmVydGV4RnVuY3Rpb25zWzBdLmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvJiB2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50
ID0gZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KHZlcnRleEZ1bmN0aW9uc1swXS5n
ZXQoKSk7CisgICAgYXV0byBmcmFnbWVudE5hbWVTcGFjZSA9IGRpc3RpbmN0RnJhZ21lbnRTaGFk
ZXIgPyBBU1Q6Ok5hbWVTcGFjZTo6TmFtZVNwYWNlMiA6IEFTVDo6TmFtZVNwYWNlOjpOYW1lU3Bh
Y2UxOworICAgIGF1dG8gZnJhZ21lbnRGdW5jdGlvbnMgPSBwcm9ncmFtLm5hbWVDb250ZXh0KCku
Z2V0RnVuY3Rpb25zKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5mcmFnbWVudEVudHJ5UG9pbnRO
YW1lLCBmcmFnbWVudE5hbWVTcGFjZSk7CisgICAgaWYgKGZyYWdtZW50RnVuY3Rpb25zLnNpemUo
KSAhPSAxIHx8ICFmcmFnbWVudEZ1bmN0aW9uc1swXS5nZXQoKS5lbnRyeVBvaW50VHlwZSgpIHx8
ICFpczxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oZnJhZ21lbnRGdW5jdGlvbnNbMF0uZ2V0KCkp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gdmVydGV4U2hhZGVyRW50
cnlQb2ludEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygp
LCAqdmVydGV4U2hhZGVyRW50cnlQb2ludCk7Ci0gICAgYXV0byBmcmFnbWVudFNoYWRlckVudHJ5
UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwg
KmZyYWdtZW50U2hhZGVyRW50cnlQb2ludCk7CisgICAgYXV0byYgZnJhZ21lbnRTaGFkZXJFbnRy
eVBvaW50ID0gZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGZyYWdtZW50RnVuY3Rp
b25zWzBdLmdldCgpKTsKKyAgICBhdXRvIHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcyA9IGdh
dGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgdmVydGV4U2hhZGVyRW50
cnlQb2ludCk7CisgICAgYXV0byBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcyA9IGdhdGhl
ckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgZnJhZ21lbnRTaGFkZXJFbnRy
eVBvaW50KTsKICAgICBpZiAoIXZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcyB8fCAhZnJhZ21l
bnRTaGFkZXJFbnRyeVBvaW50SXRlbXMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgYXV0byB2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcCA9IG1hdGNoUmVzb3VyY2VzKHZlcnRleFNo
YWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IubGF5
b3V0LCBTaGFkZXJTdGFnZTo6VmVydGV4KTsKQEAgLTMxNCwyMiArMzA5LDIzIEBAIE9wdGlvbmFs
PE1hdGNoZWRSZW5kZXJTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0mIHByb2dyYW0s
IFJlbmRlclBpcGVsaW5lCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKCFt
YXRjaERlcHRoQXR0YWNobWVudChmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0
cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVEZXNjcmlwdG9yLmRl
cHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yLCBwcm9ncmFtLmludHJpbnNpY3MoKSkpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHt7IHZlcnRleFNoYWRlckVu
dHJ5UG9pbnQsIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCwgKnZlcnRleFNoYWRlckVudHJ5UG9p
bnRJdGVtcywgKmZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLCAqdmVydGV4U2hhZGVyUmVz
b3VyY2VNYXAsICpmcmFnbWVudFNoYWRlclJlc291cmNlTWFwLCAqbWF0Y2hlZFZlcnRleEF0dHJp
YnV0ZXMsICptYXRjaGVkQ29sb3JBdHRhY2htZW50cyB9fTsKKyAgICByZXR1cm4ge3sgJnZlcnRl
eFNoYWRlckVudHJ5UG9pbnQsICZmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQsICp2ZXJ0ZXhTaGFk
ZXJFbnRyeVBvaW50SXRlbXMsICpmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcywgKnZlcnRl
eFNoYWRlclJlc291cmNlTWFwLCAqZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcCwgKm1hdGNoZWRW
ZXJ0ZXhBdHRyaWJ1dGVzLCAqbWF0Y2hlZENvbG9yQXR0YWNobWVudHMgfX07CiB9CiAKIE9wdGlv
bmFsPE1hdGNoZWRDb21wdXRlU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQcm9ncmFtJiBwcm9n
cmFtLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
KQogewotICAgIGF1dG8gZW50cnlQb2ludCA9IGZpbmRFbnRyeVBvaW50KHByb2dyYW0uZnVuY3Rp
b25EZWZpbml0aW9ucygpLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yLmVudHJ5UG9pbnROYW1l
KTsKLSAgICBpZiAoIWVudHJ5UG9pbnQpCisgICAgYXV0byBmdW5jdGlvbnMgPSBwcm9ncmFtLm5h
bWVDb250ZXh0KCkuZ2V0RnVuY3Rpb25zKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IuZW50cnlQ
b2ludE5hbWUsIEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UxKTsKKyAgICBpZiAoZnVuY3Rpb25z
LnNpemUoKSAhPSAxIHx8ICFmdW5jdGlvbnNbMF0uZ2V0KCkuZW50cnlQb2ludFR5cGUoKSB8fCAh
aXM8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGZ1bmN0aW9uc1swXS5nZXQoKSkpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byBlbnRyeVBvaW50SXRlbXMgPSBnYXRoZXJF
bnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksICplbnRyeVBvaW50KTsKKyAgICBh
dXRvJiBlbnRyeVBvaW50ID0gZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGZ1bmN0
aW9uc1swXS5nZXQoKSk7CisgICAgYXV0byBlbnRyeVBvaW50SXRlbXMgPSBnYXRoZXJFbnRyeVBv
aW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksIGVudHJ5UG9pbnQpOwogICAgIGlmICghZW50
cnlQb2ludEl0ZW1zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIEFTU0VSVChl
bnRyeVBvaW50SXRlbXMtPm91dHB1dHMuaXNFbXB0eSgpKTsKICAgICBhdXRvIHJlc291cmNlTWFw
ID0gbWF0Y2hSZXNvdXJjZXMoZW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIGNvbXB1dGVQaXBlbGlu
ZURlc2NyaXB0b3IubGF5b3V0LCBTaGFkZXJTdGFnZTo6Q29tcHV0ZSk7CiAgICAgaWYgKCFyZXNv
dXJjZU1hcCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4ge3sgZW50
cnlQb2ludCwgKmVudHJ5UG9pbnRJdGVtcywgKnJlc291cmNlTWFwIH19OworICAgIHJldHVybiB7
eyAmZW50cnlQb2ludCwgKmVudHJ5UG9pbnRJdGVtcywgKnJlc291cmNlTWFwIH19OwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXSExTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmgKaW5kZXggYmRmZjRiYmZmNzg4
MDg0Zjc3ZGM2ZTY4ZGFlY2Q2ODk3Y2IxY2M3MC4uNGI4NDI4MDc0M2NjM2VkNzhiNmY3Nzk3NjI5
MjdkNzgxZmU3YTc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5oCkBAIC00OCw3ICs0OCw3IEBAIHN0
cnVjdCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzIHsKICAgICBIYXNoTWFwPEF0dGFjaG1lbnREZXNj
cmlwdG9yKiwgc2l6ZV90PiBtYXRjaGVkQ29sb3JBdHRhY2htZW50czsKIH07CiAKLU9wdGlvbmFs
PE1hdGNoZWRSZW5kZXJTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0mLCBSZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3ImKTsKK09wdGlvbmFsPE1hdGNoZWRSZW5kZXJTZW1hbnRpY3M+IG1h
dGNoU2VtYW50aWNzKFByb2dyYW0mLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImLCBib29sIGRp
c3RpbmN0RnJhZ21lbnRTaGFkZXIpOwogCiBzdHJ1Y3QgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3Mg
ewogICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBzaGFkZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTdiYzNhOTA1ODUy
NmEyOGRiZTc1NThhZTY0ZjkyNzhlOWU1MTA5ZC4uM2Q0ZTFlMmM2YTJhZTcwOGJmNTBkOTdlYzhm
Yjc1NTNlY2I5Yjc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTMzNDQsNiArMTMzNDQsNyBAQAogCQlDMjM0QTlCNTIxRTky
QzIzMDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMjM0QTlCNjIxRTkyQ0MwMDAzQzk4NEQgLyogV0hMU0xJbnRy
aW5zaWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMjM0QTlCNzIxRTkyQ0MxMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5z
aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMzk4RUJEMjMwQTFCNzYwMDY0MTUwNyAvKiBXSExTTE5h
bWVTcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVTcGFjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENhY2hlQ29y
ZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udENhY2hlQ29yZVRleHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzI0QTU3QUYyMUZBRDUzRjAwNEM2REQxIC8qIFdITFNMUGlwZWxp
bmVEZXNjcmlwdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEE1N0IyMjFGQjhEREEwMDRDNkREMSAv
KiBXSExTTFNlbWFudGljTWF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFNlbWFu
dGljTWF0Y2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzExNCw2ICsx
NzExNSw3IEBACiAJCQkJQzIxQkY3MkQyMUNEODlFOTAwMjI3OTc5IC8qIFdITFNMTWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5oICovLAogCQkJCUMyMUJGNzJDMjFDRDg5RTkwMDIyNzk3OSAv
KiBXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oICovLAogCQkJCTFDMzMyNzcxMjFDRjBCRTEw
MDBEQzlGMiAvKiBXSExTTE5hbWVkVHlwZS5oICovLAorCQkJCUMyMzk4RUJEMjMwQTFCNzYwMDY0
MTUwNyAvKiBXSExTTE5hbWVTcGFjZS5oICovLAogCQkJCUMyMUJGNzIzMjFDRDg5RTEwMDIyNzk3
OSAvKiBXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCAqLywKIAkJCQlDMjFCRjcyQTIx
Q0Q4OUU3MDAyMjc5NzkgLyogV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCAqLywKIAkJCQlD
MjFCRjcwNzIxQ0Q4OUM4MDAyMjc5NzkgLyogV0hMU0xOdWxsTGl0ZXJhbC5oICovLApAQCAtMTg1
NTgsMTQgKzE4NTYwLDE0IEBACiAJCTUxMEE1OEVFMUJBQjcxRTAwMEMxOTI4MiAvKiBzZXJ2ZXIg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTkzMjNCMDZE
MjMwNjFFOUIwMDkwMUM4QiAvKiBJREJTZXJpYWxpemF0aW9uQ29udGV4dC5jcHAgKi8sCi0JCQkJ
OTMyM0IwNkYyMzA2MUU5QzAwOTAxQzhCIC8qIElEQlNlcmlhbGl6YXRpb25Db250ZXh0LmggKi8s
CiAJCQkJNTFCQTRBQzcxQkJDNUFENjAwREYzRDZEIC8qIElEQkJhY2tpbmdTdG9yZS5oICovLAog
CQkJCTUxNkQ3RDZEMUJCNUYwNjUwMEFGN0M3NyAvKiBJREJDb25uZWN0aW9uVG9DbGllbnQuY3Bw
ICovLAogCQkJCTUxMEE1OEZFMUJCMDdBQTUwMEMxOTI4MiAvKiBJREJDb25uZWN0aW9uVG9DbGll
bnQuaCAqLywKIAkJCQk1MTZEN0Q2RTFCQjVGMDY1MDBBRjdDNzcgLyogSURCQ29ubmVjdGlvblRv
Q2xpZW50RGVsZWdhdGUuaCAqLywKIAkJCQk1MTFFQzEyNTFDNTBBQTU3MDAzMkY5ODMgLyogSURC
U2VyaWFsaXphdGlvbi5jcHAgKi8sCiAJCQkJNTExRUMxMjYxQzUwQUE1NzAwMzJGOTgzIC8qIElE
QlNlcmlhbGl6YXRpb24uaCAqLywKKwkJCQk5MzIzQjA2RDIzMDYxRTlCMDA5MDFDOEIgLyogSURC
U2VyaWFsaXphdGlvbkNvbnRleHQuY3BwICovLAorCQkJCTkzMjNCMDZGMjMwNjFFOUMwMDkwMUM4
QiAvKiBJREJTZXJpYWxpemF0aW9uQ29udGV4dC5oICovLAogCQkJCTUxMEE1OEVGMUJBQjcyMEYw
MEMxOTI4MiAvKiBJREJTZXJ2ZXIuY3BwICovLAogCQkJCTUxMEE1OEYwMUJBQjcyMEYwMEMxOTI4
MiAvKiBJREJTZXJ2ZXIuaCAqLywKIAkJCQk1MUVFQUE3MTFCRUZGQTc5MDAyMTgwMDggLyogSW5k
ZXhWYWx1ZUVudHJ5LmNwcCAqLywKQEAgLTI5NTM2LDYgKzI5NTM4LDcgQEAKIAkJCQk1MTQ1QjEw
QTFCQzQ4RTJFMDBFODYyMTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUQ3MjM2RDFCQjYxNzQ5MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTExRUMxMjgxQzUwQUFDQTAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTkzMjNCMDcwMjMwNjFGOTcwMDkwMUM4QiAvKiBJREJT
ZXJpYWxpemF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQkIxQkI0Q0JG
ODAwMTI4OThGIC8qIElEQlNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQUQxQkI0
QzRFODAwMTI4OThGIC8qIElEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTk4
RjdBRDFCQkREM0VCMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbmZvLmggaW4gSGVhZGVycyAq
LywKQEAgLTMwMDA5LDcgKzMwMDEyLDYgQEAKIAkJCQlCQzQ5MThDOTBCRkVBMDUwMDA5RDYzMTYg
LyogSlNIVE1MSUZyYW1lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFBOTgwQTFD
REQyRDAwQjQyQjI1IC8qIEpTSFRNTEltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTgwRTdFOTcwQTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTElucHV0RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJOTMyM0IwNzAyMzA2MUY5NzAwOTAxQzhCIC8qIElEQlNlcmlhbGl6YXRpb25D
b250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzZCMDk1NjFGNUYzNEQ5MDAzQzM3MDIgLyog
SlNIVE1MSW5wdXRFbGVtZW50RW50cmllc0FQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTYxNDhB
NzkxMkU0MUUzQjAwNDRBNzg0IC8qIEpTSFRNTEtleWdlbkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBRTJBQjIyMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJlbEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5oCmluZGV4IGNlMzM0MWU0ZmE3NzQyMWE4M2VmMTBmNjgx
NGExOWY4M2RjOThlYWMuLmI4NjBlZWFkNjFmMTA5MjhlNjEwOWUxYWQ2NTBmN2MyNmY4MDc2YzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVTaGFk
ZXJNb2R1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
U2hhZGVyTW9kdWxlLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAK
KyNpbmNsdWRlICJXSExTTFByZXBhcmUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00
NiwxNSArNDcsMTUgQEAgY2xhc3MgR1BVU2hhZGVyTW9kdWxlIDogcHVibGljIFJlZkNvdW50ZWQ8
R1BVU2hhZGVyTW9kdWxlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxHUFVTaGFkZXJN
b2R1bGU+IHRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmLCBjb25zdCBHUFVTaGFkZXJNb2R1bGVE
ZXNjcmlwdG9yJik7CiAKLSAgICBQbGF0Zm9ybVNoYWRlck1vZHVsZSogcGxhdGZvcm1TaGFkZXJN
b2R1bGUoKSBjb25zdCB7IHJldHVybiBtX3dobHNsU291cmNlLmlzTnVsbCgpID8gbV9wbGF0Zm9y
bVNoYWRlck1vZHVsZS5nZXQoKSA6IG51bGxwdHI7IH0KLSAgICBjb25zdCBTdHJpbmcmIHdobHNs
U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV93aGxzbFNvdXJjZTsgfQorICAgIFBsYXRmb3JtU2hh
ZGVyTW9kdWxlKiBwbGF0Zm9ybVNoYWRlck1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2hsc2xN
b2R1bGUgPyBudWxscHRyIDogbV9wbGF0Zm9ybVNoYWRlck1vZHVsZS5nZXQoKTsgfQorICAgIGNv
bnN0IFdITFNMOjpTaGFkZXJNb2R1bGUqIHdobHNsTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV93
aGxzbE1vZHVsZS5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIEdQVVNoYWRlck1vZHVsZShQbGF0
Zm9ybVNoYWRlck1vZHVsZVNtYXJ0UHRyJiYpOwotICAgIEdQVVNoYWRlck1vZHVsZShTdHJpbmcm
JiB3aGxzbFNvdXJjZSk7CisgICAgR1BVU2hhZGVyTW9kdWxlKFdITFNMOjpPd25lZFNoYWRlck1v
ZHVsZSYmIHdobHNsTW9kdWxlKTsKIAogICAgIFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHIg
bV9wbGF0Zm9ybVNoYWRlck1vZHVsZTsKLSAgICBTdHJpbmcgbV93aGxzbFNvdXJjZTsKKyAgICBX
SExTTDo6T3duZWRTaGFkZXJNb2R1bGUgbV93aGxzbE1vZHVsZTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQppbmRl
eCAxY2VmZWVkYjk4NWU0YTc2NzQ1MzJmZDI4MzQ2MDdhOTc5YTAwYjU5Li5lMDFiNzVhZjk1MTc1
YzA0OTY1NTgwODkzZjYxNjAwZDU2ZTUyZDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQ
aXBlbGluZU1ldGFsLm1tCkBAIC03MCwxMyArNzAsMTEgQEAgc3RhdGljIE9wdGlvbmFsPFdITFNM
OjpDb21wdXRlRGltZW5zaW9ucz4gdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBpcGVsaW5lU3Rh
Z2UKICAgICBXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnMgeyAxLCAx
LCAxIH07CiAKICAgICBpZiAod2hsc2xEZXNjcmlwdG9yKSB7Ci0gICAgICAgIC8vIFdITFNMIGZ1
bmN0aW9ucyBhcmUgY29tcGlsZWQgdG8gTVNMIGZpcnN0LgotICAgICAgICBTdHJpbmcgd2hsc2xT
b3VyY2UgPSBjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbFNvdXJjZSgpOwotICAgICAgICBBU1NF
UlQoIXdobHNsU291cmNlLmlzTnVsbCgpKTsKKyAgICAgICAgQVNTRVJUKGNvbXB1dGVTdGFnZS5t
b2R1bGUtPndobHNsTW9kdWxlKCkpOwogCiAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+ZW50cnlQ
b2ludE5hbWUgPSBjb21wdXRlU3RhZ2UuZW50cnlQb2ludDsKIAotICAgICAgICBhdXRvIHdobHNs
Q29tcGlsZVJlc3VsdCA9IFdITFNMOjpwcmVwYXJlKHdobHNsU291cmNlLCAqd2hsc2xEZXNjcmlw
dG9yKTsKKyAgICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSgq
Y29tcHV0ZVN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSwgKndobHNsRGVzY3JpcHRvcik7CiAg
ICAgICAgIGlmICghd2hsc2xDb21waWxlUmVzdWx0KSB7CiAgICAgICAgICAgICBlcnJvclNjb3Bl
cy5nZW5lcmF0ZVByZWZpeGVkRXJyb3IobWFrZVN0cmluZygiV0hMU0wgY29tcGlsZSBlcnJvcjog
Iiwgd2hsc2xDb21waWxlUmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CkBAIC0xMzQsNyArMTMyLDcgQEAgc3RhdGljIE9wdGlvbmFsPENvbnZlcnRSZXN1
bHQ+IGNvbnZlcnRDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKGNvbnN0IEdQVUNvbXB1dGUKIAog
ICAgIGNvbnN0IGF1dG8mIGNvbXB1dGVTdGFnZSA9IGRlc2NyaXB0b3IuY29tcHV0ZVN0YWdlOwog
Ci0gICAgYm9vbCBpc1dobHNsID0gIWNvbXB1dGVTdGFnZS5tb2R1bGUtPndobHNsU291cmNlKCku
aXNOdWxsKCk7CisgICAgYm9vbCBpc1dobHNsID0gY29tcHV0ZVN0YWdlLm1vZHVsZS0+d2hsc2xN
b2R1bGUoKTsKIAogICAgIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9y
PiB3aGxzbERlc2NyaXB0b3I7CiAgICAgaWYgKGlzV2hsc2wpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRh
bC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5k
ZXJQaXBlbGluZU1ldGFsLm1tCmluZGV4IDg2YWFkZDg0MjA4MTI1NWNkMzU4MWQyNDgyMjBmZWQ1
MGIyNTdhMTAuLmM4YWE4YTIzMDRiZjIxOWU2YTI2ZTUyZWQ2M2JkYjE5MGQ1OWViZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5k
ZXJQaXBlbGluZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCkBAIC0zODIsMTUgKzM4MiwxNCBA
QCBzdGF0aWMgYm9vbCB0cnlTZXRGdW5jdGlvbnMoY29uc3QgR1BVUGlwZWxpbmVTdGFnZURlc2Ny
aXB0b3ImIHZlcnRleFN0YWdlLCBjb25zdAogICAgIFN0cmluZyB2ZXJ0ZXhFbnRyeVBvaW50LCBm
cmFnbWVudEVudHJ5UG9pbnQ7CiAKICAgICBpZiAod2hsc2xEZXNjcmlwdG9yKSB7Ci0gICAgICAg
IC8vIFdITFNMIGZ1bmN0aW9ucyBhcmUgY29tcGlsZWQgdG8gTVNMIGZpcnN0LgotICAgICAgICBT
dHJpbmcgd2hsc2xTb3VyY2UgPSB2ZXJ0ZXhTdGFnZS5tb2R1bGUtPndobHNsU291cmNlKCk7Ci0g
ICAgICAgIEFTU0VSVCghd2hsc2xTb3VyY2UuaXNOdWxsKCkpOworICAgICAgICBBU1NFUlQodmVy
dGV4U3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpKTsKKyAgICAgICAgQVNTRVJUKCFmcmFnbWVu
dFN0YWdlIHx8IGZyYWdtZW50U3RhZ2UtPm1vZHVsZS0+d2hsc2xNb2R1bGUoKSk7CiAKICAgICAg
ICAgd2hsc2xEZXNjcmlwdG9yLT52ZXJ0ZXhFbnRyeVBvaW50TmFtZSA9IHZlcnRleFN0YWdlLmVu
dHJ5UG9pbnQ7CiAgICAgICAgIGlmIChmcmFnbWVudFN0YWdlKQogICAgICAgICAgICAgd2hsc2xE
ZXNjcmlwdG9yLT5mcmFnbWVudEVudHJ5UG9pbnROYW1lID0gZnJhZ21lbnRTdGFnZS0+ZW50cnlQ
b2ludDsKIAotICAgICAgICBhdXRvIHdobHNsQ29tcGlsZVJlc3VsdCA9IFdITFNMOjpwcmVwYXJl
KHdobHNsU291cmNlLCAqd2hsc2xEZXNjcmlwdG9yKTsKKyAgICAgICAgYXV0byB3aGxzbENvbXBp
bGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSgqdmVydGV4U3RhZ2UubW9kdWxlLT53aGxzbE1vZHVs
ZSgpLCBmcmFnbWVudFN0YWdlID8gZnJhZ21lbnRTdGFnZS0+bW9kdWxlLT53aGxzbE1vZHVsZSgp
IDogbnVsbHB0ciwgKndobHNsRGVzY3JpcHRvcik7CiAgICAgICAgIGlmICghd2hsc2xDb21waWxl
UmVzdWx0KSB7CiAgICAgICAgICAgICBlcnJvclNjb3Blcy5nZW5lcmF0ZVByZWZpeGVkRXJyb3Io
bWFrZVN0cmluZygiV0hMU0wgY29tcGlsZSBlcnJvcjogIiwgd2hsc2xDb21waWxlUmVzdWx0LmVy
cm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1Miw4ICs0NTEsOSBAQCBz
dGF0aWMgUmV0YWluUHRyPE1UTFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcj4gY29udmVydFJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcihjbwogICAgIGNvbnN0IGF1dG8mIHZlcnRleFN0YWdlID0gZGVz
Y3JpcHRvci52ZXJ0ZXhTdGFnZTsKICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN0YWdlID0gZGVz
Y3JpcHRvci5mcmFnbWVudFN0YWdlOwogCi0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU0NDYgQWxsb3cgV0hMU0wgc2hhZGVycyB0byBjb21l
IGZyb20gZGlmZmVyZW50IHByb2dyYW1zLgotICAgIGJvb2wgaXNXaGxzbCA9ICF2ZXJ0ZXhTdGFn
ZS5tb2R1bGUtPndobHNsU291cmNlKCkuaXNOdWxsKCkgJiYgKCFmcmFnbWVudFN0YWdlIHx8IHZl
cnRleFN0YWdlLm1vZHVsZS5wdHIoKSA9PSBmcmFnbWVudFN0YWdlLT5tb2R1bGUucHRyKCkpOwor
ICAgIGlmIChmcmFnbWVudFN0YWdlICYmIHN0YXRpY19jYXN0PGJvb2w+KHZlcnRleFN0YWdlLm1v
ZHVsZS0+d2hsc2xNb2R1bGUoKSkgIT0gc3RhdGljX2Nhc3Q8Ym9vbD4oZnJhZ21lbnRTdGFnZS0+
bW9kdWxlLT53aGxzbE1vZHVsZSgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYm9v
bCBpc1dobHNsID0gdmVydGV4U3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpOwogCiAgICAgLy8g
U2V0IGRhdGEgZm9yIHRoZSBNZXRhbCBwaXBlbGluZSBkZXNjcmlwdG9yIChhbmQgV0hMU0wncywg
aWYgbmVlZGVkKS4KICAgICBPcHRpb25hbDxXSExTTDo6UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
PiB3aGxzbERlc2NyaXB0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0KaW5k
ZXggYjdmNTZjODMyN2NhYWJiMTQyNDk1MDA0YTYyZTkyYzVkNzA4OWJkMS4uMzIyMTQ4NTkwNjI3
ODE2NzA3Y2JiZmEwOTI5MGJmNWYyYzU3MjYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVNoYWRlck1vZHVsZU1ldGFsLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVTaGFkZXJNb2R1
bGVNZXRhbC5tbQpAQCAtNDQsOCArNDQsMTEgQEAgUmVmUHRyPEdQVVNoYWRlck1vZHVsZT4gR1BV
U2hhZGVyTW9kdWxlOjp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnMKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAotICAgIGlmIChkZXNjcmlwdG9yLmlz
V0hMU0wpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR1BVU2hhZGVyTW9kdWxlKFN0cmlu
ZyhkZXNjcmlwdG9yLmNvZGUpKSk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNXSExTTCkgeworICAg
ICAgICBpZiAoYXV0byB3aGxzbE1vZHVsZSA9IFdITFNMOjpjcmVhdGVTaGFkZXJNb2R1bGUoZGVz
Y3JpcHRvci5jb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR1BVU2hhZGVy
TW9kdWxlKFdURk1vdmUod2hsc2xNb2R1bGUpKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KIAogICAgIFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHIgbW9kdWxlOwogCkBAIC02
Niw4ICs2OSw4IEBAIEdQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFBsYXRmb3JtU2hh
ZGVyTW9kdWxlU21hcnRQdHImJiBtb2R1bGUpCiB7CiB9CiAKLUdQVVNoYWRlck1vZHVsZTo6R1BV
U2hhZGVyTW9kdWxlKFN0cmluZyYmIHdobHNsU291cmNlKQotICAgIDogbV93aGxzbFNvdXJjZShX
VEZNb3ZlKHdobHNsU291cmNlKSkKK0dQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFdI
TFNMOjpPd25lZFNoYWRlck1vZHVsZSYmIHdobHNsTW9kdWxlKQorICAgIDogbV93aGxzbE1vZHVs
ZShXVEZNb3ZlKHdobHNsTW9kdWxlKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3dobHNsLXNlcGFyYXRlLXNoYWRlci1tb2R1bGVzLWV4cGVjdGVkLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hsc2wtc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
ZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2U3YmU3ZjQxNmFhNTVlM2NiZmE1NGQ4M2U5MmMz
YWVhMzNjMGY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3do
bHNsLXNlcGFyYXRlLXNoYWRlci1tb2R1bGVzLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hp
dGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvd2hs
c2wtc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC93aGxzbC1zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0ZWQwNzE4
OWYxMDA1ZWI0ZWU3NzJhMGUxNjAzYThkZTEwMDZhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvd2hsc2wtc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMuaHRtbApA
QCAtMCwwICsxLDEzMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0
IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCksIGZsb2F0IGkgOiBh
dHRyaWJ1dGUoMSkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOwor
Citjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVu
dFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7Cisg
ICAgcmV0dXJuIHBvc2l0aW9uOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsK
KyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBm
cmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZy
YWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3Rh
Z2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFk
ZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2
ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3Rh
dGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBo
YUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
U3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwg
d3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFk
ZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgYXR0cmlidXRlMSA9
IHtzaGFkZXJMb2NhdGlvbjogMSwgZm9ybWF0OiAiZmxvYXQifTsKKyAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlu
cHV0MSA9IHtzdHJpZGU6IDQsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTFdfTsKKyAgICBjb25z
dCBpbnB1dHMgPSBbaW5wdXQwLCBpbnB1dDFdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3Zl
cnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJ1bmlm
b3JtLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBw
aXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExh
eW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRv
cG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0
ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyMERlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9Owor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjAgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
cjBEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIgPSBhd2Fp
dCB2ZXJ0ZXhCdWZmZXIwLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIw
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIwQXJyYXlCdWZmZXIp
OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJy
YXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVszXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZs
b2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXIwRmxvYXQzMkFycmF5WzZdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1
ZmZlcjBGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJh
eVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyMEZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjBG
bG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTNd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlcjBGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIwLnVubWFw
KCk7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVY
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyMUFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyMS5tYXBXcml0ZUFz
eW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkodmVydGV4QnVmZmVyMUFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQz
MkFycmF5WzBdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzFdID0gMTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzJdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxv
YXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxLnVubWFwKCk7CisKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURX07CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKHJlc291cmNlQnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJB
cnJheUJ1ZmZlciA9IGF3YWl0IHJlc291cmNlQnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBj
b25zdCByZXNvdXJjZUJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzb3Vy
Y2VCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAxOworICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBidWZmZXJCaW5k
aW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRH
cm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAg
IGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJp
bmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmlj
ZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb250
ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2Ny
aXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENo
YWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwor
ICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0
VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFu
ZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTog
MX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4
dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDog
InN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNo
bWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRh
Y2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0Vu
Y29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0
b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXIwLCB2ZXJ0
ZXhCdWZmZXIxXSwgWzAsIDBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5j
dGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376676</attachid>
            <date>2019-08-19 01:55:32 -0700</date>
            <delta_ts>2019-08-19 02:16:05 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195446-20190819015531.patch</filename>
            <type>text/plain</type>
            <size>237299</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmOTFkYzVmYTQzOTFh
NGRmNWNkOWRkMDQ1Yjk5MmIwMTdkYWJhYS4uMTMyNzMzNDk5YzhhZjE0YjA0YTgyY2FmZjFlODI5
ZDY5NmZlNmE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMiBAQAorMjAxOS0wOC0xOSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0g
VmVydGV4IHNoYWRlciBhbmQgZnJhZ21lbnQgc2hhZGVyIG5lZWQgdG8gYmUgYWJsZSB0byBjb21l
IGZyb20gdHdvIGRpZmZlcmVudCBwcm9ncmFtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMC5odG1sCisgICAgICAgICAgICAgICB3
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTEuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEyLmh0bWwKKyAgICAgICAgICAgICAgIHdl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0xMy5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTQuaHRtbAorICAgICAgICAgICAgICAgd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTE1Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNi5odG1sCisgICAgICAgICAgICAgICB3ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MTcuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0x
OS5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMi5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjAu
aHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIxLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMi5o
dG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjMuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI0Lmh0
bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjYuaHRt
bAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTI3Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0zLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy00Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy01Lmh0bWwKKyAg
ICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy02Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03Lmh0bWwKKyAgICAg
ICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy04Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy05Lmh0bWwKKyAgICAgICAg
ICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGdW5jdGlvbkRlY2xhcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uOjpuYW1lU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbjo6c2V0TmFtZVNwYWNlKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lU3BhY2UuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlV
dGlsaXRpZXMuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1l
ZFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlwZTo6bmFtZVNw
YWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlwZTo6c2V0
TmFtZVNwYWNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1
bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6ZW1pdE1l
dGFsRnVuY3Rpb25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNr
RHVwbGljYXRlRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpEdXBsaWNh
dGVGdW5jdGlvbktleTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpGdW5j
dGlvbktleTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y2hl
Y2tPcGVyYXRvck92ZXJsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpj
aGVja1NoYWRlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnZpc2l0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpyZXNvbHZlRnVuY3Rpb24pOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok5hbWVDb250ZXh0OjpnZXRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNv
bnRleHQ6OmdldEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRl
eHQ6OnNlYXJjaFR5cGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29u
dGV4dDo6c2VhcmNoRnVuY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpO
YW1lQ29udGV4dDo6Z2xvYmFsRXhpc3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpOYW1lQ29udGV4dDo6bG9jYWxFeGlzdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok5hbWVDb250ZXh0OjpleGlzdHMpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpO
YW1lQ29udGV4dDo6c2V0Q3VycmVudE5hbWVTcGFjZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok5hbWVSZXNvbHZlcjo6TmFtZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpO
YW1lUmVzb2x2ZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlTmFt
ZXNJblR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlVHlwZU5hbWVzSW5G
dW5jdGlvbnMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29s
dmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZVJlc29sdmVyOjpzZXRDdXJyZW50
TmFtZVNwYWNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpmYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQ
YXJzZXI6OmNvbnN1bWVJbnRlZ3JhbExpdGVyYWwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6Y29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlQ29uc3RhbnRFeHByZXNzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlQnVpbHRJblNlbWFu
dGljKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlUmVzb3VyY2VTZW1h
bnRpYyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVN0YWdlSW5PdXRT
ZW1hbnRpYyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZUVudW1lcmF0
aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZUVu
dW1lcmF0aW9uTWVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNl
TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQ
YXJzZXI6OnBhcnNlVmVydGV4T3JGcmFnbWVudEZ1bmN0aW9uRGVjbGFyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVN3aXRjaENhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VGb3JMb29wKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6Y29tcGxldGVBc3NpZ25tZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlUG9zc2libGVUZXJuYXJ5Q29uZGl0aW9u
YWwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUZXJtKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OlNoYWRlck1vZHVsZTo6U2hhZGVyTW9kdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpjcmVhdGVTaGFkZXJNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlNoYWRlck1vZHVsZURlbGV0ZXI6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OnByZXBhcmVTaGFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnByZXBhcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlByb2dyYW06OmFwcGVuZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpy
ZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJl
c29sdmVGdW5jdGlvbk92ZXJsb2FkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmVPdmVybG9hZEltcGwuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFNlbWFudGljTWF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0
Y2hTZW1hbnRpY3MpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmZpbmRFbnRyeVBvaW50KTog
RGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0
Y2hlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJy
YXJ5VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjppbmNsdWRlU3RhbmRh
cmRMaWJyYXJ5KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJk
TGlicmFyeVV0aWxpdGllcy5oOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVU2hhZGVyTW9kdWxl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpHUFVTaGFkZXJNb2R1bGU6OnBsYXRmb3JtU2hhZGVyTW9k
dWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVNoYWRlck1vZHVsZTo6d2hsc2xNb2R1
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVyTW9kdWxlOjp3aGxzbFNvdXJj
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29h
L0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6dHJ5U2V0RnVu
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRDb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlw
ZWxpbmVNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OnRyeVNldE1ldGFsRnVuY3Rpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OnRyeVNldEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW06CisgICAgICAgIChXZWJDb3Jl
OjpHUFVTaGFkZXJNb2R1bGU6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVTaGFk
ZXJNb2R1bGU6OkdQVVNoYWRlck1vZHVsZSk6CisKIDIwMTktMDgtMTYgIENvbW1pdCBRdWV1ZSAg
PGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIyNDg3NzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKaW5kZXggNjgw
NWQ2NjY0ZjkwN2M4M2NkNWI3YWY4ZGE0YmRmYTQ2ZGUyYjJiZC4uYjcyNTZkNTA1NDhmZTk5MDhh
NDI3YmY4ZjViMDFkN2Q5YmUzMTVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRp
b24uaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAj
aW5jbHVkZSAiV0hMU0xFbnRyeVBvaW50VHlwZS5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25B
dHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVTcGFjZS5oIgogI2luY2x1ZGUgIldITFNM
UGFyc2luZ01vZGUuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hM
U0xVbm5hbWVkVHlwZS5oIgpAQCAtODMsNiArODQsOSBAQCBwdWJsaWM6CiAKICAgICBQYXJzaW5n
TW9kZSBwYXJzaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2luZ01vZGU7IH0KIAorICAg
IE5hbWVTcGFjZSBuYW1lU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX25hbWVTcGFjZTsgfQorICAg
IHZvaWQgc2V0TmFtZVNwYWNlKE5hbWVTcGFjZSBuYW1lU3BhY2UpIHsgbV9uYW1lU3BhY2UgPSBu
YW1lU3BhY2U7IH0KKwogcHJpdmF0ZToKICAgICBDb2RlTG9jYXRpb24gbV9jb2RlTG9jYXRpb247
CiAgICAgQXR0cmlidXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsKQEAgLTkzLDYgKzk3LDcgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zIG1f
cGFyYW1ldGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+IG1fc2VtYW50aWM7Cisg
ICAgTmFtZVNwYWNlIG1fbmFtZVNwYWNlIHsgTmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZVNwYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lU3BhY2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDZm
ZGVmMTVmYjcxNzY4YmUwNTE5YTBlYTEzZjUyZTI0OTZlOGE4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZVNwYWNlLmgK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitu
YW1lc3BhY2UgQVNUIHsKKworLy8gRGlmZmVyZW50IHNoYWRlciBtb2R1bGVzIG9wZXJhdGUgaW4g
ZGlmZmVyZW50IG5hbWVzcGFjZXMuCisvLyBUaGlzIG1lYW5zIGl0J3MgcG9zc2libGUgdG8gaGF2
ZSB0d28gZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlcywgYXMgbG9uZyBhcyB0aGV5
IGFyZSBpbiBkaWZmZXJlbnQgbW9kdWxlcy4KK2VudW0gY2xhc3MgTmFtZVNwYWNlIDogdWludDhf
dCB7CisgICAgU3RhbmRhcmRMaWJyYXJ5ID0gMCwKKyAgICBOYW1lU3BhY2UxID0gMSwKKyAgICBO
YW1lU3BhY2UyID0gMgorfTsKKworfQorCit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJH
UFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xOYW1lZFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTE5hbWVkVHlwZS5oCmluZGV4IDQ1YjgwMTBjZDI4ZWJkZDUwZjg3MDE3ZWJlN2FjYjM0
MmU0Y2Y3YWUuLjU5OWM0NmM1ODUzODViMDE4N2MwMmViYzlkMmMzMDQzY2NiM2I4NzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVk
VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TE5hbWVkVHlwZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2lu
Y2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIK
ICNpbmNsdWRlICJXSExTTFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjAsMTIgKzYxLDE1IEBAIHB1YmxpYzoK
IAogICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogCisgICAgTmFtZVNwYWNl
IG5hbWVTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZVNwYWNlOyB9CisgICAgdm9pZCBzZXRO
YW1lU3BhY2UoTmFtZVNwYWNlIG5hbWVTcGFjZSkgeyBtX25hbWVTcGFjZSA9IG5hbWVTcGFjZTsg
fQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBUeXBlOwogICAgIFR5cGUmIHVuaWZ5Tm9k
ZUltcGwoKSB7IHJldHVybiAqdGhpczsgfQogICAgIENvZGVMb2NhdGlvbiBtX2NvZGVMb2NhdGlv
bjsKICAgICBTdHJpbmcgbV9uYW1lOworICAgIE5hbWVTcGFjZSBtX25hbWVTcGFjZSB7IE5hbWVT
cGFjZTo6U3RhbmRhcmRMaWJyYXJ5IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVu
Y3Rpb25Xcml0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKaW5kZXggZTUwMGY2MTE1ZmEwOGFmNGU0ZDM3YzZl
ZGYzNGMxMjRkOWQyZDBjYy4uMWU1MzFiMDI3ZmJjYjNhZDBkN2Y0NGY2ZDNiMjdhOGU2MDZkMjgw
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKQEAgLTgyNywxMSArODI3LDEy
IEBAIHByaXZhdGU6CiBSZW5kZXJNZXRhbEZ1bmN0aW9uRW50cnlQb2ludHMgZW1pdE1ldGFsRnVu
Y3Rpb25zKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIFByb2dyYW0mIHByb2dyYW0sIFR5
cGVOYW1lciYgdHlwZU5hbWVyLCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFu
dGljcywgTGF5b3V0JiBsYXlvdXQpCiB7CiAgICAgYXV0byYgdmVydGV4U2hhZGVyRW50cnlQb2lu
dCA9ICptYXRjaGVkU2VtYW50aWNzLnZlcnRleFNoYWRlcjsKLSAgICBhdXRvJiBmcmFnbWVudFNo
YWRlckVudHJ5UG9pbnQgPSAqbWF0Y2hlZFNlbWFudGljcy5mcmFnbWVudFNoYWRlcjsKKyAgICBh
dXRvKiBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQgPSBtYXRjaGVkU2VtYW50aWNzLmZyYWdtZW50
U2hhZGVyOwogCiAgICAgUmVhY2hhYmxlRnVuY3Rpb25zR2F0aGVyZXIgcmVhY2hhYmxlRnVuY3Rp
b25zR2F0aGVyZXI7CiAgICAgcmVhY2hhYmxlRnVuY3Rpb25zR2F0aGVyZXIuVmlzaXRvcjo6dmlz
aXQodmVydGV4U2hhZGVyRW50cnlQb2ludCk7Ci0gICAgcmVhY2hhYmxlRnVuY3Rpb25zR2F0aGVy
ZXIuVmlzaXRvcjo6dmlzaXQoZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50KTsKKyAgICBpZiAoZnJh
Z21lbnRTaGFkZXJFbnRyeVBvaW50KQorICAgICAgICByZWFjaGFibGVGdW5jdGlvbnNHYXRoZXJl
ci5WaXNpdG9yOjp2aXNpdCgqZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50KTsKICAgICBhdXRvIHJl
YWNoYWJsZUZ1bmN0aW9ucyA9IHJlYWNoYWJsZUZ1bmN0aW9uc0dhdGhlcmVyLnRha2VSZWFjaGFi
bGVGdW5jdGlvbnMoKTsKIAogICAgIGF1dG8gZnVuY3Rpb25NYXBwaW5nID0gZ2VuZXJhdGVNZXRh
bEZ1bmN0aW9uc01hcHBpbmcocHJvZ3JhbSk7CkBAIC04NDQsNyArODQ1LDcgQEAgUmVuZGVyTWV0
YWxGdW5jdGlvbkVudHJ5UG9pbnRzIGVtaXRNZXRhbEZ1bmN0aW9ucyhTdHJpbmdCdWlsZGVyJiBz
dHJpbmdCdWlsZGVyLAogICAgICAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnZpc2l0
KGZ1bmN0aW9uRGVmaW5pdGlvbik7CiAgICAgfQogCi0gICAgcmV0dXJuIHsgZnVuY3Rpb25NYXBw
aW5nLmdldCgmdmVydGV4U2hhZGVyRW50cnlQb2ludCksIGZ1bmN0aW9uTWFwcGluZy5nZXQoJmZy
YWdtZW50U2hhZGVyRW50cnlQb2ludCkgfTsKKyAgICByZXR1cm4geyBmdW5jdGlvbk1hcHBpbmcu
Z2V0KCZ2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50KSwgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50ID8g
ZnVuY3Rpb25NYXBwaW5nLmdldChmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQpIDogTWFuZ2xlZEZ1
bmN0aW9uTmFtZSB7IDAgfSB9OwogfQogCiBDb21wdXRlTWV0YWxGdW5jdGlvbkVudHJ5UG9pbnRz
IGVtaXRNZXRhbEZ1bmN0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBQcm9ncmFt
JiBwcm9ncmFtLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3Mm
JiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5jcHAKaW5kZXggZjhhN2EzZTkxZGQxMjcxN2FmY2Q3ZjZjNGUzMzU3MGY2
MWYzYzBhZC4uOWZlZjNhMWRiMjk0YzlkYmZlMjBkY2QxZDllM2MyOGFiZmRjMGIzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKQEAgLTc1LDYgKzc1LDExIEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKG1fZnVuY3Rpb24tPm5hbWUoKSAhPSBvdGhlci5tX2Z1bmN0aW9u
LT5uYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgaWYgKG1fZnVu
Y3Rpb24tPm5hbWVTcGFjZSgpICE9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkKKyAg
ICAgICAgICAgICYmIG90aGVyLm1fZnVuY3Rpb24tPm5hbWVTcGFjZSgpICE9IEFTVDo6TmFtZVNw
YWNlOjpTdGFuZGFyZExpYnJhcnkKKyAgICAgICAgICAgICYmIG1fZnVuY3Rpb24tPm5hbWVTcGFj
ZSgpICE9IG90aGVyLm1fZnVuY3Rpb24tPm5hbWVTcGFjZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgICAgIEFTU0VSVChtX2Z1bmN0aW9uLT5pc0Nhc3QoKSA9PSBvdGhlci5t
X2Z1bmN0aW9uLT5pc0Nhc3QoKSk7CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2Z1bmN0aW9uLT5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCmluZGV4IDYzMjU1
ZDQ2NGFlYjUwM2ZmOTAwNjRlZjRkYjM0NWMyODhhZGUzMzcuLjA3NmNiY2M4MjFkMjQ4MjhhYmFi
MTgxMjhkMjA4ZjMxMTcwODIyZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoISFtX2Nhc3RSZXR1cm5UeXBlICE9ICEhb3RoZXIubV9jYXN0UmV0dXJuVHlwZSkKKyAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PGJvb2w+KG1fY2FzdFJldHVyblR5cGUpICE9IHN0YXRpY19jYXN0
PGJvb2w+KG90aGVyLm1fY2FzdFJldHVyblR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIGlmICghbV9jYXN0UmV0dXJuVHlwZSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBz
dGF0aWMgYm9vbCBjaGVja1NlbWFudGljcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpbnB1dEl0
ZW1zLCBWZWN0b3I8RW50cnlQb2ludAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9v
bCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1
bmN0aW9uRGVmaW5pdGlvbiwgTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQorc3RhdGljIGJvb2wg
Y2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24sIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCwgQVNUOjpOYW1lU3BhY2Ug
Y3VycmVudE5hbWVTcGFjZSkKIHsKICAgICBlbnVtIGNsYXNzIENoZWNrS2luZCB7CiAgICAgICAg
IEluZGV4LApAQCAtNDgzLDE2ICs0ODMsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92
ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYXV0byYgdmFsdWVUeXBlID0gKmZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMV0tPnR5
cGUoKTsKICAgICAgICAgYXV0byBnZXR0ZXJOYW1lID0gZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUo
KS5zdWJzdHJpbmcoMCwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5sZW5ndGgoKSAtIDEpOwot
ICAgICAgICBhdXRvKiBnZXR0ZXJGdW5jcyA9IG5hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhnZXR0
ZXJOYW1lKTsKLSAgICAgICAgaWYgKCFnZXR0ZXJGdW5jcykKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgYXV0byBnZXR0ZXJGdW5jcyA9IG5hbWVDb250ZXh0LmdldEZ1bmN0aW9u
cyhnZXR0ZXJOYW1lLCBjdXJyZW50TmFtZVNwYWNlKTsKICAgICAgICAgVmVjdG9yPFJlc29sdmlu
Z1R5cGU+IGFyZ3VtZW50VHlwZXM7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVudFR5cGVSZWZlcmVuY2VzOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bUV4cGVjdGVkUGFyYW1ldGVycyAtIDE7ICsraSkKICAgICAg
ICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpW2ldLT50eXBlKCkpOwogICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3Vt
ZW50VHlwZXMpCiAgICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1
bWVudFR5cGUpOwotICAgICAgICBhdXRvKiBvdmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcyk7CisgICAgICAgIGF1dG8q
IG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoZ2V0dGVyRnVuY3MsIGFyZ3VtZW50
VHlwZVJlZmVyZW5jZXMsIGN1cnJlbnROYW1lU3BhY2UpOwogICAgICAgICBpZiAoIW92ZXJsb2Fk
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhdXRvJiByZXN1bHRUeXBlID0g
b3ZlcmxvYWQtPnR5cGUoKTsKQEAgLTY3MiwxNCArNjcwLDE1IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4gbV93cmFwcGVkRmxvYXRUeXBlOwogICAgIFJlZlB0cjxB
U1Q6OlVubmFtZWRUeXBlPiBtX2dlbmVyaWNQb2ludGVyVHlwZTsKICAgICBIYXNoTWFwPEFTVDo6
RXhwcmVzc2lvbiosIHN0ZDo6dW5pcXVlX3B0cjxSZXNvbHZpbmdUeXBlPj4gbV90eXBlTWFwOwot
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRzOwotICAgIEhhc2hTZXQ8U3Ry
aW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0
ZUVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRzWzNd
OworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHNbM107CisgICAgSGFz
aFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzWzNdOwogICAgIGNvbnN0IEludHJpbnNp
Y3MmIG1faW50cmluc2ljczsKICAgICBQcm9ncmFtJiBtX3Byb2dyYW07CiAgICAgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24qIG1fY3VycmVudEZ1bmN0aW9uIHsgbnVsbHB0ciB9OwogICAgIEhhc2hN
YXA8RnVuY3Rpb25LZXksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+LCBGdW5jdGlvbktleTo6SGFzaCwgRnVuY3Rpb25LZXk6OlRyYWl0
cz4gbV9mdW5jdGlvbnM7CiAgICAgSGFzaE1hcDxBbmRPdmVybG9hZFR5cGVLZXksIFJlZlB0cjxB
U1Q6OlVubmFtZWRUeXBlPiwgQW5kT3ZlcmxvYWRUeXBlS2V5OjpIYXNoLCBBbmRPdmVybG9hZFR5
cGVLZXk6OlRyYWl0cz4gbV9hbmRPdmVybG9hZFR5cGVNYXA7CisgICAgQVNUOjpOYW1lU3BhY2Ug
bV9jdXJyZW50TmFtZVNwYWNlIHsgQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSB9Owog
fTsKIAogdm9pZCBDaGVja2VyOjp2aXNpdChQcm9ncmFtJiBwcm9ncmFtKQpAQCAtNzIzLDE4ICs3
MjIsMjAgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IENoZWNrZXI6OmFzc2lnblR5cGVzKCkKIAog
Ym9vbCBDaGVja2VyOjpjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIHsKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CiAgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZp
bml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKICAgICBjYXNlIEFTVDo6RW50cnlQb2ludFR5cGU6
OlZlcnRleDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fdmVydGV4RW50cnlQ
b2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGJvb2w+KG1fdmVydGV4RW50cnlQb2ludHNbaW5kZXhdLmFkZChmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpKSk7CiAgICAgY2FzZSBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVu
dDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fZnJhZ21lbnRFbnRyeVBvaW50
cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9mcmFnbWVudEVudHJ5UG9pbnRzW2luZGV4XS5hZGQoZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKSkpOwogICAgIGNhc2UgQVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fY29tcHV0ZUVudHJ5UG9pbnRzLmFk
ZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxib29sPihtX2NvbXB1dGVFbnRyeVBvaW50c1tpbmRleF0uYWRkKGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCkpKTsKICAgICB9CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIHsKKyAgICBtX2N1cnJlbnROYW1lU3Bh
Y2UgPSBmdW5jdGlvbkRlZmluaXRpb24ubmFtZVNwYWNlKCk7CiAgICAgbV9jdXJyZW50RnVuY3Rp
b24gPSAmZnVuY3Rpb25EZWZpbml0aW9uOwogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24uZW50
cnlQb2ludFR5cGUoKSkgewogICAgICAgICBpZiAoIWNoZWNrU2hhZGVyVHlwZShmdW5jdGlvbkRl
ZmluaXRpb24pKSB7CkBAIC03NTEsNyArNzUyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICghY2hlY2tPcGVyYXRvck92ZXJsb2FkKGZ1
bmN0aW9uRGVmaW5pdGlvbiwgbV9wcm9ncmFtLm5hbWVDb250ZXh0KCkpKSB7CisgICAgaWYgKCFj
aGVja09wZXJhdG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uLCBtX3Byb2dyYW0ubmFtZUNv
bnRleHQoKSwgbV9jdXJyZW50TmFtZVNwYWNlKSkgewogICAgICAgICBzZXRFcnJvcihFcnJvcigi
T3BlcmF0b3IgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgc2lnbmF0dXJlLiIsIGZ1bmN0aW9uRGVm
aW5pdGlvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODM0
LDcgKzgzNSw3IEBAIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogQ2hlY2tlcjo6cmVzb2x2ZUZ1
bmN0aW9uKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyCiAgICAgewogICAgICAgICBhdXRv
IGl0ZXIgPSBtX2Z1bmN0aW9ucy5maW5kKEZ1bmN0aW9uS2V5IHsgbmFtZSwgV1RGTW92ZSh1bm5h
bWVkVHlwZXMpLCBjYXN0UmV0dXJuVHlwZSB9KTsKICAgICAgICAgaWYgKGl0ZXIgIT0gbV9mdW5j
dGlvbnMuZW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24q
IGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoaXRlci0+dmFsdWUsIHR5cGVzLCBj
YXN0UmV0dXJuVHlwZSkpCisgICAgICAgICAgICBpZiAoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKGl0ZXItPnZhbHVlLCB0eXBlcywg
Y2FzdFJldHVyblR5cGUsIG1fY3VycmVudE5hbWVTcGFjZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uOwogICAgICAgICB9CiAgICAgfQpAQCAtMTY1MiwxNSArMTY1MywxNCBAQCB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQog
CiAgICAgaWYgKCFmdW5jdGlvbikgewogICAgICAgICBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQg
PSBtX3Byb2dyYW0ubmFtZUNvbnRleHQoKTsKLSAgICAgICAgaWYgKGF1dG8qIGNhc3RUeXBlcyA9
IG5hbWVDb250ZXh0LmdldFR5cGVzKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpIHsKLSAgICAgICAg
ICAgIGlmIChjYXN0VHlwZXMtPnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgQVNUOjpO
YW1lZFR5cGUmIGNhc3RUeXBlID0gKCpjYXN0VHlwZXMpWzBdLmdldCgpOwotICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uKHR5cGVzLCAib3BlcmF0b3IgY2FzdCJfc3Ry
LCBjYWxsRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgJmNhc3RUeXBlKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaGFzRXJyb3IoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIGlmIChmdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Np
b24uc2V0Q2FzdERhdGEoY2FzdFR5cGUpOwotICAgICAgICAgICAgfQorICAgICAgICBhdXRvIGNh
c3RUeXBlcyA9IG5hbWVDb250ZXh0LmdldFR5cGVzKGNhbGxFeHByZXNzaW9uLm5hbWUoKSwgbV9j
dXJyZW50TmFtZVNwYWNlKTsKKyAgICAgICAgaWYgKGNhc3RUeXBlcy5zaXplKCkgPT0gMSkgewor
ICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIGNhc3RUeXBlID0gY2FzdFR5cGVzWzBdLmdldCgp
OworICAgICAgICAgICAgZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb24odHlwZXMsICJvcGVyYXRv
ciBjYXN0Il9zdHIsIGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAmY2FzdFR5cGUpOwor
ICAgICAgICAgICAgaWYgKGhhc0Vycm9yKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNl
dENhc3REYXRhKGNhc3RUeXBlKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAppbmRleCAxYWE1ZGZh
MzI0NWEwZTg1NWNkNzM0YWViN2NiODVmMzk0NzYzYjQ4Li4wNjJmZmZlM2ZkMWFjYTQzNGY0MzM0
ZDM2MzRkNjcyNTI5OWUzYjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTExleGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTExleGVyLmNwcApAQCAtMTcwMiw3ICsxNzAyLDYgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzTmV3bGluZShVQ2hhciBjb2RlVW5pdCkKICAgICB9CiB9CiAKLQogYXV0byBM
ZXhlcjo6bGluZUFuZENvbHVtbk51bWJlckZyb21PZmZzZXQoY29uc3QgU3RyaW5nVmlldyYgc3Ry
aW5nVmlldywgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0KSAtPiBMaW5lQW5kQ29sdW1uCiB7CiAgICAg
Ly8gQ291bnRpbmcgZnJvbSAxIHRvIG1hdGNoIG1vc3QgdGV4dCBlZGl0b3JzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0
LmNwcAppbmRleCAxOTkwMjEzYTNiNzI2YTMwMzNkMDE3YTYxMzFhZjRhNmRiNjY1YWZlLi5lNDQy
MjEzYjUyMTRiYWU5YjljMzQwMTI0YTdlODliM2U0NzEzYWJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcApA
QCAtNDUsOTkgKzQ1LDEzOCBAQCBOYW1lQ29udGV4dDo6TmFtZUNvbnRleHQoTmFtZUNvbnRleHQq
IHBhcmVudCkKIHsKIH0KIAotYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6VHlwZURlZmluaXRp
b24mIHR5cGVEZWZpbml0aW9uKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IE5hbWVDb250ZXh0Ojph
ZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCiB7Ci0gICAgaWYgKGV4aXN0
cyh0eXBlRGVmaW5pdGlvbi5uYW1lKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0
byByZXN1bHQgPSBtX3R5cGVzLmFkZCh0eXBlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7Ci0gICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhdXRvIGV4aXN0
aW5nID0gZ2xvYmFsRXhpc3RzKHR5cGVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChFcnJvcigiRHVwbGljYXRlIG5hbWUgaW4gcHJvZ3JhbSIsICpleGlz
dGluZykpOworICAgIHR5cGVEZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1lU3Bh
Y2UpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFt
ZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZCh0eXBlRGVmaW5p
dGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBl
PiwgMT4oKSk7CisgICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZCh0eXBlRGVmaW5pdGlvbik7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBO
YW1lQ29udGV4dDo6YWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5p
dGlvbikKIHsKLSAgICBpZiAoZXhpc3RzKHN0cnVjdHVyZURlZmluaXRpb24ubmFtZSgpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoc3RydWN0
dXJlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
TmFtZWRUeXBlPiwgMT4oKSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChhdXRvIGV4aXN0aW5nID0gZ2xvYmFsRXhpc3RzKHN0cnVj
dHVyZURlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVy
cm9yKCJEdXBsaWNhdGUgbmFtZSBpbiBwcm9ncmFtLiIsICpleGlzdGluZykpOworICAgIHN0cnVj
dHVyZURlZmluaXRpb24uc2V0TmFtZVNwYWNlKG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0
byBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2N1cnJlbnROYW1lU3BhY2UpOworICAg
IGF1dG8gcmVzdWx0ID0gbV90eXBlc1tpbmRleF0uYWRkKHN0cnVjdHVyZURlZmluaXRpb24ubmFt
ZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkp
OworICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4g
TmFtZUNvbnRleHQ6OmFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25E
ZWZpbml0aW9uKQogewotICAgIGlmIChleGlzdHMoZW51bWVyYXRpb25EZWZpbml0aW9uLm5hbWUo
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRk
KGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhdXRvIGV4aXN0aW5nID0gZ2xvYmFsRXhp
c3RzKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoRXJyb3IoIkR1cGxpY2F0ZSBuYW1lIGluIHByb2dyYW0uIiwgKmV4aXN0aW5nKSk7
CisgICAgZW51bWVyYXRpb25EZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1lU3Bh
Y2UpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFt
ZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZChlbnVtZXJhdGlv
bkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4sIDE+KCkpOworICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK0V4cGVjdGVkPHZv
aWQsIEVycm9yPiBOYW1lQ29udGV4dDo6YWRkKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24pCiB7Ci0gICAgaWYgKG1fdHlwZXMuZmluZChmdW5jdGlvbkRlZmluaXRp
b24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCi0gICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQo
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkgIT0gbV92YXJpYWJsZXMuZW5kKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChmdW5jdGlv
bkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgaWYgKGF1dG8qIHR5cGUgPSBzZWFy
Y2hUeXBlcyhmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEVycm9yKCJEdXBsaWNhdGUgbmFtZSBpbiBwcm9ncmFtLiIsIHR5cGUtPmNvZGVM
b2NhdGlvbigpKSk7CisgICAgZnVuY3Rpb25EZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJl
bnROYW1lU3BhY2UpOworICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnNbaW5kZXhdLmFkZChm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb24pOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB7IH07CiB9CiAKLWJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCitFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiB7Ci0gICAgaWYgKG1fdHlwZXMuZmluZChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQotICAgICAgICB8fCBt
X3ZhcmlhYmxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3Zh
cmlhYmxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVzdWx0ID0g
bV9mdW5jdGlvbnMuYWRkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsK
KyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFj
ZSk7CisgICAgaWYgKGF1dG8qIHR5cGUgPSBzZWFyY2hUeXBlcyhuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiRHVw
bGljYXRlIG5hbWUgaW4gcHJvZ3JhbS4iLCB0eXBlLT5jb2RlTG9jYXRpb24oKSkpOworICAgIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uc2V0TmFtZVNwYWNlKG1fY3VycmVudE5hbWVTcGFjZSk7
CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9uc1tpbmRleF0uYWRkKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFw
cGVuZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBO
YW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCiB7Ci0gICAgaWYgKG1fZnVuY3Rpb25zLmZpbmQobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKLSAgICAgICAgfHwgbV92YXJpYWJsZXMu
ZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgaWYgKGF1dG8qIGZ1bmN0aW9uID0gc2Vh
cmNoRnVuY3Rpb25zKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkR1cGxpY2F0ZSBuYW1lIGluIHByb2dyYW0uIiwgZnVu
Y3Rpb24tPmNvZGVMb2NhdGlvbigpKSk7CisgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldE5h
bWVTcGFjZShtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlc1tp
bmRleF0uYWRkKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CiAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+
IE5hbWVDb250ZXh0OjphZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xh
cmF0aW9uKQogewogICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKS5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGV4aXN0cyh2YXJpYWJsZURlY2xhcmF0aW9u
Lm5hbWUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICBpZiAoYXV0byogZGVjbGFyYXRpb24gPSBsb2NhbEV4aXN0cyh2YXJpYWJsZURlY2xhcmF0aW9u
Lm5hbWUoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiRHVwbGljYXRl
IG5hbWUgaW4gcHJvZ3JhbS4iLCBkZWNsYXJhdGlvbi0+Y29kZUxvY2F0aW9uKCkpKTsKICAgICBh
dXRvIHJlc3VsdCA9IG1fdmFyaWFibGVzLmFkZChTdHJpbmcodmFyaWFibGVEZWNsYXJhdGlvbi5u
YW1lKCkpLCAmdmFyaWFibGVEZWNsYXJhdGlvbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5pc05ld0Vu
dHJ5OworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+LCAxPiogTmFtZUNvbnRleHQ6OmdldFR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSkKK1Zl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4gTmFtZUNvbnRl
eHQ6OmdldFR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgQVNUOjpOYW1lU3BhY2UgZnJvbU5hbWVz
cGFjZSkKIHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlcy5maW5kKG5hbWUpOwotICAgIGlm
IChpdGVyYXRvciA9PSBtX3R5cGVzLmVuZCgpKSB7Ci0gICAgICAgIGlmIChtX3BhcmVudCkKLSAg
ICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0VHlwZXMobmFtZSk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgIC8vIE5hbWVkIHR5cGVzIGNhbiBvbmx5IGJlIGRlY2xhcmVkIGluIHRo
ZSBnbG9iYWwgbmFtZSBjb250ZXh0LgorICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgcmV0dXJu
IG1fcGFyZW50LT5nZXRUeXBlcyhuYW1lLCBmcm9tTmFtZXNwYWNlKTsKKworICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4gcmVzdWx0OworCisgICAg
dW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbU5hbWVzcGFjZSk7Cisg
ICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZXNbaW5kZXhdLmZpbmQobmFtZSk7CisgICAgaWYgKGl0
ZXJhdG9yICE9IG1fdHlwZXNbaW5kZXhdLmVuZCgpKSB7CisgICAgICAgIGZvciAoYXV0byB0eXBl
IDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0eXBlKTsKICAg
ICB9Ci0gICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CisKKyAgICBpZiAoZnJvbU5hbWVzcGFj
ZSAhPSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KSB7CisgICAgICAgIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOwor
ICAgICAgICBpdGVyYXRvciA9IG1fdHlwZXNbaW5kZXhdLmZpbmQobmFtZSk7CisgICAgICAgIGlm
IChpdGVyYXRvciAhPSBtX3R5cGVzW2luZGV4XS5lbmQoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIHR5cGUgOiBpdGVyYXRvci0+dmFsdWUpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh0eXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
KiBOYW1lQ29udGV4dDo6Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYgbmFtZSkKK1ZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IE5hbWVD
b250ZXh0OjpnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJiBuYW1lLCBBU1Q6Ok5hbWVTcGFjZSBm
cm9tTmFtZXNwYWNlKQogewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9ucy5maW5kKG5h
bWUpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2Z1bmN0aW9ucy5lbmQoKSkgewotICAgICAgICBp
ZiAobV9wYXJlbnQpCi0gICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldEZ1bmN0aW9ucyhu
YW1lKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gRnVuY3Rpb25zIGNhbiBvbmx5
IGJlIGRlY2xhcmVkIGluIHRoZSBnbG9iYWwgbmFtZSBjb250ZXh0LgorICAgIGlmIChtX3BhcmVu
dCkKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRGdW5jdGlvbnMobmFtZSwgZnJvbU5hbWVz
cGFjZSk7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24+LCAxPiByZXN1bHQ7CisKKyAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihmcm9tTmFtZXNwYWNlKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5j
dGlvbnNbaW5kZXhdLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25z
W2luZGV4XS5lbmQoKSkgeworICAgICAgICBmb3IgKGF1dG8gdHlwZSA6IGl0ZXJhdG9yLT52YWx1
ZSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7CisgICAgfQorCisgICAgaWYgKGZy
b21OYW1lc3BhY2UgIT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSkgeworICAgICAg
ICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRM
aWJyYXJ5KTsKKyAgICAgICAgaXRlcmF0b3IgPSBtX2Z1bmN0aW9uc1tpbmRleF0uZmluZChuYW1l
KTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25zW2luZGV4XS5lbmQoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIHR5cGUgOiBpdGVyYXRvci0+dmFsdWUpCisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCh0eXBlKTsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4g
Jml0ZXJhdG9yLT52YWx1ZTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiogTmFtZUNvbnRleHQ6OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFt
ZSkKQEAgLTE1MSwxMSArMTkwLDcyIEBAIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogTmFtZUNv
bnRleHQ6OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICByZXR1cm4gaXRlcmF0
b3ItPnZhbHVlOwogfQogCi1ib29sIE5hbWVDb250ZXh0OjpleGlzdHMoU3RyaW5nJiBuYW1lKQor
QVNUOjpOYW1lZFR5cGUqIE5hbWVDb250ZXh0OjpzZWFyY2hUeXBlcyhTdHJpbmcmIG5hbWUpIGNv
bnN0Cit7CisgICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgaWYgKG1fY3VycmVudE5hbWVTcGFj
ZSA9PSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KSB7CisgICAgICAgIGZvciAoYXV0
byYgdHlwZXMgOiBtX3R5cGVzKSB7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSB0eXBlcy5maW5k
KG5hbWUpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gdHlwZXMuZW5kKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZVswXS5nZXQoKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byBpdGVyID0gbV90eXBlc1tpbmRl
eF0uZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtX3R5cGVzW2luZGV4XS5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZVswXS5nZXQoKTsKKworICAgIGluZGV4ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOworICAgIGl0
ZXIgPSBtX3R5cGVzW2luZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChpdGVyICE9IG1fdHlwZXNb
aW5kZXhdLmVuZCgpKQorICAgICAgICByZXR1cm4gJml0ZXItPnZhbHVlWzBdLmdldCgpOworCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogTmFtZUNv
bnRleHQ6OnNlYXJjaEZ1bmN0aW9ucyhTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFtX3BhcmVudCk7CisgICAgaWYgKG1fY3VycmVudE5hbWVTcGFjZSA9PSBBU1Q6Ok5hbWVTcGFj
ZTo6U3RhbmRhcmRMaWJyYXJ5KSB7CisgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25zIDogbV9m
dW5jdGlvbnMpIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IGZ1bmN0aW9ucy5maW5kKG5hbWUp
OworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gZnVuY3Rpb25zLmVuZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiAmaXRlci0+dmFsdWVbMF0uZ2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gaXRlciA9IG1fZnVuY3Rpb25zW2lu
ZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChpdGVyICE9IG1fZnVuY3Rpb25zW2luZGV4XS5lbmQo
KSkKKyAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZVswXS5nZXQoKTsKKworICAgIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOwor
ICAgIGl0ZXIgPSBtX2Z1bmN0aW9uc1tpbmRleF0uZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAh
PSBtX2Z1bmN0aW9uc1tpbmRleF0uZW5kKCkpCisgICAgICAgIHJldHVybiAmaXRlci0+dmFsdWVb
MF0uZ2V0KCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworT3B0aW9uYWw8Q29kZUxvY2F0
aW9uPiBOYW1lQ29udGV4dDo6Z2xvYmFsRXhpc3RzKFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAg
ICBpZiAoYXV0byogdHlwZSA9IHNlYXJjaFR5cGVzKG5hbWUpKQorICAgICAgICByZXR1cm4gdHlw
ZS0+Y29kZUxvY2F0aW9uKCk7CisgICAgaWYgKGF1dG8qIGZ1bmN0aW9uID0gc2VhcmNoRnVuY3Rp
b25zKG5hbWUpKQorICAgICAgICByZXR1cm4gZnVuY3Rpb24tPmNvZGVMb2NhdGlvbigpOworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK0FTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogTmFt
ZUNvbnRleHQ6OmxvY2FsRXhpc3RzKFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV90eXBlcy5maW5kKG5hbWUpICE9IG1fdHlwZXMuZW5kKCkKLSAgICAgICAgfHwgbV9mdW5jdGlv
bnMuZmluZChuYW1lKSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQotICAgICAgICB8fCBtX3ZhcmlhYmxl
cy5maW5kKG5hbWUpICE9IG1fdmFyaWFibGVzLmVuZCgpOworICAgIEFTU0VSVChtX3BhcmVudCk7
CisgICAgYXV0byBpdGVyID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAh
PSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCmluZGV4
IGEwNDg3OGFlN2U5ZjFkODNlNWQ1OTJjMmZkNzUyYmVkYzkwZmE5Y2IuLjM4OWNkMDU4NzFlODJk
NjcxN2MzYjc5NDQ1ODA0Nzc3MTZhMGZkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKQEAgLTI3LDYgKzI3LDkg
QEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5j
bHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIKKwogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01NCwyNSArNTcs
MzUgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogcHVibGljOgogICAgIE5hbWVDb250ZXh0KE5hbWVD
b250ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsKIAotICAgIGJvb2wgYWRkKEFTVDo6VHlwZURlZmlu
aXRpb24mKTsKLSAgICBib29sIGFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsKLSAgICBi
b29sIGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOwotICAgIGJvb2wgYWRkKEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJik7Ci0gICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJik7Ci0gICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsK
LSAgICBib29sIGFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKLQotICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4qIGdldFR5cGVzKGNvbnN0
IFN0cmluZyYpOwotICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+KiBnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJik7CisgICAgdm9p
ZCBzZXRDdXJyZW50TmFtZVNwYWNlKEFTVDo6TmFtZVNwYWNlIGN1cnJlbnROYW1lU3BhY2UpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fcGFyZW50KTsKKyAgICAgICAgbV9jdXJyZW50TmFtZVNw
YWNlID0gY3VycmVudE5hbWVTcGFjZTsKKyAgICB9CisKKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJv
cj4gYWRkKEFTVDo6VHlwZURlZmluaXRpb24mKTsKKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4g
YWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpOworICAgIEV4cGVjdGVkPHZvaWQsIEVycm9y
PiBhZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICBFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gYWRkKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisgICAgRXhwZWN0ZWQ8dm9pZCwg
RXJyb3I+IGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICBFeHBlY3Rl
ZDx2b2lkLCBFcnJvcj4gYWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgRXhw
ZWN0ZWQ8dm9pZCwgRXJyb3I+IGFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKKworICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4gZ2V0VHlw
ZXMoY29uc3QgU3RyaW5nJiwgQVNUOjpOYW1lU3BhY2UgZnJvbU5hbWVzcGFjZSk7CisgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4g
Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYsIEFTVDo6TmFtZVNwYWNlIGZyb21OYW1lc3BhY2Up
OwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogZ2V0VmFyaWFibGUoY29uc3QgU3RyaW5n
Jik7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBleGlzdHMoU3RyaW5nJik7CisgICAgQVNUOjpOYW1l
ZFR5cGUqIHNlYXJjaFR5cGVzKFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKiBzZWFyY2hGdW5jdGlvbnMoU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBP
cHRpb25hbDxDb2RlTG9jYXRpb24+IGdsb2JhbEV4aXN0cyhTdHJpbmcmIG5hbWUpIGNvbnN0Owor
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogbG9jYWxFeGlzdHMoU3RyaW5nJiBuYW1lKSBj
b25zdDsKIAotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6Ok5hbWVkVHlwZT4sIDE+PiBtX3R5cGVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPj4g
bV9mdW5jdGlvbnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXNbM107CisgICAgSGFzaE1hcDxTdHJp
bmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+PiBtX2Z1bmN0aW9uc1szXTsKICAgICBIYXNoTWFwPFN0cmluZywgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uKj4gbV92YXJpYWJsZXM7CiAgICAgTmFtZUNvbnRleHQqIG1fcGFyZW50Owor
ICAgIEFTVDo6TmFtZVNwYWNlIG1fY3VycmVudE5hbWVTcGFjZSB7IEFTVDo6TmFtZVNwYWNlOjpT
dGFuZGFyZExpYnJhcnkgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAppbmRleCA2N2IxYzli
NmQ4NjA1MjQ3ZmMxMmM0YjFlNTNmMzI5NWJmYjk0NDczLi4yNzFlYmQxMjZhMzEwNzg5YjRjOGNm
NzBkZjg0NTc5ZmExZjgyNDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC01Nyw2ICs1Nyw3IEBA
IE5hbWVSZXNvbHZlcjo6TmFtZVJlc29sdmVyKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKIE5h
bWVSZXNvbHZlcjo6TmFtZVJlc29sdmVyKE5hbWVSZXNvbHZlciYgcGFyZW50UmVzb2x2ZXIsIE5h
bWVDb250ZXh0JiBuYW1lQ29udGV4dCkKICAgICA6IG1fbmFtZUNvbnRleHQobmFtZUNvbnRleHQp
CiAgICAgLCBtX3BhcmVudE5hbWVSZXNvbHZlcigmcGFyZW50UmVzb2x2ZXIpCisgICAgLCBtX2N1
cnJlbnROYW1lU3BhY2UocGFyZW50UmVzb2x2ZXIubV9jdXJyZW50TmFtZVNwYWNlKQogewogfQog
CkBAIC04MCwxNCArODEsMTAgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VHlwZVJl
ZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKICAgICBpZiAodHlwZVJlZmVyZW5jZS5tYXliZVJlc29s
dmVkVHlwZSgpKSAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5ODE2MSBTaG91bGRuJ3Qgd2Uga25vdyBieSBub3cgd2hldGhlciB0aGUgdHlwZSBoYXMg
YmVlbiByZXNvbHZlZCBvciBub3Q/CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIGNhbmRp
ZGF0ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKHR5cGVSZWZlcmVuY2UubmFtZSgpKTsKLSAg
ICBpZiAoY2FuZGlkYXRlcyA9PSBudWxscHRyKSB7Ci0gICAgICAgIHNldEVycm9yKEVycm9yKCJD
YW5ub3QgZmluZCB0eXBlIHJlZmVyZW5jZS4iLCB0eXBlUmVmZXJlbmNlLmNvZGVMb2NhdGlvbigp
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiAq
Y2FuZGlkYXRlcykKKyAgICBhdXRvIGNhbmRpZGF0ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVz
KHR5cGVSZWZlcmVuY2UubmFtZSgpLCBtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGZvciAoYXV0
byYgY2FuZGlkYXRlIDogY2FuZGlkYXRlcykKICAgICAgICAgVmlzaXRvcjo6dmlzaXQoY2FuZGlk
YXRlKTsKLSAgICBpZiAoYXV0byByZXN1bHQgPSByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbCgqY2Fu
ZGlkYXRlcywgdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpKQorICAgIGlmIChhdXRvIHJl
c3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKGNhbmRpZGF0ZXMsIHR5cGVSZWZlcmVuY2Uu
dHlwZUFyZ3VtZW50cygpKSkKICAgICAgICAgdHlwZVJlZmVyZW5jZS5zZXRSZXNvbHZlZFR5cGUo
KnJlc3VsdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgcmVz
b2x2ZSB0eXBlIGFyZ3VtZW50cy4iLCB0eXBlUmVmZXJlbmNlLmNvZGVMb2NhdGlvbigpKSk7CkBA
IC0xOTIsOSArMTg5LDkgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVz
c2lvbiYgZG90RXhwcmVzc2lvbikKICAgICAgICAgYXV0byYgdmFyaWFibGVSZWZlcmVuY2UgPSBk
b3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSk7CiAg
ICAgICAgIGlmICghbV9uYW1lQ29udGV4dC5nZXRWYXJpYWJsZSh2YXJpYWJsZVJlZmVyZW5jZS5u
YW1lKCkpKSB7CiAgICAgICAgICAgICBhdXRvIGJhc2VOYW1lID0gdmFyaWFibGVSZWZlcmVuY2Uu
bmFtZSgpOwotICAgICAgICAgICAgaWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNv
bnRleHQuZ2V0VHlwZXMoYmFzZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVudW1l
cmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlw
ZSYgdHlwZSA9ICgqZW51bWVyYXRpb25UeXBlcylbMF07CisgICAgICAgICAgICBhdXRvIGVudW1l
cmF0aW9uVHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGJhc2VOYW1lLCBtX2N1cnJlbnRO
YW1lU3BhY2UpOworICAgICAgICAgICAgaWYgKGVudW1lcmF0aW9uVHlwZXMuc2l6ZSgpID09IDEp
IHsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9IGVudW1lcmF0aW9uVHlw
ZXNbMF07CiAgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
Pih0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
biYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24+KHR5cGUpOwogICAgICAgICAgICAgICAgICAgICBhdXRvIG1lbWJlck5hbWUgPSBkb3RF
eHByZXNzaW9uLmZpZWxkTmFtZSgpOwpAQCAtMjA2LDcgKzIwMyw4IEBAIHZvaWQgTmFtZVJlc29s
dmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiAgICAgICAgICAg
ICAgICAgICAgIHNldEVycm9yKEVycm9yKCJObyBlbnVtIG1lbWJlciBtYXRjaGVzIHRoZSB1c2Vk
IG5hbWUuIiwgZG90RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMuaXNFbXB0
eSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjE4LDkgKzIxNiwxMCBAQCB2b2lkIE5hbWVS
ZXNvbHZlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbAogICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRp
b25NZW1iZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8gZW51bWVyYXRpb25U
eXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmxl
ZnQoKSkpIHsKLSAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsK
LSAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBdOwor
ICAgIGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmxlZnQoKSwgbV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBpZiAo
ZW51bWVyYXRpb25UeXBlcy5zaXplKCkgPT0gMSkgeworICAgICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTMzNSBUaGlzIG5lZWRzIHRvIHdv
cmsgd2l0aCB0eXBlZGVmJ2VkIGVudW1zLgorICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9
IGVudW1lcmF0aW9uVHlwZXNbMF07CiAgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbj4odHlwZSkpIHsKICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
JiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbj4odHlwZSk7CiAgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVyYXRpb25E
ZWZpbml0aW9uLm1lbWJlckJ5TmFtZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwucmlnaHQoKSkp
IHsKQEAgLTIyOSw3ICsyMjgsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbAogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5v
dCByZXNvbHZlIGVudW1lcmF0aW9uIG1lbWJlciBsaXRlcmFsLiIsIGVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbC5jb2RlTG9jYXRpb24oKSkpOwogfQogCkBAIC0yNDUsMjEgKzI0NCwyNSBAQCB2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aQogRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHJlc29sdmVOYW1lc0lu
VHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCiB7CiAg
ICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkp
IHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnROYW1lU3BhY2UodHlwZURlZmluaXRp
b24uZ2V0KCkubmFtZVNwYWNlKCkpOwogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KHR5cGVEZWZpbml0aW9uKTsKICAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJv
cigpKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5yZXN1bHQoKTsKICAgICB9CiAg
ICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZp
bml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50TmFtZVNwYWNlKHN0
cnVjdHVyZURlZmluaXRpb24uZ2V0KCkubmFtZVNwYWNlKCkpOwogICAgICAgICBuYW1lUmVzb2x2
ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOwogICAgICAgICBpZiAo
bmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVy
LnJlc3VsdCgpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6
IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZl
ci5zZXRDdXJyZW50TmFtZVNwYWNlKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5nZXQoKS5uYW1lU3Bh
Y2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRp
b25EZWZpbml0aW9uKTsKICAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQogICAg
ICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5yZXN1bHQoKTsKICAgICB9CiAgICAgZm9yIChh
dXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudE5hbWVTcGFjZShuYXRpdmVU
eXBlRGVjbGFyYXRpb24uZ2V0KCkubmFtZVNwYWNlKCkpOwogICAgICAgICBuYW1lUmVzb2x2ZXIu
Y2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiAgICAgICAgIGlmIChu
YW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKICAgICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2ZXIu
cmVzdWx0KCk7CkBAIC0yNzAsMTEgKzI3MywxMyBAQCBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVz
b2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZQog
RXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHJlc29sdmVUeXBlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFt
JiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKIHsKICAgICBmb3IgKGF1dG8m
IGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7Cisg
ICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50TmFtZVNwYWNlKGZ1bmN0aW9uRGVmaW5pdGlv
bi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5k
VmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKICAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNF
cnJvcigpKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5yZXN1bHQoKTsKICAgICB9
CiAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJy
ZW50TmFtZVNwYWNlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uZ2V0KCkubmFtZVNwYWNlKCkp
OwogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAgICAg
ICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKaW5kZXgg
NjU4YzM1ZmNkYjU3MmUyNGQ1ODIxNzFmMTFlOGM2YTJiYTAzMmU3My4uYTc5MjRlMDVmZjZhYTBh
ZGY2OWJkM2M2ODIyYTNjYmVmZDdjMzE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCkBAIC00Niw2ICs0Niw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfk5hbWVSZXNvbHZlcigpOwogCisgICAgdm9pZCBz
ZXRDdXJyZW50TmFtZVNwYWNlKEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkgeyBtX2N1cnJlbnRO
YW1lU3BhY2UgPSBuYW1lU3BhY2U7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKQEAgLTYzLDYgKzY1LDcgQEAgcHJpdmF0
ZToKICAgICBOYW1lQ29udGV4dCYgbV9uYW1lQ29udGV4dDsKICAgICBIYXNoU2V0PEFTVDo6VHlw
ZVJlZmVyZW5jZSo+IG1fdHlwZVJlZmVyZW5jZXM7CiAgICAgTmFtZVJlc29sdmVyKiBtX3BhcmVu
dE5hbWVSZXNvbHZlciB7IG51bGxwdHIgfTsKKyAgICBBU1Q6Ok5hbWVTcGFjZSBtX2N1cnJlbnRO
YW1lU3BhY2UgeyBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5IH07CiB9OwogCiBFeHBl
Y3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJlc29s
dmVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFBhcnNlci5jcHAKaW5kZXggMDE2MTE0YTYxMGUxMTAwZWZlNjk3MmNhMmEyMzUzMjdjMTUyZTdh
Yi4uODlkNWZhZWU5YTIyZWQ1MTJjZmMyZmFhNjMxNzVkNWE0OTVkOWM0YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApAQCAt
NDEsMjQgKzQxLDIzIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAjZGVmaW5lIFBBUlNFKG5hbWUsIGVs
ZW1lbnQsIC4uLikgXAogICAgIGF1dG8gbmFtZSA9IHBhcnNlIyNlbGVtZW50KF9fVkFfQVJHU19f
KTsgXAogICAgIGlmICghbmFtZSkgXAotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
bmFtZS5lcnJvcigpKTsgXAorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJv
cigpKTsgXAogCiAjZGVmaW5lIENPTlNVTUVfVFlQRShuYW1lLCB0eXBlKSBcCiAgICAgYXV0byBu
YW1lID0gY29uc3VtZVR5cGUoVG9rZW46OlR5cGU6OnR5cGUpOyBcCiAgICAgaWYgKCFuYW1lKSBc
Ci0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsKIAogI2RlZmluZSBQRUVLKG5h
bWUpIFwKICAgICBhdXRvIG5hbWUgPSBwZWVrKCk7IFwKICAgICBpZiAoIW5hbWUpIFwKLSAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChuYW1lLmVycm9yKCkpOwogCiAjZGVmaW5lIFBFRUtfRlVSVEhFUihu
YW1lKSBcCiAgICAgYXV0byBuYW1lID0gcGVla0Z1cnRoZXIoKTsgXAogICAgIGlmICghbmFtZSkg
XAotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG5hbWUuZXJyb3IoKSk7CiAKLS8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NjgyIFJldHVybiBhIGJldHRl
ciBlcnJvciBjb2RlIGZyb20gdGhpcywgYW5kIHJlcG9ydCBpdCB0byBKYXZhU2NyaXB0LgogYXV0
byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
UGFyc2luZ01vZGUgbW9kZSkgLT4gRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+CiB7CiAgICAgbV9sZXhl
ciA9IExleGVyKHN0cmluZ1ZpZXcpOwpAQCAtNzYsMjUgKzc1LDMyIEBAIGF1dG8gUGFyc2VyOjpw
YXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFBhcnNpbmdNb2Rl
IG1vZGUpIC0+CiAgICAgICAgICAgICBhdXRvIHR5cGVEZWZpbml0aW9uID0gcGFyc2VUeXBlRGVm
aW5pdGlvbigpOwogICAgICAgICAgICAgaWYgKCF0eXBlRGVmaW5pdGlvbikKICAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodHlwZURlZmluaXRpb24uZXJyb3IoKSk7Ci0gICAg
ICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOworICAgICAg
ICAgICAgYXV0byBhcHBlbmRSZXN1bHQgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVm
aW5pdGlvbikpOworICAgICAgICAgICAgaWYgKCFhcHBlbmRSZXN1bHQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFwcGVuZFJlc3VsdC5lcnJvcigpKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlN0cnVj
dDogewogICAgICAgICAgICAgYXV0byBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gcGFyc2VTdHJ1Y3R1
cmVEZWZpbml0aW9uKCk7CiAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZURlZmluaXRpb24pCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHN0cnVjdHVyZURlZmluaXRpb24u
ZXJyb3IoKSk7Ci0gICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpzdHJ1Y3R1cmVE
ZWZpbml0aW9uKSk7CisgICAgICAgICAgICBhdXRvIGFwcGVuZFJlc3VsdCA9IHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgIGlmICghYXBw
ZW5kUmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChhcHBlbmRS
ZXN1bHQuZXJyb3IoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIFRva2VuOjpUeXBlOjpFbnVtOiB7CiAgICAgICAgICAgICBhdXRvIGVudW1lcmF0aW9u
RGVmaW5pdGlvbiA9IHBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICBp
ZiAoIWVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZW51bWVyYXRpb25EZWZpbml0aW9uLmVycm9yKCkpOwotICAgICAgICAgICAgcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CisgICAgICAgICAg
ICBhdXRvIGFwcGVuZFJlc3VsdCA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9u
RGVmaW5pdGlvbikpOworICAgICAgICAgICAgaWYgKCFhcHBlbmRSZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFwcGVuZFJlc3VsdC5lcnJvcigpKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6Ok5h
dGl2ZTogewotICAgICAgICAgICAgQVNTRVJUKG1fbW9kZSA9PSBQYXJzaW5nTW9kZTo6U3RhbmRh
cmRMaWJyYXJ5KTsKKyAgICAgICAgICAgIGlmIChtX21vZGUgIT0gUGFyc2luZ01vZGU6OlN0YW5k
YXJkTGlicmFyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChtYWtlU3RyaW5nKCInbmF0
aXZlJyBjYW4ndCBleGlzdCBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiIpKTsKICAg
ICAgICAgICAgIGF1dG8gZnVydGhlclRva2VuID0gcGVla0Z1cnRoZXIoKTsKICAgICAgICAgICAg
IGlmICghZnVydGhlclRva2VuKQogICAgICAgICAgICAgICAgIHJldHVybiB7IH07CkBAIC0xMDIs
MjAgKzEwOCwyNiBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5n
VmlldyBzdHJpbmdWaWV3LCBQYXJzaW5nTW9kZSBtb2RlKSAtPgogICAgICAgICAgICAgICAgIGF1
dG8gbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gcGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRpb24oKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5lcnJv
cigpKTsKLSAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBl
RGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIGFwcGVuZFJlc3VsdCA9IHByb2dy
YW0uYXBwZW5kKFdURk1vdmUoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAg
ICAgIGlmICghYXBwZW5kUmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoYXBwZW5kUmVzdWx0LmVycm9yKCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXV0byBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uID0gcGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICBpZiAo
IW5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uZXJyb3IoKSk7Ci0gICAgICAgICAg
ICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cisg
ICAgICAgICAgICBhdXRvIGFwcGVuZFJlc3VsdCA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIGlmICghYXBwZW5kUmVzdWx0
KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChhcHBlbmRSZXN1bHQuZXJy
b3IoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0
OiB7CiAgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uRGVmaW5pdGlvbiA9IHBhcnNlRnVuY3Rpb25E
ZWZpbml0aW9uKCk7CiAgICAgICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmaW5pdGlvbikKICAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZnVuY3Rpb25EZWZpbml0aW9uLmVycm9y
KCkpOwotICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqZnVuY3Rpb25EZWZpbml0
aW9uKSk7CisgICAgICAgICAgICBhdXRvIGFwcGVuZFJlc3VsdCA9IHByb2dyYW0uYXBwZW5kKFdU
Rk1vdmUoKmZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgaWYgKCFhcHBlbmRSZXN1
bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFwcGVuZFJlc3VsdC5l
cnJvcigpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTEyOCw5ICsxNDAsOSBAQCBhdXRvIFBhcnNlcjo6ZmFpbChjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFRyeVRvUGVlayB0cnlUb1BlZWspIC0+IFVuZXhwZWN0ZWQ8RXJybwogewogICAgIGlmICh0cnlU
b1BlZWsgPT0gVHJ5VG9QZWVrOjpZZXMpIHsKICAgICAgICAgaWYgKGF1dG8gbmV4dFRva2VuID0g
cGVlaygpKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1fbGV4
ZXIuZXJyb3JTdHJpbmcoKm5leHRUb2tlbiwgbWVzc2FnZSkpKTsKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChFcnJvcihtX2xleGVyLmVycm9yU3RyaW5nKCpuZXh0VG9rZW4sIG1l
c3NhZ2UpKSk7CiAgICAgfQotICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihtYWtl
U3RyaW5nKCJDYW5ub3QgbGV4OiAiLCBtZXNzYWdlKSkpOworICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChFcnJvcihtYWtlU3RyaW5nKCJDYW5ub3QgbGV4OiAiLCBtZXNzYWdlKSkpOwogfQogCiBh
dXRvIFBhcnNlcjo6cGVlaygpIC0+IEV4cGVjdGVkPFRva2VuLCBFcnJvcj4KQEAgLTMwNiwyMSAr
MzE4LDIxIEBAIGF1dG8gUGFyc2VyOjpjb25zdW1lSW50ZWdyYWxMaXRlcmFsKCkgLT4gRXhwZWN0
ZWQ8VmFyaWFudDxpbnQsIHVuc2lnbmVkPiwgRXJyb3I+CiB7CiAgICAgYXV0byBpbnRlZ3JhbExp
dGVyYWxUb2tlbiA9IGNvbnN1bWVUeXBlczxUb2tlbjo6VHlwZTo6SW50TGl0ZXJhbCwgVG9rZW46
OlR5cGU6OlVpbnRMaXRlcmFsPigpOwogICAgIGlmICghaW50ZWdyYWxMaXRlcmFsVG9rZW4pCi0g
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihpbnRlZ3JhbExpdGVyYWxUb2tlbi5lcnJv
cigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGludGVncmFsTGl0ZXJhbFRva2Vu
LmVycm9yKCkpOwogCiAgICAgc3dpdGNoIChpbnRlZ3JhbExpdGVyYWxUb2tlbi0+dHlwZSkgewog
ICAgIGNhc2UgVG9rZW46OlR5cGU6OkludExpdGVyYWw6IHsKICAgICAgICAgYXV0byByZXN1bHQg
PSBpbnRMaXRlcmFsVG9JbnQoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnN0cmluZ1ZpZXcobV9sZXhl
cikpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHt7ICpyZXN1bHQg
fX07Ci0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyZXN1bHQuZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQuZXJyb3IoKSk7CiAgICAgfQogICAg
IGRlZmF1bHQ6IHsKICAgICAgICAgQVNTRVJUKGludGVncmFsTGl0ZXJhbFRva2VuLT50eXBlID09
IFRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbCk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdWludExp
dGVyYWxUb1VpbnQoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnN0cmluZ1ZpZXcobV9sZXhlcikpOwog
ICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHt7ICpyZXN1bHQgfX07Ci0g
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQuZXJyb3IoKSk7CiAgICAgfQogICAgIH0KIH0K
QEAgLTMyOSw3ICszNDEsNyBAQCBhdXRvIFBhcnNlcjo6Y29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdy
YWxMaXRlcmFsKCkgLT4gRXhwZWN0ZWQ8dW5zaWduZWQsIEVycm9yPgogewogICAgIGF1dG8gaW50
ZWdyYWxMaXRlcmFsID0gY29uc3VtZUludGVncmFsTGl0ZXJhbCgpOwogICAgIGlmICghaW50ZWdy
YWxMaXRlcmFsKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oaW50ZWdyYWxMaXRl
cmFsLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoaW50ZWdyYWxMaXRl
cmFsLmVycm9yKCkpOwogICAgIGF1dG8gcmVzdWx0ID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFtdKGludCB4KSAtPiBPcHRpb25hbDx1bnNpZ25lZD4gewogICAgICAgICBpZiAoeCA8IDAp
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMzY5LDI1ICszODEsMjUgQEAg
YXV0byBQYXJzZXI6OnBhcnNlQ29uc3RhbnRFeHByZXNzaW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpD
b25zdGFudEV4cHJlc3Npb24sIEVycm8KICAgICAgICAgVG9rZW46OlR5cGU6OkZhbHNlLAogICAg
ICAgICBUb2tlbjo6VHlwZTo6SWRlbnRpZmllcj4oKTsKICAgICBpZiAoIXR5cGUpCi0gICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQodHlwZS5lcnJvcigpKTsKIAogICAgIHN3aXRjaCAodHlwZS0+dHlwZSkg
ewogICAgIGNhc2UgVG9rZW46OlR5cGU6OkludExpdGVyYWw6IHsKICAgICAgICAgYXV0byB2YWx1
ZSA9IGludExpdGVyYWxUb0ludCh0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAg
aWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5l
cnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh2YWx1ZS5lcnJvcigp
KTsKICAgICAgICAgcmV0dXJuIHt7IEFTVDo6SW50ZWdlckxpdGVyYWwoeyAqdHlwZSB9LCAqdmFs
dWUpIH19OwogICAgIH0KICAgICBjYXNlIFRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbDogewogICAg
ICAgICBhdXRvIHZhbHVlID0gdWludExpdGVyYWxUb1VpbnQodHlwZS0+c3RyaW5nVmlldyhtX2xl
eGVyKSk7CiAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQodmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7eyBBU1Q6OlVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwoeyAqdHlwZSB9LCAqdmFsdWUpIH19OwogICAgIH0KICAgICBjYXNlIFRva2VuOjpU
eXBlOjpGbG9hdExpdGVyYWw6IHsKICAgICAgICAgYXV0byB2YWx1ZSA9IGZsb2F0TGl0ZXJhbFRv
RmxvYXQodHlwZS0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmICghdmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJl
dHVybiB7eyBBU1Q6OkZsb2F0TGl0ZXJhbCh7ICp0eXBlIH0sICp2YWx1ZSkgfX07CiAgICAgfQog
ICAgIGNhc2UgVG9rZW46OlR5cGU6Ok51bGw6CkBAIC00NTIsMTEgKzQ2NCwxMSBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKSAtPiBFeHBlY3RlZDxUeXBlU3VmZml4
QWJicmV2aWF0ZWQsIEVycgogICAgICAgICBUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXIs
CiAgICAgICAgIFRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldD4oKTsKICAgICBpZiAoIXRv
a2VuKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odG9rZW4uZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh0b2tlbi5lcnJvcigpKTsKICAgICBpZiAodG9r
ZW4tPnR5cGUgPT0gVG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0KSB7CiAgICAgICAgIGF1
dG8gbnVtRWxlbWVudHMgPSBjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbExpdGVyYWwoKTsKICAg
ICAgICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPihudW1FbGVtZW50cy5lcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChudW1FbGVtZW50cy5lcnJvcigpKTsKICAgICAgICAgQ09OU1VNRV9UWVBFKHJpZ2h0U3F1
YXJlQnJhY2tldCwgUmlnaHRTcXVhcmVCcmFja2V0KTsKICAgICAgICAgcmV0dXJuIHt7IHsgKnRv
a2VuLCAqcmlnaHRTcXVhcmVCcmFja2V0IH0sICp0b2tlbiwgKm51bUVsZW1lbnRzIH19OwogICAg
IH0KQEAgLTQ3MCwxMSArNDgyLDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhOb25B
YmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlCiAgICAgICAg
IFRva2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0UGFpciwKICAgICAgICAgVG9rZW46OlR5cGU6Okxl
ZnRTcXVhcmVCcmFja2V0PigpOwogICAgIGlmICghdG9rZW4pCi0gICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPih0b2tlbi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKHRva2VuLmVycm9yKCkpOwogICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6VHlwZTo6
TGVmdFNxdWFyZUJyYWNrZXQpIHsKICAgICAgICAgYXV0byBudW1FbGVtZW50cyA9IGNvbnN1bWVO
b25OZWdhdGl2ZUludGVncmFsTGl0ZXJhbCgpOwogICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQot
ICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG51bUVsZW1lbnRzLmVycm9yKCkp
OworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG51bUVsZW1lbnRzLmVycm9yKCkp
OwogICAgICAgICBDT05TVU1FX1RZUEUocmlnaHRTcXVhcmVCcmFja2V0LCBSaWdodFNxdWFyZUJy
YWNrZXQpOwogICAgICAgICByZXR1cm4ge3sgeyAqdG9rZW4sICpyaWdodFNxdWFyZUJyYWNrZXQg
fSwgKnRva2VuLCBXVEY6Om51bGxvcHQsICpudW1FbGVtZW50cyB9fTsKICAgICB9CkBAIC00ODQs
NyArNDk2LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCkg
LT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGUKICAgICAgICAgVG9rZW46OlR5cGU6
OlRocmVhZGdyb3VwLAogICAgICAgICBUb2tlbjo6VHlwZTo6VGhyZWFkPigpOwogICAgIGlmICgh
YWRkcmVzc1NwYWNlVG9rZW4pCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRy
ZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFk
ZHJlc3NTcGFjZVRva2VuLmVycm9yKCkpOwogICAgIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NT
cGFjZTsKICAgICBzd2l0Y2ggKGFkZHJlc3NTcGFjZVRva2VuLT50eXBlKSB7CiAgICAgY2FzZSBU
b2tlbjo6VHlwZTo6Q29uc3RhbnQ6CkBAIC02MTksNyArNjMxLDcgQEAgYXV0byBQYXJzZXI6OnBh
cnNlQnVpbHRJblNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpCdWlsdEluU2VtYW50aWMsIEVy
cm9yPgogICAgICAgICBUb2tlbjo6VHlwZTo6U1ZHcm91cEluZGV4LAogICAgICAgICBUb2tlbjo6
VHlwZTo6U1ZHcm91cFRocmVhZElEPigpOwogICAgIGlmICghb3JpZ2luKQotICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQob3JpZ2luLmVycm9yKCkpOwogCiAgICAgc3dpdGNoIChvcmlnaW4tPnR5cGUp
IHsKICAgICBjYXNlIFRva2VuOjpUeXBlOjpTVkluc3RhbmNlSUQ6CkBAIC02MzksNyArNjUxLDcg
QEAgYXV0byBQYXJzZXI6OnBhcnNlQnVpbHRJblNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpC
dWlsdEluU2VtYW50aWMsIEVycm9yPgogICAgIGNhc2UgVG9rZW46OlR5cGU6OlNWVGFyZ2V0OiB7
CiAgICAgICAgIGF1dG8gdGFyZ2V0ID0gY29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFs
KCk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1
ODA3IE1ha2UgdGhpcyB3b3JrIHdpdGggc3RyaW5ncyBsaWtlICJTVl9UYXJnZXQwIi4KICAgICAg
ICAgaWYgKCF0YXJnZXQpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odGFy
Z2V0LmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHRhcmdldC5l
cnJvcigpKTsKICAgICAgICAgcmV0dXJuIEFTVDo6QnVpbHRJblNlbWFudGljKHsgKm9yaWdpbiB9
LCBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWVGFyZ2V0LCAqdGFyZ2V0KTsKICAg
ICB9CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U1ZEZXB0aDoKQEAgLTY2OSw3ICs2ODEsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VSZXNvdXJjZVNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpSZXNv
dXJjZVNlbWFudGljLCBFcnJvcj4KICAgICAgICAgJiYgaW5mb1N0cmluZ1ZpZXdbMF0gIT0gJ3Qn
CiAgICAgICAgICYmIGluZm9TdHJpbmdWaWV3WzBdICE9ICdiJwogICAgICAgICAmJiBpbmZvU3Ry
aW5nVmlld1swXSAhPSAncycpKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJy
b3IobWFrZVN0cmluZyhpbmZvU3RyaW5nVmlldy5zdWJzdHJpbmcoMCwgMSksICIgaXMgbm90IGEg
a25vd24gcmVzb3VyY2UgdHlwZSAoJ3UnLCAndCcsICdiJywgb3IgJ3MnKSIpKSk7CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKGluZm9TdHJpbmdWaWV3LnN1
YnN0cmluZygwLCAxKSwgIiBpcyBub3QgYSBrbm93biByZXNvdXJjZSB0eXBlICgndScsICd0Jywg
J2InLCBvciAncycpIikpKTsKIAogICAgIEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZSBtb2Rl
OwogICAgIHN3aXRjaCAoaW5mb1N0cmluZ1ZpZXdbMF0pIHsKQEAgLTY4OSw3ICs3MDEsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VSZXNvdXJjZVNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpSZXNv
dXJjZVNlbWFudGljLCBFcnJvcj4KIAogICAgIGF1dG8gaW5kZXggPSByZWNvZ25pemVTaW1wbGVV
bnNpZ25lZEludGVnZXIoaW5mb1N0cmluZ1ZpZXcuc3Vic3RyaW5nKDEpKTsKICAgICBpZiAoIWlu
ZGV4KQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oaW5kZXguZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChpbmRleC5lcnJvcigpKTsKIAogICAgIHVuc2ln
bmVkIHNwYWNlID0gMDsKICAgICBpZiAodHJ5VHlwZShUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CkBA
IC02OTcsMTIgKzcwOSwxMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VSZXNvdXJjZVNlbWFudGljKCkg
LT4gRXhwZWN0ZWQ8QVNUOjpSZXNvdXJjZVNlbWFudGljLCBFcnJvcj4KICAgICAgICAgYXV0byBz
cGFjZVRva2VuU3RyaW5nVmlldyA9IHNwYWNlVG9rZW4tPnN0cmluZ1ZpZXcobV9sZXhlcik7CiAg
ICAgICAgIFN0cmluZ1ZpZXcgcHJlZml4IHsgInNwYWNlIiB9OwogICAgICAgICBpZiAoIXNwYWNl
VG9rZW5TdHJpbmdWaWV3LnN0YXJ0c1dpdGgocHJlZml4KSkKLSAgICAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihFcnJvcihtYWtlU3RyaW5nKCJTZWNvbmQgYXJndW1lbnQgdG8gcmVz
b3VyY2Ugc2VtYW50aWMgIiwgc3BhY2VUb2tlblN0cmluZ1ZpZXcsICIgbmVlZHMgYmUgb2YgdGhl
IGZvcm0gJ3NwYWNlMCciKSkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVy
cm9yKG1ha2VTdHJpbmcoIlNlY29uZCBhcmd1bWVudCB0byByZXNvdXJjZSBzZW1hbnRpYyAiLCBz
cGFjZVRva2VuU3RyaW5nVmlldywgIiBuZWVkcyBiZSBvZiB0aGUgZm9ybSAnc3BhY2UwJyIpKSk7
CiAgICAgICAgIGlmIChzcGFjZVRva2VuU3RyaW5nVmlldy5sZW5ndGgoKSA8PSBwcmVmaXgubGVu
Z3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJyb3IobWFrZVN0
cmluZygiU2Vjb25kIGFyZ3VtZW50IHRvIHJlc291cmNlIHNlbWFudGljICIsIHNwYWNlVG9rZW5T
dHJpbmdWaWV3LCAiIG5lZWRzIGJlIG9mIHRoZSBmb3JtICdzcGFjZTAnIikpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKCJTZWNvbmQgYXJndW1l
bnQgdG8gcmVzb3VyY2Ugc2VtYW50aWMgIiwgc3BhY2VUb2tlblN0cmluZ1ZpZXcsICIgbmVlZHMg
YmUgb2YgdGhlIGZvcm0gJ3NwYWNlMCciKSkpOwogICAgICAgICBhdXRvIHNwYWNlVmFsdWUgPSBy
ZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVnZXIoc3BhY2VUb2tlblN0cmluZ1ZpZXcuc3Vic3Ry
aW5nKHByZWZpeC5sZW5ndGgoKSkpOwogICAgICAgICBpZiAoIXNwYWNlVmFsdWUpCi0gICAgICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oc3BhY2VWYWx1ZS5lcnJvcigpKTsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcGFjZVZhbHVlLmVycm9yKCkpOwogICAgICAg
ICBzcGFjZSA9ICpzcGFjZVZhbHVlOwogICAgIH0KIApAQCAtNzI0LDcgKzczNiw3IEBAIGF1dG8g
UGFyc2VyOjpwYXJzZVN0YWdlSW5PdXRTZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6U3RhZ2VJ
bk91dFNlbWFudGljLCBFcnJvCiAKICAgICBhdXRvIGluZGV4ID0gY29uc3VtZU5vbk5lZ2F0aXZl
SW50ZWdyYWxMaXRlcmFsKCk7CiAgICAgaWYgKCFpbmRleCkKLSAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KGluZGV4LmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoaW5kZXguZXJyb3IoKSk7CiAKICAgICBDT05TVU1FX1RZUEUocmlnaHRQYXJlbnRoZXNpcywg
UmlnaHRQYXJlbnRoZXNpcyk7CiAKQEAgLTgyMSw3ICs4MzMsNyBAQCBhdXRvIFBhcnNlcjo6cGFy
c2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbgogICAgICAgICByZXR1cm4geyBBU1Q6OlR5cGVSZWZlcmVuY2U6OmNyZWF0ZSgqb3Jp
Z2luLCAiaW50Il9zdHIsIEFTVDo6VHlwZUFyZ3VtZW50cygpKSB9OwogICAgIH0pKCk7CiAgICAg
aWYgKCF0eXBlKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odHlwZS5lcnJvcigp
KTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHR5cGUuZXJyb3IoKSk7CiAKICAgICBD
T05TVU1FX1RZUEUobGVmdEN1cmx5QnJhY2tldCwgTGVmdEN1cmx5QnJhY2tldCk7CiAKQEAgLTg2
OCw3ICs4ODAsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbk1lbWJlcihpbnQ2NF90
IGRlZmF1bHRWYWx1ZSkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVtZQogICAgICAgICB9KSk7CiAKICAg
ICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPigi
ZW51bSBpbml0aWFsaXphdGlvbiB2YWx1ZXMgY2FuIG9ubHkgYmUgYW4gaW50IG9yIHVpbnQgY29u
c3RhbnQuIik7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoImVudW0g
aW5pdGlhbGl6YXRpb24gdmFsdWVzIGNhbiBvbmx5IGJlIGFuIGludCBvciB1aW50IGNvbnN0YW50
LiIpKTsKICAgICAgICAgcmV0dXJuIEFTVDo6RW51bWVyYXRpb25NZW1iZXIoKmlkZW50aWZpZXIs
IFdURk1vdmUobmFtZSksICp2YWx1ZSk7CiAgICAgfQogICAgIHJldHVybiBBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyKCppZGVudGlmaWVyLCBXVEZNb3ZlKG5hbWUpLCBkZWZhdWx0VmFsdWUpOwpAQCAt
ODkyLDE5ICs5MDQsMTkgQEAgYXV0byBQYXJzZXI6OnBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0
cmlidXRlKCkgLT4gRXhwZWN0ZWQ8QVNUOjpOdW1UaHJlYWRzRnVuY3QKIAogICAgIGF1dG8gd2lk
dGggPSBjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbExpdGVyYWwoKTsKICAgICBpZiAoIXdpZHRo
KQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4od2lkdGguZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh3aWR0aC5lcnJvcigpKTsKIAogICAgIENPTlNVTUVf
VFlQRShjb21tYSwgQ29tbWEpOwogCiAgICAgYXV0byBoZWlnaHQgPSBjb25zdW1lTm9uTmVnYXRp
dmVJbnRlZ3JhbExpdGVyYWwoKTsKICAgICBpZiAoIWhlaWdodCkKLSAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KGhlaWdodC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGhlaWdodC5lcnJvcigpKTsKIAogICAgIENPTlNVTUVfVFlQRShzZWNvbmRDb21tYSwg
Q29tbWEpOwogCiAgICAgYXV0byBkZXB0aCA9IGNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTGl0
ZXJhbCgpOwogICAgIGlmICghZGVwdGgpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihkZXB0aC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGRlcHRoLmVy
cm9yKCkpOwogCiAgICAgQ09OU1VNRV9UWVBFKHJpZ2h0UGFyZW50aGVzaXMsIFJpZ2h0UGFyZW50
aGVzaXMpOwogCkBAIC05OTMsNyArMTAwNSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZlcnRleE9y
RnJhZ21lbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvCiB7
CiAgICAgYXV0byBlbnRyeVBvaW50ID0gY29uc3VtZVR5cGVzPFRva2VuOjpUeXBlOjpWZXJ0ZXgs
IFRva2VuOjpUeXBlOjpGcmFnbWVudD4oKTsKICAgICBpZiAoIWVudHJ5UG9pbnQpCi0gICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihlbnRyeVBvaW50LmVycm9yKCkpOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZW50cnlQb2ludC5lcnJvcigpKTsKICAgICBhdXRvIGVudHJ5
UG9pbnRUeXBlID0gKGVudHJ5UG9pbnQtPnR5cGUgPT0gVG9rZW46OlR5cGU6OlZlcnRleCkgPyBB
U1Q6OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXggOiBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVu
dDsKIAogICAgIFBBUlNFKHR5cGUsIFR5cGUpOwpAQCAtMTAxNSw3ICsxMDI3LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXQKIAogICAgIGF1dG8gbmFtZSA9IGNvbnN1bWVUeXBlczxUb2tlbjo6
VHlwZTo6SWRlbnRpZmllciwgVG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZT4oKTsKICAgICBpZiAo
IW5hbWUpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsKICAgICBhdXRvIGlz
T3BlcmF0b3IgPSBuYW1lLT50eXBlID09IFRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWU7CiAKICAg
ICBQQVJTRShwYXJhbWV0ZXJzLCBQYXJhbWV0ZXJzKTsKQEAgLTExMzYsNyArMTE0OCw3IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZVN3aXRjaENhc2UoKSAtPiBFeHBlY3RlZDxBU1Q6OlN3aXRjaENhc2Us
IEVycm9yPgogewogICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGVzPFRva2VuOjpUeXBlOjpD
YXNlLCBUb2tlbjo6VHlwZTo6RGVmYXVsdD4oKTsKICAgICBpZiAoIW9yaWdpbikKLSAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKG9yaWdpbi5lcnJvcigpKTsKIAogICAgIHN3aXRjaCAob3JpZ2luLT50
eXBlKSB7CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6Q2FzZTogewpAQCAtMTE3MSw3ICsxMTgzLDcg
QEAgYXV0byBQYXJzZXI6OnBhcnNlRm9yTG9vcCgpIC0+IEV4cGVjdGVkPEFTVDo6Rm9yTG9vcCwg
RXJyb3I+CiAgICAgICAgICAgICBpZiAoYXV0byBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9u
KCkpCiAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gKCpleHByZXNzaW9uKS5tb3ZlVG9Vbmlx
dWVQdHIoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXhwcmVzc2lvbi5lcnJvcigpKTsKICAgICAgICAgICAgIENPTlNVTUVf
VFlQRShzZWNvbmRTZW1pY29sb24sIFNlbWljb2xvbik7CiAgICAgICAgIH0KIApAQCAtMTE4MCw3
ICsxMTkyLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRm9yTG9vcCgpIC0+IEV4cGVjdGVkPEFTVDo6
Rm9yTG9vcCwgRXJyb3I+CiAgICAgICAgICAgICBpZiAoYXV0byBleHByZXNzaW9uID0gcGFyc2VF
eHByZXNzaW9uKCkpCiAgICAgICAgICAgICAgICAgaW5jcmVtZW50ID0gKCpleHByZXNzaW9uKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXhwcmVzc2lvbi5lcnJvcigpKTsKICAgICAgICAgICAg
IENPTlNVTUVfVFlQRShyaWdodFBhcmVudGhlc2lzLCBSaWdodFBhcmVudGhlc2lzKTsKICAgICAg
ICAgfQogCkBAIC0xMjU0LDcgKzEyNjYsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURl
Y2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdAogCiAg
ICAgYXV0byBmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b24odHlwZS0+Y29weVJlZigpKTsKICAgICBpZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikK
LSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlv
bi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGZpcnN0VmFyaWFibGVE
ZWNsYXJhdGlvbi5lcnJvcigpKTsKIAogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPj4gcmVzdWx0OwogICAgIHJlc3VsdC5hcHBlbmQobWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlv
bikpKTsKQEAgLTEyNjIsNyArMTI3NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAg
d2hpbGUgKHRyeVR5cGUoVG9rZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAgICBhdXRvIHZhcmlh
YmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24odHlwZS0+Y29weVJlZigp
KTsKICAgICAgICAgaWYgKCF2YXJpYWJsZURlY2xhcmF0aW9uKQotICAgICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsK
ICAgICAgICAgcmVzdWx0LmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4oV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpKTsKICAgICB9CiAKQEAgLTE1NjQs
NyArMTU3Niw3IEBAIGF1dG8gUGFyc2VyOjpjb21wbGV0ZUFzc2lnbm1lbnQoVW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4mJiBsZWZ0KSAtPiBFeHBlY3RlZDxVCiAgICAgICAgIFRva2VuOjpUeXBl
OjpSaWdodFNoaWZ0RXF1YWxzLAogICAgICAgICBUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0RXF1YWxz
PigpOwogICAgIGlmICghYXNzaWdubWVudE9wZXJhdG9yKQotICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oYXNzaWdubWVudE9wZXJhdG9yLmVycm9yKCkpOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoYXNzaWdubWVudE9wZXJhdG9yLmVycm9yKCkpOwogCiAgICAgUEFSU0Uo
cmlnaHQsIFBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKTsKICAgICBDb2RlTG9jYXRpb24gbG9j
YXRpb24gPSB7IGxlZnQtPmNvZGVMb2NhdGlvbigpLCAoKnJpZ2h0KS0+Y29kZUxvY2F0aW9uKCkg
fTsKQEAgLTE2MzYsMjMgKzE2NDgsMjMgQEAgYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVUZXJu
YXJ5Q29uZGl0aW9uYWwoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXMKIAogICAg
IGV4cHJlc3Npb24gPSBjb21wbGV0ZVBvc3NpYmxlU2hpZnQoV1RGTW92ZSgqZXhwcmVzc2lvbikp
OwogICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KGV4cHJlc3Npb24uZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChleHBy
ZXNzaW9uLmVycm9yKCkpOwogCiAgICAgZXhwcmVzc2lvbiA9IGNvbXBsZXRlUG9zc2libGVNdWx0
aXBseShXVEZNb3ZlKCpleHByZXNzaW9uKSk7CiAgICAgaWYgKCFleHByZXNzaW9uKQotICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGV4cHJlc3Npb24uZXJyb3IoKSk7CiAKICAgICBleHByZXNz
aW9uID0gY29tcGxldGVQb3NzaWJsZUFkZChXVEZNb3ZlKCpleHByZXNzaW9uKSk7CiAgICAgaWYg
KCFleHByZXNzaW9uKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lv
bi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGV4cHJlc3Npb24uZXJy
b3IoKSk7CiAKICAgICBleHByZXNzaW9uID0gY29tcGxldGVQb3NzaWJsZVJlbGF0aW9uYWxCaW5h
cnlPcGVyYXRpb24oV1RGTW92ZSgqZXhwcmVzc2lvbikpOwogICAgIGlmICghZXhwcmVzc2lvbikK
LSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGV4cHJlc3Npb24uZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChleHByZXNzaW9uLmVycm9yKCkpOwogCiAgICAg
ZXhwcmVzc2lvbiA9IGNvbXBsZXRlUG9zc2libGVMb2dpY2FsQmluYXJ5T3BlcmF0aW9uKFdURk1v
dmUoKmV4cHJlc3Npb24pKTsKICAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihleHByZXNzaW9uLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXhwcmVzc2lvbi5lcnJvcigpKTsKIAogICAgIFBFRUsobmV4dFRva2VuKTsK
ICAgICBpZiAobmV4dFRva2VuLT50eXBlID09IFRva2VuOjpUeXBlOjpRdWVzdGlvbk1hcmspCkBA
IC0yMDI4LDI1ICsyMDQwLDI1IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVRlcm0oKSAtPiBFeHBlY3Rl
ZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+CiAgICAgICAgIFRva2VuOjpUeXBl
OjpJZGVudGlmaWVyLAogICAgICAgICBUb2tlbjo6VHlwZTo6TGVmdFBhcmVudGhlc2lzPigpOwog
ICAgIGlmICghdHlwZSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh0eXBlLmVycm9yKCkpOwogCiAg
ICAgc3dpdGNoICh0eXBlLT50eXBlKSB7CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6SW50TGl0ZXJh
bDogewogICAgICAgICBhdXRvIHZhbHVlID0gaW50TGl0ZXJhbFRvSW50KHR5cGUtPnN0cmluZ1Zp
ZXcobV9sZXhlcikpOwogICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKHZhbHVlLmVycm9yKCkpOwogICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVm
PEFTVDo6SW50ZWdlckxpdGVyYWw+KCp0eXBlLCAqdmFsdWUpIH07CiAgICAgfQogICAgIGNhc2Ug
VG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsOiB7CiAgICAgICAgIGF1dG8gdmFsdWUgPSB1aW50TGl0
ZXJhbFRvVWludCh0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigpKTsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh2YWx1ZS5lcnJvcigpKTsKICAgICAg
ICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KCp0
eXBlLCAqdmFsdWUpIH07CiAgICAgfQogICAgIGNhc2UgVG9rZW46OlR5cGU6OkZsb2F0TGl0ZXJh
bDogewogICAgICAgICBhdXRvIHZhbHVlID0gZmxvYXRMaXRlcmFsVG9GbG9hdCh0eXBlLT5zdHJp
bmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCh2YWx1ZS5lcnJvcigpKTsKICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1
ZVJlZjxBU1Q6OkZsb2F0TGl0ZXJhbD4oKnR5cGUsICp2YWx1ZSkgfTsKICAgICB9CiAgICAgY2Fz
ZSBUb2tlbjo6VHlwZTo6TnVsbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCmluZGV4IDczZjQ4MzIwM2EwNGE0ODMzYzE1NDUz
ODBkYjFlODVkYzJiMmE0ODAuLjlkYWJhZDg3ZTYyODY4NmZjZTQ3MTA2OWJiNjAyOGUxZDUxZGE2
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIldITFNMTGl0ZXJhbFR5
cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaCIKICNpbmNs
dWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgorI2luY2x1ZGUgIldITFNMTmFtZVNwYWNlLmgiCiAj
aW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByZXNlcnZlVmFyaWFibGVM
aWZldGltZXMuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKQEAgLTEyNCwxMyArMTI1LDMz
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotCiBwcml2YXRlOgogICAgIFN0cmluZyBt
X3BoYXNlTmFtZTsKICAgICBQaGFzZVRpbWVzJiBtX3BoYXNlVGltZXM7CiAgICAgTW9ub3Rvbmlj
VGltZSBtX3N0YXJ0OwogfTsKIAorc3RydWN0IFNoYWRlck1vZHVsZSB7CisgICAgU2hhZGVyTW9k
dWxlKGNvbnN0IFN0cmluZyYgd2hsc2xTb3VyY2UpCisgICAgICAgIDogd2hsc2xTb3VyY2Uod2hs
c2xTb3VyY2UpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyB3aGxzbFNvdXJjZTsKK307CisK
K093bmVkU2hhZGVyTW9kdWxlIGNyZWF0ZVNoYWRlck1vZHVsZShjb25zdCBTdHJpbmcmIHdobHNs
U291cmNlKQoreworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAwODcyIFdlIHNob3VsZCBjb25zaWRlciBtb3ZpbmcgYXMgbXVjaCB3b3JrIGZy
b20gcHJlcGFyZSgpIGludG8gaGVyZSBhcyBwb3NzaWJsZS4KKyAgICByZXR1cm4gT3duZWRTaGFk
ZXJNb2R1bGUobmV3IFNoYWRlck1vZHVsZSh3aGxzbFNvdXJjZSkpOworfQorCit2b2lkIFNoYWRl
ck1vZHVsZURlbGV0ZXI6Om9wZXJhdG9yKCkoU2hhZGVyTW9kdWxlKiBtb2R1bGUpCit7CisgICAg
ZGVsZXRlIG1vZHVsZTsKK30KKworLy8gRklYTUU6IFRoZSBmaXJzdCBhcmd1bWVudCB0byBlcnJv
clN0cmluZygpCiAjZGVmaW5lIENIRUNLX1BBU1MocGFzcywgLi4uKSBcCiAgICAgZG8geyBcCiAg
ICAgICAgIGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRlZChwcm9ncmFtLCAiQVNUIGJlZm9y
ZSAiICMgcGFzcyk7IFwKQEAgLTEzOCw4ICsxNTksOCBAQCBwcml2YXRlOgogICAgICAgICBhdXRv
IHJlc3VsdCA9IHBhc3MoX19WQV9BUkdTX18pOyBcCiAgICAgICAgIGlmICghcmVzdWx0KSB7IFwK
ICAgICAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpIFwKLSAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oImZhaWxlZCBwYXNzOiAiICMgcGFzcywgTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291
cmNlLCByZXN1bHQuZXJyb3IoKSkpOyBcCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCByZXN1bHQuZXJyb3IoKSkpOyBcCisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgcGFzczogIiAjIHBhc3MsIExleGVyOjpl
cnJvclN0cmluZyhTdHJpbmcoKSwgcmVzdWx0LmVycm9yKCkpKTsgXAorICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyhTdHJpbmcoKSwgcmVzdWx0LmVy
cm9yKCkpKTsgXAogICAgICAgICB9IFwKICAgICB9IHdoaWxlICgwKQogCkBAIC0xNTAsMTkgKzE3
MSwzNyBAQCBwcml2YXRlOgogICAgICAgICBwYXNzKF9fVkFfQVJHU19fKTsgXAogICAgIH0gd2hp
bGUgKDApCiAKLXN0YXRpYyBFeHBlY3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBhcmVTaGFyZWQo
UGhhc2VUaW1lcyYgcGhhc2VUaW1lcywgU3RyaW5nJiB3aGxzbFNvdXJjZSkKK3N0YXRpYyBFeHBl
Y3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBhcmVTaGFyZWQoUGhhc2VUaW1lcyYgcGhhc2VUaW1l
cywgY29uc3QgU3RyaW5nJiB3aGxzbFNvdXJjZTEsIGNvbnN0IFN0cmluZyogd2hsc2xTb3VyY2Uy
ID0gbnVsbHB0cikKIHsKICAgICBQcm9ncmFtIHByb2dyYW07CiAgICAgUGFyc2VyIHBhcnNlcjsK
IAogICAgIHsKKyAgICAgICAgcHJvZ3JhbS5uYW1lQ29udGV4dCgpLnNldEN1cnJlbnROYW1lU3Bh
Y2UoQVNUOjpOYW1lU3BhY2U6Ok5hbWVTcGFjZTEpOworCiAgICAgICAgIFBoYXNlVGltZXIgcGhh
c2VUaW1lcigicGFyc2UiLCBwaGFzZVRpbWVzKTsKLSAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9
IHBhcnNlci5wYXJzZShwcm9ncmFtLCB3aGxzbFNvdXJjZSwgUGFyc2luZ01vZGU6OlVzZXIpOwor
ICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291
cmNlMSwgUGFyc2luZ01vZGU6OlVzZXIpOwogICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7Ci0g
ICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dM
bigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCBMZXhlcjo6ZXJyb3JTdHJpbmcod2hs
c2xTb3VyY2UsIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIHBhcnNlUmVzdWx0LmVy
cm9yKCkpKTsKKyAgICAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yU3RyaW5nKCkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwgTGV4
ZXI6OmVycm9yU3RyaW5nKFN0cmluZygpLCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9y
U3RyaW5nKCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JT
dHJpbmcoU3RyaW5nKCksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAod2hsc2xTb3VyY2UyKSB7CisgICAgICAgICAgICBwcm9ncmFtLm5hbWVDb250ZXh0KCku
c2V0Q3VycmVudE5hbWVTcGFjZShBU1Q6Ok5hbWVTcGFjZTo6TmFtZVNwYWNlMik7CisgICAgICAg
ICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sICp3aGxzbFNvdXJj
ZTIsIFBhcnNpbmdNb2RlOjpVc2VyKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwg
TGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZygpLCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJndW1l
bnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChMZXhlcjo6ZXJyb3JTdHJpbmcoU3RyaW5nKCksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBwcm9ncmFtLm5hbWVDb250ZXh0KCkuc2V0
Q3VycmVudE5hbWVTcGFjZShBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KTsKICAgICB9
CiAKICAgICB7CkBAIC0yMDAsMjMgKzIzOSwzMSBAQCBzdGF0aWMgRXhwZWN0ZWQ8UHJvZ3JhbSwg
U3RyaW5nPiBwcmVwYXJlU2hhcmVkKFBoYXNlVGltZXMmIHBoYXNlVGltZXMsIFN0cmluZyYgdwog
ICAgIHJldHVybiBwcm9ncmFtOwogfQogCi1FeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0LCBT
dHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpCitFeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVz
dWx0LCBTdHJpbmc+IHByZXBhcmUoY29uc3QgU2hhZGVyTW9kdWxlJiB2ZXJ0ZXhTaGFkZXJNb2R1
bGUsIGNvbnN0IFNoYWRlck1vZHVsZSogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIFJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKQogewogICAgIFBoYXNlVGlt
ZXMgcGhhc2VUaW1lczsKICAgICBNZXRhbDo6UmVuZGVyTWV0YWxDb2RlIGdlbmVyYXRlZENvZGU7
CiAKICAgICB7CiAgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigicHJlcGFyZSB0b3RhbCIs
IHBoYXNlVGltZXMpOwotICAgICAgICBhdXRvIHByb2dyYW0gPSBwcmVwYXJlU2hhcmVkKHBoYXNl
VGltZXMsIHdobHNsU291cmNlKTsKKyAgICAgICAgY29uc3QgU3RyaW5nKiBzZWNvbmRTaGFkZXIg
PSBudWxscHRyOworICAgICAgICBib29sIGRpc3RpbmN0RnJhZ21lbnRTaGFkZXIgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGZyYWdtZW50U2hhZGVyTW9kdWxlICYmIGZyYWdtZW50U2hhZGVyTW9kdWxl
ICE9ICZ2ZXJ0ZXhTaGFkZXJNb2R1bGUpIHsKKyAgICAgICAgICAgIHNlY29uZFNoYWRlciA9ICZm
cmFnbWVudFNoYWRlck1vZHVsZS0+d2hsc2xTb3VyY2U7CisgICAgICAgICAgICBkaXN0aW5jdEZy
YWdtZW50U2hhZGVyID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIHByb2dyYW0gPSBw
cmVwYXJlU2hhcmVkKHBoYXNlVGltZXMsIHZlcnRleFNoYWRlck1vZHVsZS53aGxzbFNvdXJjZSwg
c2Vjb25kU2hhZGVyKTsKICAgICAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKHByb2dyYW0uZXJyb3IoKSk7CiAKICAgICAgICAgT3B0aW9uYWw8TWF0
Y2hlZFJlbmRlclNlbWFudGljcz4gbWF0Y2hlZFNlbWFudGljczsKICAgICAgICAgewogICAgICAg
ICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJtYXRjaFNlbWFudGljcyIsIHBoYXNlVGltZXMp
OwotICAgICAgICAgICAgbWF0Y2hlZFNlbWFudGljcyA9IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFt
LCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2Vt
YW50aWNzKQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJy
b3JTdHJpbmcod2hsc2xTb3VyY2UsIEVycm9yKCJDb3VsZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9z
dHIpKSk7CisgICAgICAgICAgICBtYXRjaGVkU2VtYW50aWNzID0gbWF0Y2hTZW1hbnRpY3MoKnBy
b2dyYW0sIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciwgZGlzdGluY3RGcmFnbWVudFNoYWRlciwg
ZGlzdGluY3RGcmFnbWVudFNoYWRlcik7CisgICAgICAgICAgICBpZiAoIW1hdGNoZWRTZW1hbnRp
Y3MpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVy
cm9yU3RyaW5nKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6
OmVycm9yU3RyaW5nKFN0cmluZygpLCBFcnJvcigiQ291bGQgbm90IG1hdGNoIHNlbWFudGljcyJf
c3RyKSkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgewpAQCAtMjM0LDcg
KzI4MSw3IEBAIEV4cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShT
dHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBlbGluCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcm
IHdobHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yKQorRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFy
ZShjb25zdCBTaGFkZXJNb2R1bGUmIHNoYWRlck1vZHVsZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3Jp
cHRvciYgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcikKIHsKICAgICBQaGFzZVRpbWVzIHBoYXNl
VGltZXM7CiAgICAgTWV0YWw6OkNvbXB1dGVNZXRhbENvZGUgZ2VuZXJhdGVkQ29kZTsKQEAgLTI0
Miw3ICsyODksNyBAQCBFeHBlY3RlZDxDb21wdXRlUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVw
YXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQaXBlbAogCiAgICAgewogICAgICAgICBQ
aGFzZVRpbWVyIHBoYXNlVGltZXIoInByZXBhcmUgdG90YWwiLCBwaGFzZVRpbWVzKTsKLSAgICAg
ICAgYXV0byBwcm9ncmFtID0gcHJlcGFyZVNoYXJlZChwaGFzZVRpbWVzLCB3aGxzbFNvdXJjZSk7
CisgICAgICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQocGhhc2VUaW1lcywgc2hhZGVy
TW9kdWxlLndobHNsU291cmNlKTsKICAgICAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKHByb2dyYW0uZXJyb3IoKSk7CiAKQEAgLTI1MCwxNSArMjk3
LDIwIEBAIEV4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3Ry
aW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsCiAgICAgICAgIHsKICAgICAgICAgICAgIFBo
YXNlVGltZXIgcGhhc2VUaW1lcigibWF0Y2hTZW1hbnRpY3MiLCBwaGFzZVRpbWVzKTsKICAgICAg
ICAgICAgIG1hdGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3JhbSwgY29tcHV0
ZVBpcGVsaW5lRGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3Mp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmlu
Zyh3aGxzbFNvdXJjZSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBzZW1hbnRpY3MiX3N0cikpKTsK
KyAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcoU3RyaW5nKCksIEVy
cm9yKCJDb3VsZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9zdHIpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCiAgICAgICAgIH0KIAogICAgICAgICB7CiAgICAgICAgICAgICBQaGFz
ZVRpbWVyIHBoYXNlVGltZXIoImNvbXB1dGVEaW1lbnNpb25zIiwgcGhhc2VUaW1lcyk7CiAgICAg
ICAgICAgICBjb21wdXRlRGltZW5zaW9ucyA9IFdITFNMOjpjb21wdXRlRGltZW5zaW9ucygqcHJv
Z3JhbSwgKm1hdGNoZWRTZW1hbnRpY3MtPnNoYWRlcik7Ci0gICAgICAgICAgICBpZiAoIWNvbXB1
dGVEaW1lbnNpb25zKQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhl
cjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIEVycm9yKCJDb3VsZCBub3QgbWF0Y2ggY29tcHV0
ZSBkaW1lbnNpb25zIl9zdHIpKSk7CisgICAgICAgICAgICBpZiAoIWNvbXB1dGVEaW1lbnNpb25z
KSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBmaXJzdCBhcmd1bWVudCB0byBlcnJv
clN0cmluZygpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjpl
cnJvclN0cmluZyhTdHJpbmcoKSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBjb21wdXRlIGRpbWVu
c2lvbnMiX3N0cikpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFy
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgK
aW5kZXggNWRhNzdmNWYyZWRkYjk1MDk3NDgzNDdlOTRjYTdiNTljZWI0YTViNC4uZWZkNjVhNzA1
NzVmNTlhYzY0ZGIyNWE0ZjI3NjZkMzdjNDEyYWI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKQEAgLTM5LDEyICszOSwyMCBA
QCBuYW1lc3BhY2UgV0hMU0wgewogCiBjb25zdGV4cHIgYm9vbCBkdW1wTWV0YWxDb21waWxlVGlt
ZXMgPSBmYWxzZTsKIAorLy8gSGlkZSB0aGUgY29udGVudHMgb2YgdGhlIFNoYWRlck1vZHVsZS4g
Q2xpZW50cyBvZiB0aGUgY29tcGlsZXIgc2hvdWxkbid0IGNhcmUgd2hhdCdzIGluc2lkZSBpdC4K
K3N0cnVjdCBTaGFkZXJNb2R1bGU7CitzdHJ1Y3QgU2hhZGVyTW9kdWxlRGVsZXRlciB7CisgICAg
dm9pZCBvcGVyYXRvcigpKFNoYWRlck1vZHVsZSopOworfTsKK3VzaW5nIE93bmVkU2hhZGVyTW9k
dWxlID0gc3RkOjp1bmlxdWVfcHRyPFNoYWRlck1vZHVsZSwgU2hhZGVyTW9kdWxlRGVsZXRlcj47
CitPd25lZFNoYWRlck1vZHVsZSBjcmVhdGVTaGFkZXJNb2R1bGUoY29uc3QgU3RyaW5nJiB3aGxz
bFNvdXJjZSk7CisKIHN0cnVjdCBSZW5kZXJQcmVwYXJlUmVzdWx0IHsKICAgICBTdHJpbmdCdWls
ZGVyIG1ldGFsU291cmNlOwogICAgIE1ldGFsOjpNYW5nbGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRW
ZXJ0ZXhFbnRyeVBvaW50TmFtZTsKICAgICBNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZSBtYW5n
bGVkRnJhZ21lbnRFbnRyeVBvaW50TmFtZTsKIH07Ci1FeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVz
dWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yJik7CitFeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBh
cmUoY29uc3QgU2hhZGVyTW9kdWxlJiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGNvbnN0IFNoYWRlck1v
ZHVsZSogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYpOwog
CiBzdHJ1Y3QgQ29tcHV0ZURpbWVuc2lvbnMgewogICAgIHVuc2lnbmVkIHdpZHRoOwpAQCAtNTcs
NyArNjUsNyBAQCBzdHJ1Y3QgQ29tcHV0ZVByZXBhcmVSZXN1bHQgewogICAgIE1ldGFsOjpNYW5n
bGVkRnVuY3Rpb25OYW1lIG1hbmdsZWRFbnRyeVBvaW50TmFtZTsKICAgICBDb21wdXRlRGltZW5z
aW9ucyBjb21wdXRlRGltZW5zaW9uczsKIH07Ci1FeHBlY3RlZDxDb21wdXRlUHJlcGFyZVJlc3Vs
dCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQaXBlbGluZURl
c2NyaXB0b3ImKTsKK0V4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBh
cmUoY29uc3QgU2hhZGVyTW9kdWxlJiwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYpOwogCiB9
IC8vIG5hbWVzcGFjZSBXSExTTAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJvZ3JhbS5oCmluZGV4IDQwYmFmMDk0MmVhZjZhZmZlNDFiNjI1NDQ2
ODkwZTMyYWNjMWEwYjUuLjkwODYxZWMyYWE0Y2M0OGUyMTRhZDE4MzE4OWYxZTQwNTZjOTkzMDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJv
Z3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJv
Z3JhbS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFcnJvci5oIgog
I2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xJbnRy
aW5zaWNzLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgpAQCAtNDYsMzggKzQ3LDM4
IEBAIHB1YmxpYzoKICAgICBQcm9ncmFtKCkgPSBkZWZhdWx0OwogICAgIFByb2dyYW0oUHJvZ3Jh
bSYmKSA9IGRlZmF1bHQ7CiAKLSAgICBib29sIGFwcGVuZChBU1Q6OlR5cGVEZWZpbml0aW9uJiYg
dHlwZURlZmluaXRpb24pCisgICAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGFwcGVuZChBU1Q6OlR5
cGVEZWZpbml0aW9uJiYgdHlwZURlZmluaXRpb24pCiAgICAgewogICAgICAgICBtX3R5cGVEZWZp
bml0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWZpbml0aW9uPihXVEZNb3Zl
KHR5cGVEZWZpbml0aW9uKSkpOwogICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQobV90
eXBlRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9CiAKLSAgICBib29sIGFwcGVuZChBU1Q6OlN0
cnVjdHVyZURlZmluaXRpb24mJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorICAgIEV4cGVjdGVkPHZv
aWQsIEVycm9yPiBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVm
aW5pdGlvbikKICAgICB7CiAgICAgICAgIG1fc3RydWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKG1h
a2VVbmlxdWVSZWY8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihXVEZNb3ZlKHN0cnVjdHVyZURl
ZmluaXRpb24pKSk7CiAgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChtX3N0cnVjdHVy
ZURlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAgYm9vbCBhcHBlbmQoQVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCisgICAgRXhwZWN0ZWQ8
dm9pZCwgRXJyb3I+IGFwcGVuZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0
aW9uRGVmaW5pdGlvbikKICAgICB7CiAgICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5h
cHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShl
bnVtZXJhdGlvbkRlZmluaXRpb24pKSk7CiAgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFk
ZChtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9CiAKLSAgICBib29sIGFw
cGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICBF
eHBlY3RlZDx2b2lkLCBFcnJvcj4gYXBwZW5kKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiYgZnVu
Y3Rpb25EZWZpbml0aW9uKQogICAgIHsKICAgICAgICAgbV9mdW5jdGlvbkRlZmluaXRpb25zLmFw
cGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihXVEZNb3ZlKGZ1bmN0
aW9uRGVmaW5pdGlvbikpKTsKICAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKG1fZnVu
Y3Rpb25EZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KIAotICAgIGJvb2wgYXBwZW5kKEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCisg
ICAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGFwcGVuZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24mJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQogICAgIHsKICAgICAgICAgbV9uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKTsK
ICAgICAgICAgbV9pbnRyaW5zaWNzLmFkZChtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmxh
c3QoKSk7CiAgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChtX25hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAgYm9vbCBhcHBlbmQoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisgICAgRXhwZWN0ZWQ8
dm9pZCwgRXJyb3I+IGFwcGVuZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYmIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbikKICAgICB7CiAgICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5h
cHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oV1RGTW92ZShu
YXRpdmVUeXBlRGVjbGFyYXRpb24pKSk7CiAgICAgICAgIG1faW50cmluc2ljcy5hZGQobV9uYXRp
dmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNw
cAppbmRleCA0MjRlNzk1MTVlNzkzMWFmZTg0NjM0ZWM0YjZlYzZjMzk3NzM4NmY4Li43YzY1Njk3
ODg0OWRmYjBiOWY1ZjExMGZkZWQ0Y2RlYzE4MmZkYTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5jcHAKQEAgLTUyLDEyICs1MiwxOSBAQCBzdGF0aWMgdW5zaWduZWQgY29udmVyc2lv
bkNvc3QoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBjYW5kaWRhdGUsIGNvbnN0IFZlY3Rvcgog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZUtpbmQ+Ci1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBl
cywgVHlwZUtpbmQqIGNhc3RSZXR1cm5UeXBlKQorc3RhdGljIEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5
cGVzLCBUeXBlS2luZCogY2FzdFJldHVyblR5cGUsIEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkK
IHsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24+LCAxPiBjYW5kaWRhdGVzOwogICAgIGZvciAoYXV0byYgcG9zc2libGVGdW5jdGlvbiA6
IHBvc3NpYmxlRnVuY3Rpb25zKSB7CiAgICAgICAgIGlmIChwb3NzaWJsZUZ1bmN0aW9uLmdldCgp
LmVudHJ5UG9pbnRUeXBlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG5h
bWVTcGFjZSA9PSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KSB7CisgICAgICAgICAg
ICBpZiAocG9zc2libGVGdW5jdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSAhPSBBU1Q6Ok5hbWVTcGFj
ZTo6U3RhbmRhcmRMaWJyYXJ5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkubmFtZVNwYWNl
KCkgIT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSAmJiBwb3NzaWJsZUZ1bmN0aW9u
LmdldCgpLm5hbWVTcGFjZSgpICE9IG5hbWVTcGFjZSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoaW5mZXJUeXBlc0ZvckNhbGwocG9zc2libGVGdW5j
dGlvbi5nZXQoKSwgYXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUpKQogICAgICAgICAgICAg
Y2FuZGlkYXRlcy5hcHBlbmQocG9zc2libGVGdW5jdGlvbi5nZXQoKSk7CiAgICAgfQpAQCAtNzcs
MTkgKzg0LDE5IEBAIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQo
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwg
MT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNv
bHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMpCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJl
c29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5h
bWVTcGFjZSBuYW1lU3BhY2UpCiB7Ci0gICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbk92ZXJsb2Fk
SW1wbChwb3NzaWJsZUZ1bmN0aW9ucywgYXJndW1lbnRUeXBlcywgc3RhdGljX2Nhc3Q8QVNUOjpO
YW1lZFR5cGUqPihudWxscHRyKSk7CisgICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbk92ZXJsb2Fk
SW1wbChwb3NzaWJsZUZ1bmN0aW9ucywgYXJndW1lbnRUeXBlcywgc3RhdGljX2Nhc3Q8QVNUOjpO
YW1lZFR5cGUqPihudWxscHRyKSwgbmFtZVNwYWNlKTsKIH0KIAotQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBl
cywgQVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKQorQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywg
QVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlLCBBU1Q6Ok5hbWVTcGFjZSBuYW1lU3BhY2Up
CiB7Ci0gICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwb3NzaWJsZUZ1bmN0
aW9ucywgYXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUpOworICAgIHJldHVybiByZXNvbHZl
RnVuY3Rpb25PdmVybG9hZEltcGwocG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIGNh
c3RSZXR1cm5UeXBlLCBuYW1lU3BhY2UpOwogfQogCi1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24q
IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6
OlVubmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSkKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiog
cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6
VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlLCBBU1Q6Ok5hbWVTcGFjZSBuYW1lU3BhY2UpCiB7
Ci0gICAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwb3NzaWJsZUZ1bmN0aW9u
cywgYXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUpOworICAgIHJldHVybiByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZEltcGwocG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIGNhc3RS
ZXR1cm5UeXBlLCBuYW1lU3BhY2UpOwogfQogCiBBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVP
dmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+
LCAxPiYgcG9zc2libGVUeXBlcywgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmVPdmVybG9hZEltcGwuaAppbmRleCAzZDM0YWI2ZjM4ZDQ5OWM5ZDM1ODZjZDEz
MGE3M2EyOTFlN2QwZDEyLi4zYjE5NWEyMWM1NzJlMGY3MjBmYWRhZGZkYTFhMTdkYTQ2MDQxMmM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJl
c29sdmVPdmVybG9hZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaApAQCAtNDMsOSArNDMsOSBAQCBjbGFzcyBO
YW1lZFR5cGU7CiAKIH0KIAotQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rp
b25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcyk7Ci1BU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5
cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpOwotQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBl
cywgQVNUOjpVbm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpOworQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBl
cywgQVNUOjpOYW1lU3BhY2UpOworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpOYW1lZFR5cGUq
IGNhc3RSZXR1cm5UeXBlLCBBU1Q6Ok5hbWVTcGFjZSk7CitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBB
U1Q6OlVubmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSwgQVNUOjpOYW1lU3BhY2UpOwogQVNUOjpO
YW1lZFR5cGUqIHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4mLCBBU1Q6OlR5cGVBcmd1bWVudHMmKTsKIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1h
bnRpY01hdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTZW1hbnRpY01hdGNoZXIuY3BwCmluZGV4IDE1N2E0YmZjOTIzMzFkN2U3Y2Q1YmNlMzIwZDQx
MThkYzAwODcwMmIuLjJjYzdkN2RiYjU0MzU5YTE4NGVlN2Y5YjUxOTRkYjdhY2Q5YWYwMjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50
aWNNYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFNlbWFudGljTWF0Y2hlci5jcHAKQEAgLTQ1LDE2ICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotc3RhdGljIEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uKiBmaW5kRW50cnlQb2ludChWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uPj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMsIFN0cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvIGl0
ZXJhdG9yID0gc3RkOjpmaW5kX2lmKGZ1bmN0aW9uRGVmaW5pdGlvbnMuYmVnaW4oKSwgZnVuY3Rp
b25EZWZpbml0aW9ucy5lbmQoKSwgWyZdKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBv
aW50VHlwZSgpICYmIGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gbmFtZTsKLSAgICB9KTsK
LSAgICBpZiAoaXRlcmF0b3IgPT0gZnVuY3Rpb25EZWZpbml0aW9ucy5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuICYqaXRlcmF0b3I7Ci19OwotCiBzdGF0aWMgYm9v
bCBtYXRjaE1vZGUoQmluZGluZzo6QmluZGluZ0RldGFpbHMgYmluZGluZ1R5cGUsIEFTVDo6UmVz
b3VyY2VTZW1hbnRpYzo6TW9kZSBtb2RlKQogewogICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKFVuaWZvcm1CdWZmZXJCaW5kaW5nKSAtPiBib29sIHsKQEAgLTI5MCw0
NiArMjgwLDU5IEBAIHN0YXRpYyBib29sIG1hdGNoRGVwdGhBdHRhY2htZW50KFZlY3RvcjxFbnRy
eVBvaW50SXRlbT4mIGZyYWdtZW50T3V0cHV0cywgT3B0aW9uCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PcHRpb25hbDxNYXRjaGVkUmVuZGVyU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQcm9n
cmFtJiBwcm9ncmFtLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvcikKK09wdGlvbmFsPE1hdGNoZWRSZW5kZXJTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNz
KFByb2dyYW0mIHByb2dyYW0sIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yLCBib29sIGRpc3RpbmN0RnJhZ21lbnRTaGFkZXIsIGJvb2wgZnJhZ21lbnRT
aGFkZXJFeGlzdHMpCiB7Ci0gICAgYXV0byB2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50ID0gZmluZEVu
dHJ5UG9pbnQocHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCksIHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvci52ZXJ0ZXhFbnRyeVBvaW50TmFtZSk7Ci0gICAgYXV0byBmcmFnbWVudFNoYWRlckVu
dHJ5UG9pbnQgPSBmaW5kRW50cnlQb2ludChwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSwg
cmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmZyYWdtZW50RW50cnlQb2ludE5hbWUpOwotICAgIGlm
ICghdmVydGV4U2hhZGVyRW50cnlQb2ludCB8fCAhZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50KQor
ICAgIGF1dG8gdmVydGV4RnVuY3Rpb25zID0gcHJvZ3JhbS5uYW1lQ29udGV4dCgpLmdldEZ1bmN0
aW9ucyhyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IudmVydGV4RW50cnlQb2ludE5hbWUsIEFTVDo6
TmFtZVNwYWNlOjpOYW1lU3BhY2UxKTsKKyAgICBpZiAodmVydGV4RnVuY3Rpb25zLnNpemUoKSAh
PSAxIHx8ICF2ZXJ0ZXhGdW5jdGlvbnNbMF0uZ2V0KCkuZW50cnlQb2ludFR5cGUoKSB8fCAhaXM8
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KHZlcnRleEZ1bmN0aW9uc1swXS5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byB2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50
SXRlbXMgPSBnYXRoZXJFbnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksICp2ZXJ0
ZXhTaGFkZXJFbnRyeVBvaW50KTsKLSAgICBhdXRvIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0
ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCAqZnJhZ21l
bnRTaGFkZXJFbnRyeVBvaW50KTsKLSAgICBpZiAoIXZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVt
cyB8fCAhZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMpCisgICAgYXV0byYgdmVydGV4U2hh
ZGVyRW50cnlQb2ludCA9IGRvd25jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPih2ZXJ0ZXhG
dW5jdGlvbnNbMF0uZ2V0KCkpOworICAgIGF1dG8gdmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1z
ID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCB2ZXJ0ZXhTaGFk
ZXJFbnRyeVBvaW50KTsKKyAgICBpZiAoIXZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcykKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBhdXRvIHZlcnRleFNoYWRlclJlc291cmNl
TWFwID0gbWF0Y2hSZXNvdXJjZXModmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1dHMs
IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQsIFNoYWRlclN0YWdlOjpWZXJ0ZXgpOwot
ICAgIGF1dG8gZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcCA9IG1hdGNoUmVzb3VyY2VzKGZyYWdt
ZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
ci5sYXlvdXQsIFNoYWRlclN0YWdlOjpGcmFnbWVudCk7Ci0gICAgaWYgKCF2ZXJ0ZXhTaGFkZXJS
ZXNvdXJjZU1hcCB8fCAhZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcCkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICBpZiAoIW1hdGNoSW5wdXRzT3V0cHV0cyh2ZXJ0ZXhTaGFkZXJF
bnRyeVBvaW50SXRlbXMtPm91dHB1dHMsIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5p
bnB1dHMpKQorICAgIGlmICghdmVydGV4U2hhZGVyUmVzb3VyY2VNYXApCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgYXV0byBtYXRjaGVkVmVydGV4QXR0cmlidXRlcyA9IG1hdGNo
VmVydGV4QXR0cmlidXRlcyh2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMtPmlucHV0cywgcmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yLnZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW0uaW50cmluc2lj
cygpKTsKICAgICBpZiAoIW1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGlmICghZnJhZ21lbnRTaGFkZXJFeGlzdHMpCisgICAgICAgIHJl
dHVybiB7eyAmdmVydGV4U2hhZGVyRW50cnlQb2ludCwgbnVsbHB0ciwgKnZlcnRleFNoYWRlckVu
dHJ5UG9pbnRJdGVtcywgRW50cnlQb2ludEl0ZW1zKCksICp2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1h
cCwgSGFzaE1hcDxCaW5kaW5nKiwgc2l6ZV90PigpLCAqbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMs
IEhhc2hNYXA8QXR0YWNobWVudERlc2NyaXB0b3IqLCBzaXplX3Q+KCkgfX07CisKKyAgICBhdXRv
IGZyYWdtZW50TmFtZVNwYWNlID0gZGlzdGluY3RGcmFnbWVudFNoYWRlciA/IEFTVDo6TmFtZVNw
YWNlOjpOYW1lU3BhY2UyIDogQVNUOjpOYW1lU3BhY2U6Ok5hbWVTcGFjZTE7CisgICAgYXV0byBm
cmFnbWVudEZ1bmN0aW9ucyA9IHByb2dyYW0ubmFtZUNvbnRleHQoKS5nZXRGdW5jdGlvbnMocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmZyYWdtZW50RW50cnlQb2ludE5hbWUsIGZyYWdtZW50TmFt
ZVNwYWNlKTsKKyAgICBpZiAoZnJhZ21lbnRGdW5jdGlvbnMuc2l6ZSgpICE9IDEgfHwgIWZyYWdt
ZW50RnVuY3Rpb25zWzBdLmdldCgpLmVudHJ5UG9pbnRUeXBlKCkgfHwgIWlzPEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uPihmcmFnbWVudEZ1bmN0aW9uc1swXS5nZXQoKSkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgYXV0byYgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50ID0gZG93
bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGZyYWdtZW50RnVuY3Rpb25zWzBdLmdldCgp
KTsKKyAgICBhdXRvIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zID0gZ2F0aGVyRW50cnlQ
b2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQp
OworICAgIGlmICghZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBmcmFnbWVudFNoYWRlclJlc291cmNlTWFwID0gbWF0
Y2hSZXNvdXJjZXMoZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMtPmlucHV0cywgcmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yLmxheW91dCwgU2hhZGVyU3RhZ2U6OkZyYWdtZW50KTsKKyAgICBp
ZiAoIWZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXApCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgaWYgKCFtYXRjaElucHV0c091dHB1dHModmVydGV4U2hhZGVyRW50cnlQb2ludEl0
ZW1zLT5vdXRwdXRzLCBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBhdXRvIG1hdGNoZWRDb2xvckF0dGFjaG1l
bnRzID0gbWF0Y2hDb2xvckF0dGFjaG1lbnRzKGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1z
LT5vdXRwdXRzLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IuYXR0YWNobWVudHNTdGF0ZURlc2Ny
aXB0b3IuYXR0YWNobWVudERlc2NyaXB0b3JzLCBwcm9ncmFtLmludHJpbnNpY3MoKSk7CiAgICAg
aWYgKCFtYXRjaGVkQ29sb3JBdHRhY2htZW50cykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICBpZiAoIW1hdGNoRGVwdGhBdHRhY2htZW50KGZyYWdtZW50U2hhZGVyRW50cnlQb2lu
dEl0ZW1zLT5vdXRwdXRzLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IuYXR0YWNobWVudHNTdGF0
ZURlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IsIHByb2dyYW0uaW50
cmluc2ljcygpKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4ge3sg
dmVydGV4U2hhZGVyRW50cnlQb2ludCwgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50LCAqdmVydGV4
U2hhZGVyRW50cnlQb2ludEl0ZW1zLCAqZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMsICp2
ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcCwgKmZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXAsICptYXRj
aGVkVmVydGV4QXR0cmlidXRlcywgKm1hdGNoZWRDb2xvckF0dGFjaG1lbnRzIH19OworICAgIHJl
dHVybiB7eyAmdmVydGV4U2hhZGVyRW50cnlQb2ludCwgJmZyYWdtZW50U2hhZGVyRW50cnlQb2lu
dCwgKnZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcywgKmZyYWdtZW50U2hhZGVyRW50cnlQb2lu
dEl0ZW1zLCAqdmVydGV4U2hhZGVyUmVzb3VyY2VNYXAsICpmcmFnbWVudFNoYWRlclJlc291cmNl
TWFwLCAqbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMsICptYXRjaGVkQ29sb3JBdHRhY2htZW50cyB9
fTsKIH0KIAogT3B0aW9uYWw8TWF0Y2hlZENvbXB1dGVTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNz
KFByb2dyYW0mIHByb2dyYW0sIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3IpCiB7Ci0gICAgYXV0byBlbnRyeVBvaW50ID0gZmluZEVudHJ5UG9pbnQo
cHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCksIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3Iu
ZW50cnlQb2ludE5hbWUpOwotICAgIGlmICghZW50cnlQb2ludCkKKyAgICBhdXRvIGZ1bmN0aW9u
cyA9IHByb2dyYW0ubmFtZUNvbnRleHQoKS5nZXRGdW5jdGlvbnMoY29tcHV0ZVBpcGVsaW5lRGVz
Y3JpcHRvci5lbnRyeVBvaW50TmFtZSwgQVNUOjpOYW1lU3BhY2U6Ok5hbWVTcGFjZTEpOworICAg
IGlmIChmdW5jdGlvbnMuc2l6ZSgpICE9IDEgfHwgIWZ1bmN0aW9uc1swXS5nZXQoKS5lbnRyeVBv
aW50VHlwZSgpIHx8ICFpczxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oZnVuY3Rpb25zWzBdLmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIGVudHJ5UG9pbnRJ
dGVtcyA9IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgKmVudHJ5
UG9pbnQpOworICAgIGF1dG8mIGVudHJ5UG9pbnQgPSBkb3duY2FzdDxBU1Q6OkZ1bmN0aW9uRGVm
aW5pdGlvbj4oZnVuY3Rpb25zWzBdLmdldCgpKTsKKyAgICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9
IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgZW50cnlQb2ludCk7
CiAgICAgaWYgKCFlbnRyeVBvaW50SXRlbXMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgQVNTRVJUKGVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0cy5pc0VtcHR5KCkpOwogICAgIGF1
dG8gcmVzb3VyY2VNYXAgPSBtYXRjaFJlc291cmNlcyhlbnRyeVBvaW50SXRlbXMtPmlucHV0cywg
Y29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvci5sYXlvdXQsIFNoYWRlclN0YWdlOjpDb21wdXRlKTsK
ICAgICBpZiAoIXJlc291cmNlTWFwKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
IHJldHVybiB7eyBlbnRyeVBvaW50LCAqZW50cnlQb2ludEl0ZW1zLCAqcmVzb3VyY2VNYXAgfX07
CisgICAgcmV0dXJuIHt7ICZlbnRyeVBvaW50LCAqZW50cnlQb2ludEl0ZW1zLCAqcmVzb3VyY2VN
YXAgfX07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaAppbmRl
eCBiZGZmNGJiZmY3ODgwODRmNzdkYzZlNjhkYWVjZDY4OTdjYjFjYzcwLi4zNjliZTRiOGU4NTUx
MTdkNDllODc3Y2M1NDFlZmJjMDIzZjE3YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmgKQEAgLTQ4
LDcgKzQ4LDcgQEAgc3RydWN0IE1hdGNoZWRSZW5kZXJTZW1hbnRpY3MgewogICAgIEhhc2hNYXA8
QXR0YWNobWVudERlc2NyaXB0b3IqLCBzaXplX3Q+IG1hdGNoZWRDb2xvckF0dGFjaG1lbnRzOwog
fTsKIAotT3B0aW9uYWw8TWF0Y2hlZFJlbmRlclNlbWFudGljcz4gbWF0Y2hTZW1hbnRpY3MoUHJv
Z3JhbSYsIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYpOworT3B0aW9uYWw8TWF0Y2hlZFJlbmRl
clNlbWFudGljcz4gbWF0Y2hTZW1hbnRpY3MoUHJvZ3JhbSYsIFJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciYsIGJvb2wgZGlzdGluY3RGcmFnbWVudFNoYWRlciwgYm9vbCBmcmFnbWVudFNoYWRlckV4
aXN0cyk7CiAKIHN0cnVjdCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyB7CiAgICAgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24qIHNoYWRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0
aWVzLmNwcAppbmRleCAyNDA2OWVjNTUzYWU4YWM1NzcyZWY3ZmMzODllNjA2NWE3ZDllY2QxLi41
ZGEwZTkwZjM1ZjUzZjkzZGYzMWE5MzNkZTEyODJkNTdkZTczMGExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxp
dGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
dGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuY3BwCkBAIC03NywyMyArNzcsMjIgQEAgcHJpdmF0ZToK
ICAgICBIYXNoU2V0PFN0cmluZz4gbV9mdW5jdGlvbk5hbWVzOwogfTsKIAotdm9pZCBpbmNsdWRl
U3RhbmRhcmRMaWJyYXJ5KFByb2dyYW0mIHByb2dyYW0sIFBhcnNlciYgcGFyc2VyLCBib29sIHBh
cnNlRnVsbFN0YW5kYXJkTGlicmFyeSkKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBpbmNsdWRlU3Rh
bmRhcmRMaWJyYXJ5KFByb2dyYW0mIHByb2dyYW0sIFBhcnNlciYgcGFyc2VyLCBib29sIHBhcnNl
RnVsbFN0YW5kYXJkTGlicmFyeSkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
PiBzdGFuZGFyZExpYnJhcnkoZGVjb21wcmVzc0FuZERlY29kZVN0YW5kYXJkTGlicmFyeSgpKTsK
ICAgICBpZiAocGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5KSB7CiAgICAgICAgIGF1dG8gcGFyc2VS
ZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RhbmRhcmRMaWJyYXJ5LmdldCgpLCBQYXJz
aW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KTsKLSAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewot
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgdGhlIChmdWxsKSBzdGFuZGFy
ZCBsaWJyYXJ5OiAiLCBMZXhlcjo6ZXJyb3JTdHJpbmcoU3RyaW5nVmlldyhzdGFuZGFyZExpYnJh
cnkpLCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghcGFyc2VSZXN1
bHQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocGFyc2VSZXN1bHQuZXJyb3Io
KSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hNYXA8U3RyaW5nLCBTdWJzdHJpbmdMb2NhdGlvbj4+IHN0YW5kYXJkTGlicmFyeUZ1
bmN0aW9uTWFwKGNvbXB1dGVTdGFuZGFyZExpYnJhcnlGdW5jdGlvbk1hcCgpKTsKIAogICAgIGF1
dG8gc3RyaW5nVmlldyA9IFN0cmluZ1ZpZXcoc3RhbmRhcmRMaWJyYXJ5LmdldCgpKS5zdWJzdHJp
bmcoMCwgZmlyc3RGdW5jdGlvbk9mZnNldEluU3RhbmRhcmRMaWJyYXJ5KCkpOwogICAgIGF1dG8g
cGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgc3RyaW5nVmlldywgUGFyc2luZ01v
ZGU6OlN0YW5kYXJkTGlicmFyeSk7Ci0gICAgQVNTRVJUX1VOVVNFRChwYXJzZVJlc3VsdCwgcGFy
c2VSZXN1bHQpOworICAgIGlmICghcGFyc2VSZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChwYXJzZVJlc3VsdC5lcnJvcigpKTsKIAogICAgIE5hbWVGaW5kZXIgbmFtZUZpbmRl
cjsKICAgICBuYW1lRmluZGVyLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOwpAQCAtMTAyLDYgKzEw
MSwxMCBAQCB2b2lkIGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYgcHJvZ3JhbSwgUGFy
c2VyJiBwYXJzZXIsIGJvb2wgcGFyc2VGdWxsU3RhbgogICAgIC8vIFRoZSBuYW1lIG9mIGEgY2Fs
bCB0byBhIGNhc3Qgb3BlcmF0b3IgaXMgdGhlIG5hbWUgb2YgdGhlIHR5cGUsIHNvIHdlIGNhbid0
IG1hdGNoIHRoZW0gdXAgY29ycmVjdGx5LgogICAgIC8vIEluc3RlYWQsIGp1c3QgaW5jbHVkZSBh
bGwgY2FzdGluZyBvcGVyYXRvcnMuCiAgICAgZnVuY3Rpb25OYW1lcy5hZGQoIm9wZXJhdG9yIGNh
c3QiX3N0cik7CisgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhbiBhdXRob3IgY2Fu
J3Qgd3JpdGUgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyBhbnl0aGluZyBp
biB0aGUgc3RhbmRhcmQgbGlicmFyeS4KKyAgICAvLyBJZiB0aGV5IGRvIHNvLCB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSBpdCBjb2xsaWRlcy4KKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlv
biA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICBmdW5jdGlvbk5hbWVz
LmFkZChmdW5jdGlvbkRlZmluaXRpb24tPm5hbWUoKSk7CiAgICAgd2hpbGUgKCFmdW5jdGlvbk5h
bWVzLmlzRW1wdHkoKSkgewogICAgICAgICBhdXRvIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25z
Q291bnQgPSBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkuc2l6ZSgpOwogICAg
ICAgICBhdXRvIGZ1bmN0aW9uRGVmaW5pdGlvbnNDb3VudCA9IHByb2dyYW0uZnVuY3Rpb25EZWZp
bml0aW9ucygpLnNpemUoKTsKQEAgLTExOSwxMSArMTIyLDggQEAgdm9pZCBpbmNsdWRlU3RhbmRh
cmRMaWJyYXJ5KFByb2dyYW0mIHByb2dyYW0sIFBhcnNlciYgcGFyc2VyLCBib29sIHBhcnNlRnVs
bFN0YW4KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBwcm9ncmFtLmZ1
bmN0aW9uRGVmaW5pdGlvbnMoKS5zaXplKCk7CiAgICAgICAgICAgICBhdXRvIHBhcnNlUmVzdWx0
ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcsIFBhcnNpbmdNb2RlOjpTdGFuZGFy
ZExpYnJhcnkpOwotICAgICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgewotICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSAocGFydGlhbCkgc3RhbmRhcmQgbGli
cmFyeTogIiwgTGV4ZXI6OmVycm9yU3RyaW5nKHN0cmluZ1ZpZXcsIHBhcnNlUmVzdWx0LmVycm9y
KCkpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXBhcnNlUmVzdWx0
KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChwYXJzZVJlc3VsdC5lcnJv
cigpKTsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBy
b2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLnNpemUoKSAhPSBzdGFydCkKICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJub24gbmF0aXZlIHN0ZGxpYiBmdW5jdGlvbjogJyIsIG5hbWUs
ICInIik7CkBAIC0xMzYsNiArMTM2LDcgQEAgdm9pZCBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5KFBy
b2dyYW0mIHByb2dyYW0sIFBhcnNlciYgcGFyc2VyLCBib29sIHBhcnNlRnVsbFN0YW4KICAgICAg
ICAgICAgIG5hbWVGaW5kZXIuVmlzaXRvcjo6dmlzaXQocHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRp
b25zKClbZnVuY3Rpb25EZWZpbml0aW9uc0NvdW50XSk7CiAgICAgICAgIGZ1bmN0aW9uTmFtZXMg
PSBuYW1lRmluZGVyLnRha2VGdW5jdGlvbk5hbWVzKCk7CiAgICAgfQorICAgIHJldHVybiB7IH07
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGls
aXRpZXMuaAppbmRleCBjYWY2YTQxZTIzYjljYmUxODM0NDgwYjRmY2FiZjEwY2NhYzBlNjM3Li4w
MThjZTdjOTZjODQwYmQ5N2VmODQxZjJjNDFiNDRkNDkyNTU0MGUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxp
dGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3Rh
bmRhcmRMaWJyYXJ5VXRpbGl0aWVzLmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTM2LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIGNsYXNzIFBhcnNlcjsKIGNs
YXNzIFByb2dyYW07CiAKLXZvaWQgaW5jbHVkZVN0YW5kYXJkTGlicmFyeShQcm9ncmFtJiwgUGFy
c2VyJiwgYm9vbCBwYXJzZUZ1bGxTdGFuZGFyZExpYnJhcnkpOworRXhwZWN0ZWQ8dm9pZCwgRXJy
b3I+IGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYsIFBhcnNlciYsIGJvb2wgcGFyc2VG
dWxsU3RhbmRhcmRMaWJyYXJ5KTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTdiYzNhOTA1ODUyNmEyOGRiZTc1NThh
ZTY0ZjkyNzhlOWU1MTA5ZC4uM2Q0ZTFlMmM2YTJhZTcwOGJmNTBkOTdlYzhmYjc1NTNlY2I5Yjc2
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTMzNDQsNiArMTMzNDQsNyBAQAogCQlDMjM0QTlCNTIxRTkyQzIzMDAzQzk4NEQg
LyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjM0QTlCNjIxRTkyQ0MwMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMjM0QTlCNzIxRTkyQ0MxMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyMzk4RUJEMjMwQTFCNzYwMDY0MTUwNyAvKiBXSExTTE5hbWVTcGFjZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTE5hbWVTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENhY2hlQ29yZVRleHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRm9udENhY2hlQ29yZVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzI0QTU3QUYyMUZBRDUzRjAwNEM2REQxIC8qIFdITFNMUGlwZWxpbmVEZXNjcmlwdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyNEE1N0IyMjFGQjhEREEwMDRDNkREMSAvKiBXSExTTFNlbWFu
dGljTWF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFNlbWFudGljTWF0Y2hlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzExNCw2ICsxNzExNSw3IEBACiAJ
CQkJQzIxQkY3MkQyMUNEODlFOTAwMjI3OTc5IC8qIFdITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5oICovLAogCQkJCUMyMUJGNzJDMjFDRDg5RTkwMDIyNzk3OSAvKiBXSExTTE1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5oICovLAogCQkJCTFDMzMyNzcxMjFDRjBCRTEwMDBEQzlGMiAvKiBX
SExTTE5hbWVkVHlwZS5oICovLAorCQkJCUMyMzk4RUJEMjMwQTFCNzYwMDY0MTUwNyAvKiBXSExT
TE5hbWVTcGFjZS5oICovLAogCQkJCUMyMUJGNzIzMjFDRDg5RTEwMDIyNzk3OSAvKiBXSExTTE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCAqLywKIAkJCQlDMjFCRjcyQTIxQ0Q4OUU3MDAyMjc5
NzkgLyogV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCAqLywKIAkJCQlDMjFCRjcwNzIxQ0Q4
OUM4MDAyMjc5NzkgLyogV0hMU0xOdWxsTGl0ZXJhbC5oICovLApAQCAtMTg1NTgsMTQgKzE4NTYw
LDE0IEBACiAJCTUxMEE1OEVFMUJBQjcxRTAwMEMxOTI4MiAvKiBzZXJ2ZXIgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTkzMjNCMDZEMjMwNjFFOUIwMDkw
MUM4QiAvKiBJREJTZXJpYWxpemF0aW9uQ29udGV4dC5jcHAgKi8sCi0JCQkJOTMyM0IwNkYyMzA2
MUU5QzAwOTAxQzhCIC8qIElEQlNlcmlhbGl6YXRpb25Db250ZXh0LmggKi8sCiAJCQkJNTFCQTRB
QzcxQkJDNUFENjAwREYzRDZEIC8qIElEQkJhY2tpbmdTdG9yZS5oICovLAogCQkJCTUxNkQ3RDZE
MUJCNUYwNjUwMEFGN0M3NyAvKiBJREJDb25uZWN0aW9uVG9DbGllbnQuY3BwICovLAogCQkJCTUx
MEE1OEZFMUJCMDdBQTUwMEMxOTI4MiAvKiBJREJDb25uZWN0aW9uVG9DbGllbnQuaCAqLywKIAkJ
CQk1MTZEN0Q2RTFCQjVGMDY1MDBBRjdDNzcgLyogSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdh
dGUuaCAqLywKIAkJCQk1MTFFQzEyNTFDNTBBQTU3MDAzMkY5ODMgLyogSURCU2VyaWFsaXphdGlv
bi5jcHAgKi8sCiAJCQkJNTExRUMxMjYxQzUwQUE1NzAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRp
b24uaCAqLywKKwkJCQk5MzIzQjA2RDIzMDYxRTlCMDA5MDFDOEIgLyogSURCU2VyaWFsaXphdGlv
bkNvbnRleHQuY3BwICovLAorCQkJCTkzMjNCMDZGMjMwNjFFOUMwMDkwMUM4QiAvKiBJREJTZXJp
YWxpemF0aW9uQ29udGV4dC5oICovLAogCQkJCTUxMEE1OEVGMUJBQjcyMEYwMEMxOTI4MiAvKiBJ
REJTZXJ2ZXIuY3BwICovLAogCQkJCTUxMEE1OEYwMUJBQjcyMEYwMEMxOTI4MiAvKiBJREJTZXJ2
ZXIuaCAqLywKIAkJCQk1MUVFQUE3MTFCRUZGQTc5MDAyMTgwMDggLyogSW5kZXhWYWx1ZUVudHJ5
LmNwcCAqLywKQEAgLTI5NTM2LDYgKzI5NTM4LDcgQEAKIAkJCQk1MTQ1QjEwQTFCQzQ4RTJFMDBF
ODYyMTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3
MjM2RDFCQjYxNzQ5MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTExRUMxMjgxQzUwQUFDQTAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTkzMjNCMDcwMjMwNjFGOTcwMDkwMUM4QiAvKiBJREJTZXJpYWxpemF0aW9u
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQkIxQkI0Q0JGODAwMTI4OThGIC8q
IElEQlNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQUQxQkI0QzRFODAwMTI4OThG
IC8qIElEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTk4RjdBRDFCQkREM0VC
MDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMDA5
LDcgKzMwMDEyLDYgQEAKIAkJCQlCQzQ5MThDOTBCRkVBMDUwMDA5RDYzMTYgLyogSlNIVE1MSUZy
YW1lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFBOTgwQTFDREQyRDAwQjQyQjI1
IC8qIEpTSFRNTEltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdFOTcwQTFB
ODNFMzAwN0ZCOEM1IC8qIEpTSFRNTElucHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
OTMyM0IwNzAyMzA2MUY5NzAwOTAxQzhCIC8qIElEQlNlcmlhbGl6YXRpb25Db250ZXh0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MzZCMDk1NjFGNUYzNEQ5MDAzQzM3MDIgLyogSlNIVE1MSW5wdXRF
bGVtZW50RW50cmllc0FQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTYxNDhBNzkxMkU0MUUzQjAw
NDRBNzg0IC8qIEpTSFRNTEtleWdlbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJB
QjIyMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJlbEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVNo
YWRlck1vZHVsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVNo
YWRlck1vZHVsZS5oCmluZGV4IGNlMzM0MWU0ZmE3NzQyMWE4M2VmMTBmNjgxNGExOWY4M2RjOThl
YWMuLmI4NjBlZWFkNjFmMTA5MjhlNjEwOWUxYWQ2NTBmN2MyNmY4MDc2YzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVTaGFkZXJNb2R1bGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVU2hhZGVyTW9kdWxl
LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJX
SExTTFByZXBhcmUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00NiwxNSArNDcsMTUg
QEAgY2xhc3MgR1BVU2hhZGVyTW9kdWxlIDogcHVibGljIFJlZkNvdW50ZWQ8R1BVU2hhZGVyTW9k
dWxlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxHUFVTaGFkZXJNb2R1bGU+IHRyeUNy
ZWF0ZShjb25zdCBHUFVEZXZpY2UmLCBjb25zdCBHUFVTaGFkZXJNb2R1bGVEZXNjcmlwdG9yJik7
CiAKLSAgICBQbGF0Zm9ybVNoYWRlck1vZHVsZSogcGxhdGZvcm1TaGFkZXJNb2R1bGUoKSBjb25z
dCB7IHJldHVybiBtX3dobHNsU291cmNlLmlzTnVsbCgpID8gbV9wbGF0Zm9ybVNoYWRlck1vZHVs
ZS5nZXQoKSA6IG51bGxwdHI7IH0KLSAgICBjb25zdCBTdHJpbmcmIHdobHNsU291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV93aGxzbFNvdXJjZTsgfQorICAgIFBsYXRmb3JtU2hhZGVyTW9kdWxlKiBw
bGF0Zm9ybVNoYWRlck1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2hsc2xNb2R1bGUgPyBudWxs
cHRyIDogbV9wbGF0Zm9ybVNoYWRlck1vZHVsZS5nZXQoKTsgfQorICAgIGNvbnN0IFdITFNMOjpT
aGFkZXJNb2R1bGUqIHdobHNsTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV93aGxzbE1vZHVsZS5n
ZXQoKTsgfQogCiBwcml2YXRlOgogICAgIEdQVVNoYWRlck1vZHVsZShQbGF0Zm9ybVNoYWRlck1v
ZHVsZVNtYXJ0UHRyJiYpOwotICAgIEdQVVNoYWRlck1vZHVsZShTdHJpbmcmJiB3aGxzbFNvdXJj
ZSk7CisgICAgR1BVU2hhZGVyTW9kdWxlKFdITFNMOjpPd25lZFNoYWRlck1vZHVsZSYmIHdobHNs
TW9kdWxlKTsKIAogICAgIFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHIgbV9wbGF0Zm9ybVNo
YWRlck1vZHVsZTsKLSAgICBTdHJpbmcgbV93aGxzbFNvdXJjZTsKKyAgICBXSExTTDo6T3duZWRT
aGFkZXJNb2R1bGUgbV93aGxzbE1vZHVsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9H
UFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQppbmRleCAxY2VmZWVkYjk4
NWU0YTc2NzQ1MzJmZDI4MzQ2MDdhOTc5YTAwYjU5Li5lMDFiNzVhZjk1MTc1YzA0OTY1NTgwODkz
ZjYxNjAwZDU2ZTUyZDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFs
Lm1tCkBAIC03MCwxMyArNzAsMTEgQEAgc3RhdGljIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlRGlt
ZW5zaW9ucz4gdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBpcGVsaW5lU3RhZ2UKICAgICBXSExT
TDo6Q29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnMgeyAxLCAxLCAxIH07CiAKICAg
ICBpZiAod2hsc2xEZXNjcmlwdG9yKSB7Ci0gICAgICAgIC8vIFdITFNMIGZ1bmN0aW9ucyBhcmUg
Y29tcGlsZWQgdG8gTVNMIGZpcnN0LgotICAgICAgICBTdHJpbmcgd2hsc2xTb3VyY2UgPSBjb21w
dXRlU3RhZ2UubW9kdWxlLT53aGxzbFNvdXJjZSgpOwotICAgICAgICBBU1NFUlQoIXdobHNsU291
cmNlLmlzTnVsbCgpKTsKKyAgICAgICAgQVNTRVJUKGNvbXB1dGVTdGFnZS5tb2R1bGUtPndobHNs
TW9kdWxlKCkpOwogCiAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+ZW50cnlQb2ludE5hbWUgPSBj
b21wdXRlU3RhZ2UuZW50cnlQb2ludDsKIAotICAgICAgICBhdXRvIHdobHNsQ29tcGlsZVJlc3Vs
dCA9IFdITFNMOjpwcmVwYXJlKHdobHNsU291cmNlLCAqd2hsc2xEZXNjcmlwdG9yKTsKKyAgICAg
ICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSgqY29tcHV0ZVN0YWdl
Lm1vZHVsZS0+d2hsc2xNb2R1bGUoKSwgKndobHNsRGVzY3JpcHRvcik7CiAgICAgICAgIGlmICgh
d2hsc2xDb21waWxlUmVzdWx0KSB7CiAgICAgICAgICAgICBlcnJvclNjb3Blcy5nZW5lcmF0ZVBy
ZWZpeGVkRXJyb3IobWFrZVN0cmluZygiV0hMU0wgY29tcGlsZSBlcnJvcjogIiwgd2hsc2xDb21w
aWxlUmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBA
IC0xMzQsNyArMTMyLDcgQEAgc3RhdGljIE9wdGlvbmFsPENvbnZlcnRSZXN1bHQ+IGNvbnZlcnRD
b21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKGNvbnN0IEdQVUNvbXB1dGUKIAogICAgIGNvbnN0IGF1
dG8mIGNvbXB1dGVTdGFnZSA9IGRlc2NyaXB0b3IuY29tcHV0ZVN0YWdlOwogCi0gICAgYm9vbCBp
c1dobHNsID0gIWNvbXB1dGVTdGFnZS5tb2R1bGUtPndobHNsU291cmNlKCkuaXNOdWxsKCk7Cisg
ICAgYm9vbCBpc1dobHNsID0gY29tcHV0ZVN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKTsKIAog
ICAgIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yPiB3aGxzbERlc2Ny
aXB0b3I7CiAgICAgaWYgKGlzV2hsc2wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1l
dGFsLm1tCmluZGV4IDg2YWFkZDg0MjA4MTI1NWNkMzU4MWQyNDgyMjBmZWQ1MGIyNTdhMTAuLmY0
YTAzNzFmYzk1NjllODQ4NGEzYzRiYTQ3N2UyODg0ODI1MjM1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1l
dGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9H
UFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCkBAIC0zNTcsNyArMzU3LDcgQEAgc3RhdGljIGJvb2wg
dHJ5U2V0TWV0YWxGdW5jdGlvbnMoTVRMTGlicmFyeSAqdmVydGV4TWV0YWxMaWJyYXJ5LCBNVExM
aWJyYXJ5ICpmcmEKICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCiAgICAg
ICAgIC8vIEhvd2V2ZXIsIGZyYWdtZW50IHNoYWRlcnMgYXJlIG9wdGlvbmFsLgotICAgICAgICBp
ZiAoIWZyYWdtZW50TWV0YWxMaWJyYXJ5KQorICAgICAgICBpZiAoIWZyYWdtZW50TWV0YWxMaWJy
YXJ5IHx8IGZyYWdtZW50RW50cnlQb2ludE5hbWUuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgICAgICBhdXRvIGZ1bmN0aW9uID0gYWRvcHROUyhbZnJhZ21lbnRNZXRh
bExpYnJhcnkgbmV3RnVuY3Rpb25XaXRoTmFtZTpmcmFnbWVudEVudHJ5UG9pbnROYW1lXSk7CkBA
IC0zODIsMTUgKzM4MiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlTZXRGdW5jdGlvbnMoY29uc3QgR1BV
UGlwZWxpbmVTdGFnZURlc2NyaXB0b3ImIHZlcnRleFN0YWdlLCBjb25zdAogICAgIFN0cmluZyB2
ZXJ0ZXhFbnRyeVBvaW50LCBmcmFnbWVudEVudHJ5UG9pbnQ7CiAKICAgICBpZiAod2hsc2xEZXNj
cmlwdG9yKSB7Ci0gICAgICAgIC8vIFdITFNMIGZ1bmN0aW9ucyBhcmUgY29tcGlsZWQgdG8gTVNM
IGZpcnN0LgotICAgICAgICBTdHJpbmcgd2hsc2xTb3VyY2UgPSB2ZXJ0ZXhTdGFnZS5tb2R1bGUt
PndobHNsU291cmNlKCk7Ci0gICAgICAgIEFTU0VSVCghd2hsc2xTb3VyY2UuaXNOdWxsKCkpOwor
ICAgICAgICBBU1NFUlQodmVydGV4U3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpKTsKKyAgICAg
ICAgQVNTRVJUKCFmcmFnbWVudFN0YWdlIHx8IGZyYWdtZW50U3RhZ2UtPm1vZHVsZS0+d2hsc2xN
b2R1bGUoKSk7CiAKICAgICAgICAgd2hsc2xEZXNjcmlwdG9yLT52ZXJ0ZXhFbnRyeVBvaW50TmFt
ZSA9IHZlcnRleFN0YWdlLmVudHJ5UG9pbnQ7CiAgICAgICAgIGlmIChmcmFnbWVudFN0YWdlKQog
ICAgICAgICAgICAgd2hsc2xEZXNjcmlwdG9yLT5mcmFnbWVudEVudHJ5UG9pbnROYW1lID0gZnJh
Z21lbnRTdGFnZS0+ZW50cnlQb2ludDsKIAotICAgICAgICBhdXRvIHdobHNsQ29tcGlsZVJlc3Vs
dCA9IFdITFNMOjpwcmVwYXJlKHdobHNsU291cmNlLCAqd2hsc2xEZXNjcmlwdG9yKTsKKyAgICAg
ICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSgqdmVydGV4U3RhZ2Uu
bW9kdWxlLT53aGxzbE1vZHVsZSgpLCBmcmFnbWVudFN0YWdlID8gZnJhZ21lbnRTdGFnZS0+bW9k
dWxlLT53aGxzbE1vZHVsZSgpIDogbnVsbHB0ciwgKndobHNsRGVzY3JpcHRvcik7CiAgICAgICAg
IGlmICghd2hsc2xDb21waWxlUmVzdWx0KSB7CiAgICAgICAgICAgICBlcnJvclNjb3Blcy5nZW5l
cmF0ZVByZWZpeGVkRXJyb3IobWFrZVN0cmluZygiV0hMU0wgY29tcGlsZSBlcnJvcjogIiwgd2hs
c2xDb21waWxlUmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTQyMCw3ICs0MTksOCBAQCBzdGF0aWMgYm9vbCB0cnlTZXRGdW5jdGlvbnMoY29uc3QgR1BVUGlw
ZWxpbmVTdGFnZURlc2NyaXB0b3ImIHZlcnRleFN0YWdlLCBjb25zdAogCiAgICAgICAgIGZyYWdt
ZW50TGlicmFyeSA9IHZlcnRleExpYnJhcnk7CiAgICAgICAgIHZlcnRleEVudHJ5UG9pbnQgPSB3
aGxzbENvbXBpbGVSZXN1bHQtPm1hbmdsZWRWZXJ0ZXhFbnRyeVBvaW50TmFtZS50b1N0cmluZygp
OwotICAgICAgICBmcmFnbWVudEVudHJ5UG9pbnQgPSB3aGxzbENvbXBpbGVSZXN1bHQtPm1hbmds
ZWRGcmFnbWVudEVudHJ5UG9pbnROYW1lLnRvU3RyaW5nKCk7CisgICAgICAgIGlmIChmcmFnbWVu
dFN0YWdlKQorICAgICAgICAgICAgZnJhZ21lbnRFbnRyeVBvaW50ID0gd2hsc2xDb21waWxlUmVz
dWx0LT5tYW5nbGVkRnJhZ21lbnRFbnRyeVBvaW50TmFtZS50b1N0cmluZygpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIHZlcnRleExpYnJhcnkgPSB2ZXJ0ZXhTdGFnZS5tb2R1bGUtPnBsYXRmb3Jt
U2hhZGVyTW9kdWxlKCk7CiAgICAgICAgIHZlcnRleEVudHJ5UG9pbnQgPSB2ZXJ0ZXhTdGFnZS5l
bnRyeVBvaW50OwpAQCAtNDUyLDggKzQ1Miw5IEBAIHN0YXRpYyBSZXRhaW5QdHI8TVRMUmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yPiBjb252ZXJ0UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKGNvCiAg
ICAgY29uc3QgYXV0byYgdmVydGV4U3RhZ2UgPSBkZXNjcmlwdG9yLnZlcnRleFN0YWdlOwogICAg
IGNvbnN0IGF1dG8mIGZyYWdtZW50U3RhZ2UgPSBkZXNjcmlwdG9yLmZyYWdtZW50U3RhZ2U7CiAK
LSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NTQ0NiBBbGxvdyBXSExTTCBzaGFkZXJzIHRvIGNvbWUgZnJvbSBkaWZmZXJlbnQgcHJvZ3JhbXMu
Ci0gICAgYm9vbCBpc1dobHNsID0gIXZlcnRleFN0YWdlLm1vZHVsZS0+d2hsc2xTb3VyY2UoKS5p
c051bGwoKSAmJiAoIWZyYWdtZW50U3RhZ2UgfHwgdmVydGV4U3RhZ2UubW9kdWxlLnB0cigpID09
IGZyYWdtZW50U3RhZ2UtPm1vZHVsZS5wdHIoKSk7CisgICAgaWYgKGZyYWdtZW50U3RhZ2UgJiYg
c3RhdGljX2Nhc3Q8Ym9vbD4odmVydGV4U3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpKSAhPSBz
dGF0aWNfY2FzdDxib29sPihmcmFnbWVudFN0YWdlLT5tb2R1bGUtPndobHNsTW9kdWxlKCkpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBib29sIGlzV2hsc2wgPSB2ZXJ0ZXhTdGFnZS5t
b2R1bGUtPndobHNsTW9kdWxlKCk7CiAKICAgICAvLyBTZXQgZGF0YSBmb3IgdGhlIE1ldGFsIHBp
cGVsaW5lIGRlc2NyaXB0b3IgKGFuZCBXSExTTCdzLCBpZiBuZWVkZWQpLgogICAgIE9wdGlvbmFs
PFdITFNMOjpSZW5kZXJQaXBlbGluZURlc2NyaXB0b3I+IHdobHNsRGVzY3JpcHRvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVTaGFk
ZXJNb2R1bGVNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVTaGFkZXJNb2R1bGVNZXRhbC5tbQppbmRleCBiN2Y1NmM4MzI3Y2FhYmIxNDI0OTUw
MDRhNjJlOTJjNWQ3MDg5YmQxLi4zMjIxNDg1OTA2Mjc4MTY3MDdjYmJmYTA5MjkwYmY1ZjJjNTcy
NjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVNoYWRlck1vZHVsZU1ldGFsLm1tCkBAIC00NCw4ICs0NCwx
MSBAQCBSZWZQdHI8R1BVU2hhZGVyTW9kdWxlPiBHUFVTaGFkZXJNb2R1bGU6OnRyeUNyZWF0ZShj
b25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29ucwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgCi0gICAgaWYgKGRlc2NyaXB0b3IuaXNXSExTTCkKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBHUFVTaGFkZXJNb2R1bGUoU3RyaW5nKGRlc2NyaXB0b3IuY29kZSkpKTsKKyAg
ICBpZiAoZGVzY3JpcHRvci5pc1dITFNMKSB7CisgICAgICAgIGlmIChhdXRvIHdobHNsTW9kdWxl
ID0gV0hMU0w6OmNyZWF0ZVNoYWRlck1vZHVsZShkZXNjcmlwdG9yLmNvZGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHUFVTaGFkZXJNb2R1bGUoV1RGTW92ZSh3aGxzbE1vZHVs
ZSkpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogCiAgICAgUGxhdGZvcm1TaGFk
ZXJNb2R1bGVTbWFydFB0ciBtb2R1bGU7CiAKQEAgLTY2LDggKzY5LDggQEAgR1BVU2hhZGVyTW9k
dWxlOjpHUFVTaGFkZXJNb2R1bGUoUGxhdGZvcm1TaGFkZXJNb2R1bGVTbWFydFB0ciYmIG1vZHVs
ZSkKIHsKIH0KIAotR1BVU2hhZGVyTW9kdWxlOjpHUFVTaGFkZXJNb2R1bGUoU3RyaW5nJiYgd2hs
c2xTb3VyY2UpCi0gICAgOiBtX3dobHNsU291cmNlKFdURk1vdmUod2hsc2xTb3VyY2UpKQorR1BV
U2hhZGVyTW9kdWxlOjpHUFVTaGFkZXJNb2R1bGUoV0hMU0w6Ok93bmVkU2hhZGVyTW9kdWxlJiYg
d2hsc2xNb2R1bGUpCisgICAgOiBtX3dobHNsTW9kdWxlKFdURk1vdmUod2hsc2xNb2R1bGUpKQog
ewogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggZTEzMWE2ODdmNTBlZTJhNGJlOTAwZDNmZTBlYTIzYmVjYjcwMTU0MC4u
YzRjMjZkNDIxYmJiMmFhZGM3ZDI1MTI4NDNjNTE4NmUyMmIzMTljZCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDY1IEBACisyMDE5LTA4LTE5ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5j
b20+CisKKyAgICAgICAgW1dITFNMXSBWZXJ0ZXggc2hhZGVyIGFuZCBmcmFnbWVudCBzaGFkZXIg
bmVlZCB0byBiZSBhYmxlIHRvIGNvbWUgZnJvbSB0d28gZGlmZmVyZW50IHByb2dyYW1zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU0NDYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMC1leHBl
Y3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTAuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLTExLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMTItZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTEyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMy1leHBlY3RlZC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMTMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE0LWV4cGVj
dGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMTUtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE1Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0xNi1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTYuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE3LWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0xNy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTgtZXhwZWN0
ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0xOS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTkuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTItZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTIuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIwLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTIwLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MjItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjIuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTIzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMjQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI1LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTI1Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNi1l
eHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjYuaHRtbDogQWRkZWQuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTI3LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI3Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTQtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtNC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy01Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy02
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTYuaHRtbDogQWRkZWQuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTctZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTcuaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTgtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtOC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy05Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy1leHBlY3RlZC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMuaHRtbDogQWRkZWQuCisKIDIwMTktMDgtMTcgIEFudHRp
IEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnRlbnQgaW4gPGlmcmFt
ZT4gc2hvdWxkIG92ZXJyaWRlICJ0b3VjaC1hY3Rpb24iIHNldCBpbiBlbWJlZGRpbmcgZG9jdW1l
bnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMC1leHBlY3RlZC5odG1sIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTEwLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNlN2JlN2Y0MTZhYTU1ZTNj
YmZhNTRkODNlOTJjM2FlYTMzYzBmOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0xMC1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3Vu
ZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTEwLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTAuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yN2U1ZjViMGJjMjc1ODk2Yjk5M2RhZWMyYjc0ZWQyNGM2MjE0NzdkCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEwLmh0bWwKQEAgLTAsMCArMSwxMDUgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0i
Y2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29u
c3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxv
YXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4g
cG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCit0eXBlZGVm
IEZvbyA9IGludDsKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRp
b24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgRm9vIHg7CisgICAgcmV0dXJu
IGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVs
ZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3Qg
ZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBm
cmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0
YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hh
ZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRp
dmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0
YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxw
aGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
clN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQs
IHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVw
dGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFk
ZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3Ry
aWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9
OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91
dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGlu
ZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVU
b3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3Rh
dGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07
CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUo
cmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9Owor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVy
RGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2
ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9
OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1
cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJz
dG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNo
bWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9y
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwg
WzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFu
ZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5k
QnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Cisg
ICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBm
dW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBk
cmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTExLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTEtZXhwZWN0ZWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mM2U3YmU3ZjQxNmFhNTVlM2NiZmE1NGQ4M2U5MmMzYWVhMzNjMGY5Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTExLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCAr
MSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
L2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2Fu
dmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3Jp
cHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Citk
cmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTEuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0xMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhMmU3MjYxYzA2ZDcxMTYy
NzkyMWU2YzNlNTUwMDIwZTI1YmRkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTEuaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCit2
ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkp
IDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFn
bWVudFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBGb28geworICAgIGludCB4OworfQorCitmcmFn
bWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24p
IDogU1ZfVGFyZ2V0IDAgeworICAgIEZvbyBmOworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwg
MSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRl
eFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNo
YWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZl
cnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0
IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJp
YW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6
ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1h
dDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07
IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0g
bnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZv
cm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0
ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29u
c3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9
IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6
YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwg
c2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdy
aXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0g
MTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29u
dGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZv
cm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZp
Z3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0
dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4
dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25z
dCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQor
ICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xv
ckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRh
cmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9y
OiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBj
b25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5j
aWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNv
ZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQ
YXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgp
OworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYg
KHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0
QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSku
dGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25C
bHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMi1leHBlY3RlZC5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTEyLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNlN2Jl
N2Y0MTZhYTU1ZTNjYmZhNTRkODNlOTJjM2FlYTMzYzBmOQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0xMi1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25C
bHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEyLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzRlNTY0MjJjM2NmZDU1ODgwMGRkZDIyYzg2ODJiMGFi
YTUzYzNjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEyLmh0bWwKQEAgLTAs
MCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8
c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0
ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsK
KyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2Ug
PSBgCitlbnVtIEZvbyB7CisgICAgdgorfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28g
ZiA9IEZvby52OworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCitjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRl
dmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9
KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7
bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVy
In07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAg
IGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAi
bm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBh
bHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVC
aXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBj
b25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9Owor
ICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19
OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7
dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQg
PSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsK
KworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJh
Z21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JT
dGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNl
LmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVm
ZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
ckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1
ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsz
XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
M10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAo
KTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAg
Y29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0i
fTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2Fw
Q2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdl
dEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRU
ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9
IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHty
OiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3th
dHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9w
OiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25z
dCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVz
Y3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFz
cyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxp
bmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZl
cnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0
LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3Qg
Y29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRR
dWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVu
KGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOwor
fSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29m
dHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTEzLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNlN2JlN2Y0MTZhYTU1ZTNjYmZhNTRk
ODNlOTJjM2FlYTMzYzBmOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMy1l
eHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29m
dHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTEzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43YTdhYzQ3NDkzMDc0OWZiN2NkY2JkZmM2MDdjZDBmOTcyOTE5NmRhCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEzLmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVy
dGV4U2hhZGVyU291cmNlID0gYAordHlwZWRlZiBGb28gPSBpbnQ7Cit2ZXJ0ZXggZmxvYXQ0IHZl
cnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24g
eworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJj
ZSA9IGAKK3R5cGVkZWYgRm9vID0gaW50OworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1
cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2Up
IHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25z
dCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4
U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhT
aGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1p
dGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9u
U3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBh
bHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVu
ZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3No
YWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtz
dHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMg
PSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0
c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5
b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVs
aW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2
ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxT
dGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVz
Y3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwg
dXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07
CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZm
ZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0
IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250
ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2Ny
aXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENo
YWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwor
ICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0
VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFu
ZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTog
MX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4
dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDog
InN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNo
bWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRh
Y2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0Vu
Y29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0
b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJd
LCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21t
YW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1h
bmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsK
KyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0s
IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAg
IGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
K30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMTQtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNC1leHBlY3RlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYzZTdiZTdmNDE2YWE1NWUzY2JmYTU0ZDgzZTkyYzNhZWEzM2MwZjkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTQtZXhwZWN0ZWQuaHRtbApAQCAtMCww
ICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNj
cmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
K2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNC5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTE0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGE3NGRiMTVmZmMxZTVi
NGU2MzU5OGFmMmZmYTM1NjE2MWIwOTZiZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0xNC5odG1sCkBAIC0wLDAgKzEsMTA5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0
PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAK
K3N0cnVjdCBGb28geworICAgIGludCB4OworfQordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1
cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitzdHJ1
Y3QgRm9vIHsKKyAgICBpbnQgeDsKK30KK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihm
bG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJu
IGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVs
ZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3Qg
ZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBm
cmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0
YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hh
ZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRp
dmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0
YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxw
aGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
clN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQs
IHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVw
dGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFk
ZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3Ry
aWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9
OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91
dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGlu
ZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVU
b3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3Rh
dGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07
CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUo
cmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9Owor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVy
RGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2
ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9
OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1
cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJz
dG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNo
bWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9y
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwg
WzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFu
ZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5k
QnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Cisg
ICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBm
dW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBk
cmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTE1LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTUtZXhwZWN0ZWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mM2U3YmU3ZjQxNmFhNTVlM2NiZmE1NGQ4M2U5MmMzYWVhMzNjMGY5Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE1LWV4cGVjdGVkLmh0bWwKQEAgLTAsMCAr
MSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
L2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2Fu
dmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3Jp
cHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Citk
cmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTUuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0xNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2NjMyNDRiNmY1MTRjNjM2
NjgxNzZjYWIwNDkwZDE3NTdkNGE1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTUuaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCitl
bnVtIEZvbyB7CisgICAgeAorfQordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBv
c2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRp
b247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitlbnVtIEZvbyB7Cisg
ICAgeAorfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6
IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEs
IDEpOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0
ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhT
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1v
ZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2
ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25z
dCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRy
aWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNl
OiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Cisg
ICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3Jt
YXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1d
OyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9
IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBm
b3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1
dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNv
bnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBw
aXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ig
PSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJp
emF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQs
IHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURl
c2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBG
bG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVz
YWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBX
cml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZs
b2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAt
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9
IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAg
dmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENv
bnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBm
b3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25m
aWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4
dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRl
eHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29u
c3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30K
KyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29s
b3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVU
YXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xv
cjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAg
Y29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5j
b2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5k
UGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2go
KTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dl
dEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2Up
LnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTYtZXhwZWN0ZWQu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNi1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZTdi
ZTdmNDE2YWE1NWUzY2JmYTU0ZDgzZTkyYzNhZWEzM2MwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMTYtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNi5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTE2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE5OWY2MjQ5ZTQ3OGQ3ODdlYzc1NmQ3ZWE0NWY5M2Iz
OGNjOWU0MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNi5odG1sCkBAIC0w
LDAgKzEsMTA5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK2Zsb2F0NCBoZWxwZXIoKSB7
CisgICAgcmV0dXJuIGZsb2F0NCgwLCAwLCAwLCAwKTsKK30KK3ZlcnRleCBmbG9hdDQgdmVydGV4
U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7Cisg
ICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0g
YAorZmxvYXQ0IGhlbHBlcigpIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQor
ZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0
aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQor
YDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
Cithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRl
dmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dI
TFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVu
dFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFn
bWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0
cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBj
dWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2Jh
OHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVD
b2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Cisg
ICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJm
bG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFth
dHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRl
eElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4
U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3Rh
dGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNv
dW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRF
WCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10g
PSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdw
dSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJi
Z3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2Fw
Q2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3
YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3
ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFu
ZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25z
dCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2ht
ZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51
bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVu
ZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNo
bWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdp
blJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRW
ZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwor
ICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBk
ZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2
aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTctZXhwZWN0ZWQuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0xNy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZTdiZTdmNDE2YWE1
NWUzY2JmYTU0ZDgzZTkyYzNhZWEzM2MwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMTctZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE3Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTlmZjAxYzY2MTk2MTJiMzZhOGU1ZWFhYmM1MGJiZTkzYTdkM2VmMwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNy5odG1sCkBAIC0wLDAgKzEsMTA2
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gZmxvYXQ7Cit2ZXJ0
ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDog
U1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVu
dFNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gZmxvYXQ7CitmcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0
IDAgeworICAgIEZvbyB4ID0gMTsKKyAgICByZXR1cm4gZmxvYXQ0KHgsIDEsIDEsIDEpOworfQor
YDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
Cithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRl
dmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dI
TFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVu
dFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFn
bWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0
cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBj
dWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2Jh
OHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVD
b2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Cisg
ICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJm
bG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFth
dHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRl
eElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4
U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3Rh
dGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNv
dW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRF
WCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10g
PSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdw
dSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJi
Z3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2Fw
Q2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3
YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3
ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFu
ZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25z
dCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2ht
ZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51
bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVu
ZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNo
bWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdp
blJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRW
ZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwor
ICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBk
ZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2
aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTgtZXhwZWN0ZWQuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0xOC1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZTdiZTdmNDE2YWE1
NWUzY2JmYTU0ZDgzZTkyYzNhZWEzM2MwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMTgtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzJiMjNkOGI1ODY0NmEwNTMwNThkZDEzZTVjOTUyZGI4MGQ4ODk4Mgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOC5odG1sCkBAIC0wLDAgKzEsMTEx
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBGb28geworICAgIGZsb2F0IHg7
Cit9Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1
dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25z
dCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBGb28geworICAgIGZsb2F0IHg7Cit9
CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9z
aXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIEZvbyBmOworICAgIGYueCA9IDE7CisgICAgcmV0
dXJuIGZsb2F0NChmLngsIDEsIDEsIDEpOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZp
Y2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2Nv
ZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVy
dGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRT
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHBy
aW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0
aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25z
dCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0
IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JC
bGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25z
dCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0g
e3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9
IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlu
cHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1p
dGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5j
aWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5
b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBl
bGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVy
RGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICog
NCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklU
RX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhC
dWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3
YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsy
XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEy
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBj
b250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRl
c2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dh
cENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7
CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgp
OworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZh
dWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29t
bWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwg
YTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0
VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVP
cDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0
YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JB
dHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFz
c0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2Ny
aXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5l
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZm
ZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBj
b21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2Nv
bW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2Up
IHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAg
IH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgewor
ICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cisg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMTktZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOS1leHBlY3RlZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmYzZTdiZTdmNDE2YWE1NWUzY2JmYTU0ZDgzZTkyYzNhZWEzM2MwZjkK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTktZXhwZWN0ZWQuaHRtbApAQCAt
MCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMi
KTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0x
OS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y5YjFlN2ZhMTM0
OTU1ZmVjYThkODk3ZjlmZmJiYjc3OTQ0YTEzYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0xOS5odG1sCkBAIC0wLDAgKzEsMTExIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9
IGAKK2VudW0gRm9vIHsKKyAgICB4Cit9Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9h
dDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBw
b3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2VudW0gRm9v
IHsKKyAgICB4ID0gMCwKKyAgICB5ID0gMQorfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICBp
bnQgeSA9IGludChGb28ueSk7CisgICAgcmV0dXJuIGZsb2F0NChmbG9hdCh5KSwgMSwgMSwgMSk7
Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFz
Iik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRl
clNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxl
ID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2Us
IGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRl
eFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZy
YWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
ImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5n
bGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJj
dyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBj
b25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDog
InJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8v
IEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVs
bDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1h
dDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNl
dDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3Qg
dmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2
ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRp
b25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2Ft
cGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
VkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRl
QXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQz
MkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0
XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0
ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4
dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1h
dDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3Vy
ZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJl
ID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBj
b21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAg
IGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0
dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdl
dDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiBy
ZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25z
dCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNz
KCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwor
ICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVl
QmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yLWV4cGVjdGVkLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMi1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZTdiZTdmNDE2
YWE1NWUzY2JmYTU0ZDgzZTkyYzNhZWEzM2MwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMi1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFj
a2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmJlNjM5YmYzZjk1M2NiYTkwN2QyNGMwYjUwYTIwODU3ZjFiZTg5Ygot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yLmh0bWwKQEAgLTAsMCArMSwxMDYg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBp
ZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0Pgor
Y29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1
cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmbG9h
dDQgaGVscGVyKCkgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitmcmFnbWVu
dCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDog
U1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBoZWxwZXIoKTsKK30KK2A7CisKK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24g
c3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAg
IGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6
IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAg
ICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3Qg
cmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07
CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxl
bmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxM
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0
dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29u
c3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAg
Y29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhC
dWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmlj
ZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJy
YXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBz
d2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAg
IGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRl
c2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVu
dFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUu
Y3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNl
LmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6
IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1l
bnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVh
ciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9y
ID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0
IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRl
clBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5k
ZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5j
dGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTIwLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFm
MjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTIwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdjNDJhOGNmZmQ2OWRlN2Ew
ZWEzMDk2ODVkOTMwNDgzM2M4YjEwNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0yMC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVy
dGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6
IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21l
bnRTaGFkZXJTb3VyY2UgPSBgCitmbG9hdDQgaGVscGVyKCkgeworICAgIHJldHVybiBmbG9hdDQo
MSwgMSwgMSwgMSk7Cit9CitmbG9hdDQgaGVscGVyKCkgeworICAgIHJldHVybiBmbG9hdDQoMSwg
MSwgMSwgMSk7Cit9CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBoZWxwZXIoKTsK
K30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRl
eFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNo
YWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZl
cnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0
IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJp
YW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6
ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1h
dDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07
IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0g
bnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZv
cm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0
ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29u
c3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yKTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlv
biIpOworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwg
ZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29s
b3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEs
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisgICAg
cmV0dXJuIGRldmljZS5wb3BFcnJvclNjb3BlKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3Rh
cnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgaWYgKHgpCisgICAgICAgICAg
ICB0ZXN0UGFzc2VkKCIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdEZhaWxlZCgi
Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBm
dW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTIxLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMS1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBA
CitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMS5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTIxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDBkNmY2M2IyZjk0MmRkMGM4ZmFhNTRmNTUwNWE0YWI1MGRh
OThmYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMS5odG1sCkBAIC0wLDAg
KzEsNjYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhT
aGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAg
ICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBg
Cit0eXBlZGVmIEZvbyA9IGludDsKK3R5cGVkZWYgRm9vID0gaW50OworZnJhZ21lbnQgZmxvYXQ0
IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1Rhcmdl
dCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKworYXN5bmMgZnVu
Y3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0p
OworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHtt
b2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIi
fTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAg
Y29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJu
b25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQg
PSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFs
cGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJp
dHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNv
bnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07Cisg
ICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07
CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2
ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmlt
aXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVu
Y2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxh
eW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVy
cm9yU2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2
aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVu
Y3Rpb24oeCkgeworICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOwor
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRl
c3RQYXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjItZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTIyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2
ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLTIyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTIyLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjIuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zODM3YTBhZDk5NDNlODhmNjM1YjliMWRhYWVhNWYxYzhkNWFiOTM2Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTIyLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhT
aGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRp
b24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsK
K31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBGb28geworICAg
IGludCB4OworfQorc3RydWN0IEZvbyB7CisgICAgaW50IHg7Cit9CitmcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0
IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5j
dGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZp
Y2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6
IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVT
aGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21v
ZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9
OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBj
b25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5v
bmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9
IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxw
aGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0
cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29u
c3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAg
ICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsK
KyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3Zl
cnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0
b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisK
KyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1p
dGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5j
aWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5
b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBl
bGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJy
b3JTY29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZp
Y2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5j
dGlvbih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7Cisg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVz
dFBhc3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMjMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZm
NTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMjMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMjMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJjMjlhODdkMDg5N2EwOTQ5ZWM4ZTk1MmMxMWY0NTk3NmI3MGY0N2QKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMjMuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNo
YWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlv
biA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOwor
fWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZW51bSBGb28geworICAgIHgK
K30KK2VudW0gRm9vIHsKKyAgICB4Cit9CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVy
biBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZp
Y2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2Nv
ZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVy
dGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRT
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHBy
aW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0
aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25z
dCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0
IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JC
bGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25z
dCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0g
e3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9
IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlu
cHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVz
aEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCBy
YXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4
SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQor
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAg
ICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpT
VGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAg
IGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTI0LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNlN2JlN2Y0MTZhYTU1ZTNjYmZhNTRkODNl
OTJjM2FlYTMzYzBmOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNC1leHBl
Y3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdh
cmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTI0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44YmI4MGNiN2M2NTE4NGM1OGFhNzgzNmRhMjlhNTRkMzljZTM2YTJkCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTI0Lmh0bWwKQEAgLTAsMCArMSwxMDYgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4
U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247
Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmbG9hdCBzYXR1cmF0ZShm
bG9hdCB4LCBmbG9hdCB5KSB7CisgICAgcmV0dXJuIDE7Cit9CitmcmFnbWVudCBmbG9hdDQgZnJh
Z21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAg
eworICAgIHJldHVybiBmbG9hdDQoc2F0dXJhdGUoMywgNCksIHNhdHVyYXRlKDIpLCAxLCAxKTsK
K30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMi
KTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hh
ZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUg
PSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4
U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJh
Z21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
ZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmds
ZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3
IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNv
bnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAi
cmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8g
R1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxs
OworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0
OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2
ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBw
aXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91
dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3Zl
cnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlv
blN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1w
bGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlw
ZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29u
c3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVB
c3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAt
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRl
eEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0
KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0
OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJl
U3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUg
PSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJl
VmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNv
bW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAg
Y29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0
YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0
OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJl
ZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0
IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0
dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIu
YmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3Mo
KTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Cisg
ICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNp
Y0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVu
KGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVC
YWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI1LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0yNS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1
NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0yNS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0yNS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI1Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDcxYmM5MDE1YjA1ZjZjMTJhM2U2YjJkMDUyNjUyNmU3ZTQzNTM4MwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4
U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247
Cit9CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1Zf
UG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7
Cit9CitgOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2ZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcjIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFy
Z2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBm
dW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hM
U0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVh
dGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0g
e21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRl
ciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAg
ICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTog
Im5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwg
YWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRl
Qml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAg
Y29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsK
KyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVd
fTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0g
e3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7
CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCBy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHBy
aW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0
ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5l
TGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQ
aXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9w
RXJyb3JTY29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNE
ZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihm
dW5jdGlvbih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7
CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAg
dGVzdFBhc3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNi1leHBlY3RlZC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTI2LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNlN2JlN2Y0
MTZhYTU1ZTNjYmZhNTRkODNlOTJjM2FlYTMzYzBmOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0yNi1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVl
QmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI2Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MjYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MGQ5MjM3YjI4NmU2ZWQ4NmIxZGFhMzM2YzU1NTljNThmMTJl
ZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI2Lmh0bWwKQEAgLTAsMCAr
MSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2Ny
aXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhT
aGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAg
ICByZXR1cm4gcG9zaXRpb247Cit9CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxv
YXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBm
bG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9
IGAKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Q
b3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsK
K30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMi
KTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hh
ZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUg
PSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4
U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJh
Z21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
ZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmds
ZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3
IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNv
bnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAi
cmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8g
R1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxs
OworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0
OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2
ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBw
aXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91
dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3Zl
cnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlv
blN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1w
bGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlw
ZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29u
c3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVB
c3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAt
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRl
eEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0
KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0
OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJl
U3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUg
PSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJl
VmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNv
bW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAg
Y29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0
YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0
OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJl
ZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0
IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0
dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIu
YmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3Mo
KTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Cisg
ICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNp
Y0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVu
KGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVC
YWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI3LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0yNy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1
NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0yNy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0yNy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI3Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzAzMTU4Y2JkZTQ2ZDE0ZGZlY2RmYTZhYzU5Zjc0ZTI2YjRiYWI4YgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4
U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247
Cit9CitgOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2ZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJn
ZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2ZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbiwgYm9vbCBpc0Zv
bnRGYWNlIDogU1ZfSXNGcm9udEZhY2UpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9h
dDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsK
KyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBm
cmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZy
YWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3Rh
Z2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFk
ZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2
ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3Rh
dGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBo
YUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
U3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwg
d3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRl
ckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJp
ZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBb
aW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307
CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVycm9y
U2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ig
PSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJp
emF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQs
IHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURl
c2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRl
dmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAgIGlm
ICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlz
aEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0zLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4
MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTMtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMy5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wY2UwNTIzMTJkZTkzMWU1MTM1ZGVmODAx
ZjNjZmQwZjJhMTYwZmFlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTMuaHRt
bApAQCAtMCwwICsxLDY3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK2Zsb2F0NCBoZWxw
ZXIoKSB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK3ZlcnRleCBmbG9hdDQg
dmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlv
biB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291
cmNlID0gYAorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6
IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gaGVscGVyKCk7Cit9Citg
OworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFk
ZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBp
c1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhT
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJm
cmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xl
LXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ci
LCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJy
Z2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBH
UFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7
CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6
ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6
IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZl
cnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdt
ZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3Rh
dGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlv
dXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5j
cmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVy
biBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVl
OworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRl
dmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVz
dFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOwor
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rp
b24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy00LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy00LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jODY2NTg5ODQwMmRmZDYzN2JjMDAwZWRjYmViZjk3YjY3YTliMjdhCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTQuaHRtbApAQCAtMCwwICsxLDY2IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0
IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gaW50OwordmVydGV4IGZsb2F0
NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0
aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBgCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9u
IDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIEZvbyB4OworICAgIHJldHVybiBm
bG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2Up
IHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25z
dCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4
U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhT
aGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1p
dGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9u
U3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBh
bHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVu
ZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3No
YWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtz
dHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMg
PSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0
c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5
b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVs
aW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVy
cm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0
ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5w
dXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBy
ZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9u
KGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAg
IGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBm
dW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZp
bmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy01LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy01LWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYy
MzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGUzOTg2NTViMWMyODBjYmNmYmQ0
NGVmNTU4ODZkMzRjYTcyNGYwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTUu
aHRtbApAQCAtMCwwICsxLDY5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBG
b28geworICAgIGludCB4OworfQorCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQg
cG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3Np
dGlvbjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2ZyYWdtZW50IGZs
b2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9U
YXJnZXQgMCB7CisgICAgRm9vIHg7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30K
K2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRl
clNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxl
ID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2Us
IGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRl
eFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZy
YWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
ImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5n
bGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJj
dyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBj
b25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDog
InJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8v
IEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVs
bDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1h
dDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNl
dDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3Qg
dmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yKTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlvbiIp
OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJh
Z21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JT
dGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNl
LmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisgICAgcmV0
dXJuIGRldmljZS5wb3BFcnJvclNjb3BlKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQo
ZGV2aWNlKS50aGVuKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgaWYgKHgpCisgICAgICAgICAgICB0
ZXN0UGFzc2VkKCIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiIik7
CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0
ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5j
dGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTYt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTYtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtNi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNT
IAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy02Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjFkNGM0NmRkNzczMjNkYWM5MTBjNzE3MmIxZWE3MWIzNzkzNzZhZjAKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNi5odG1sCkBAIC0wLDAgKzEsNjggQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29u
c3QgdmVydGV4U2hhZGVyU291cmNlID0gYAorZW51bSBGb28geworICAgIHYKK30KK3ZlcnRleCBm
bG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Q
b3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hh
ZGVyU291cmNlID0gYAorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28geCA9IEZvby52Owor
ICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBz
dGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9
KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJN
b2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTog
ZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAg
IGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCBy
YXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsK
KyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9Owor
ICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVu
ZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwK
KyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0
cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25z
dCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBj
b25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1
ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7
YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBk
ZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRv
cG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0
ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29w
ZSgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50
aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4
KSB7CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAg
IGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3Nl
ZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtNy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZTdiZTdmNDE2YWE1NWUzY2Jm
YTU0ZDgzZTkyYzNhZWEzM2MwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
Ny1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZElu
U29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTcuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNGVlZTNkYTE0M2E4MDJlNDcxNTUwMWYyODdhZGUwNGVjMmUxOTAxMQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03Lmh0bWwKQEAgLTAsMCArMSwxMDkgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9qcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVy
dGV4U2hhZGVyU291cmNlID0gYAorZmxvYXQ0IGhlbHBlcigpIHsKKyAgICByZXR1cm4gZmxvYXQ0
KDAsIDAsIDAsIDApOworfQordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247
Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmbG9hdDQgaGVscGVyKCkg
eworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitmcmFnbWVudCBmbG9hdDQgZnJh
Z21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAg
eworICAgIHJldHVybiBoZWxwZXIoKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNl
KSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1v
ZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29u
c3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRl
eFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4
U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmlt
aXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlv
blN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3Qg
YWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBj
b2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxl
bmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3Qg
ZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtz
aGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7
c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRz
ID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1
dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExh
eW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBl
bGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRp
dmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2ls
U3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91
dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxp
bmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVm
ZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2Fp
dCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29u
dGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNj
cmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBD
aGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsK
KyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVs
dFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1h
bmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6
IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRl
eHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6
ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFj
aG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0
YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NF
bmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlw
dG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVy
XSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29t
bWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21t
YW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53
YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7
CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAg
ICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLTgtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTgtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1
IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy04Lmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtOC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViNzE3NzhiYmM5ZTk3ODA2YjU2ZDljNzZmOGE3ODA0M2Vh
MDQ3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOC5odG1sCkBAIC0wLDAg
KzEsNjcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhT
aGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAg
ICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBg
CitmbG9hdCBzYXR1cmF0ZShmbG9hdCB4KSB7CisgICAgcmV0dXJuIDA7Cit9CitmcmFnbWVudCBm
bG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1Zf
VGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3lu
YyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUg
PSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlz
V0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0
cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdl
ID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNo
YWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsK
KyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9k
ZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3Jt
IiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldy
aXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisg
ICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
fTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1
dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0
ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERl
c2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
cik7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2Us
IHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0
aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5k
ZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2Uu
cG9wRXJyb3JTY29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFz
aWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhl
bihmdW5jdGlvbih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgi
Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBm
aW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgi
Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy05LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy05LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4
YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtOS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTkuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yOTIwYmFhMjAxNzdjZjkyMDE1MmI4YzQxODQwNzcwMzcxYTVkMjg2Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTkuaHRtbApAQCAtMCwwICsxLDY1IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNo
YWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlv
biA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOwor
fWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAordHlwZWRlZiBib29sMiA9IGlu
dDsKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Q
b3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsK
K30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRl
eFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNo
YWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZl
cnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0
IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJp
YW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6
ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1h
dDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07
IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0g
bnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZv
cm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0
ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29u
c3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yKTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlv
biIpOworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwg
ZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29s
b3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEs
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisgICAg
cmV0dXJuIGRldmljZS5wb3BFcnJvclNjb3BlKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3Rh
cnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgaWYgKHgpCisgICAgICAgICAg
ICB0ZXN0UGFzc2VkKCIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdEZhaWxlZCgi
Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBm
dW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mM2U3YmU3ZjQxNmFhNTVlM2NiZmE1NGQ4M2U5MmMzYWVhMzNjMGY5Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52
YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVh
cmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NzVhNzNmMzJjN2ZmNWQxNzM2MGNmNjg2MDUwNGM2ZDhj
MGFjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMuaHRtbApAQCAtMCwwICsx
LDEwMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
L2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2Fu
dmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3Jp
cHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNo
YWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAg
IHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAK
K2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3Np
dGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30K
K2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
KworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVy
TW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNX
SExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJh
Z21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1z
dHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3Iiwg
Y3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0
IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdi
YTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BV
Q29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwor
ICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAi
ZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBb
YXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0
ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERl
c2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRl
eFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0
YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVD
b3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJU
RVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9
IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5Wzdd
ID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1
ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJn
cHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAi
YmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dh
cENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBz
d2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmll
dyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1h
bmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29u
c3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNo
bWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBu
dWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1d
OworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJl
bmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFj
aG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVn
aW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsK
KyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAg
ZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0Rl
dmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1
bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNr
Z3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376678</attachid>
            <date>2019-08-19 02:16:07 -0700</date>
            <delta_ts>2019-08-19 04:28:03 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-195446-20190819021606.patch</filename>
            <type>text/plain</type>
            <size>237495</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmOTFkYzVmYTQzOTFh
NGRmNWNkOWRkMDQ1Yjk5MmIwMTdkYWJhYS4uMTMyNzMzNDk5YzhhZjE0YjA0YTgyY2FmZjFlODI5
ZDY5NmZlNmE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMiBAQAorMjAxOS0wOC0xOSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0g
VmVydGV4IHNoYWRlciBhbmQgZnJhZ21lbnQgc2hhZGVyIG5lZWQgdG8gYmUgYWJsZSB0byBjb21l
IGZyb20gdHdvIGRpZmZlcmVudCBwcm9ncmFtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMC5odG1sCisgICAgICAgICAgICAgICB3
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTEuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEyLmh0bWwKKyAgICAgICAgICAgICAgIHdl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0xMy5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTQuaHRtbAorICAgICAgICAgICAgICAgd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTE1Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNi5odG1sCisgICAgICAgICAgICAgICB3ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MTcuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0x
OS5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMi5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjAu
aHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIxLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMi5o
dG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjMuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI0Lmh0
bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjYuaHRt
bAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTI3Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0zLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy00Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy01Lmh0bWwKKyAg
ICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy02Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03Lmh0bWwKKyAgICAg
ICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy04Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy05Lmh0bWwKKyAgICAgICAg
ICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGdW5jdGlvbkRlY2xhcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uOjpuYW1lU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbjo6c2V0TmFtZVNwYWNlKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lU3BhY2UuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlV
dGlsaXRpZXMuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1l
ZFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlwZTo6bmFtZVNw
YWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlwZTo6c2V0
TmFtZVNwYWNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1
bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6ZW1pdE1l
dGFsRnVuY3Rpb25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNr
RHVwbGljYXRlRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpEdXBsaWNh
dGVGdW5jdGlvbktleTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpGdW5j
dGlvbktleTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y2hl
Y2tPcGVyYXRvck92ZXJsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpj
aGVja1NoYWRlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnZpc2l0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpyZXNvbHZlRnVuY3Rpb24pOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok5hbWVDb250ZXh0OjpnZXRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNv
bnRleHQ6OmdldEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRl
eHQ6OnNlYXJjaFR5cGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29u
dGV4dDo6c2VhcmNoRnVuY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpO
YW1lQ29udGV4dDo6Z2xvYmFsRXhpc3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpOYW1lQ29udGV4dDo6bG9jYWxFeGlzdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok5hbWVDb250ZXh0OjpleGlzdHMpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpO
YW1lQ29udGV4dDo6c2V0Q3VycmVudE5hbWVTcGFjZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok5hbWVSZXNvbHZlcjo6TmFtZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpO
YW1lUmVzb2x2ZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlTmFt
ZXNJblR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlVHlwZU5hbWVzSW5G
dW5jdGlvbnMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29s
dmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZVJlc29sdmVyOjpzZXRDdXJyZW50
TmFtZVNwYWNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpmYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQ
YXJzZXI6OmNvbnN1bWVJbnRlZ3JhbExpdGVyYWwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6Y29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlQ29uc3RhbnRFeHByZXNzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlQnVpbHRJblNlbWFu
dGljKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlUmVzb3VyY2VTZW1h
bnRpYyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVN0YWdlSW5PdXRT
ZW1hbnRpYyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZUVudW1lcmF0
aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZUVu
dW1lcmF0aW9uTWVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNl
TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQ
YXJzZXI6OnBhcnNlVmVydGV4T3JGcmFnbWVudEZ1bmN0aW9uRGVjbGFyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVN3aXRjaENhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VGb3JMb29wKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6Y29tcGxldGVBc3NpZ25tZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlUG9zc2libGVUZXJuYXJ5Q29uZGl0aW9u
YWwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUZXJtKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OlNoYWRlck1vZHVsZTo6U2hhZGVyTW9kdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpjcmVhdGVTaGFkZXJNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlNoYWRlck1vZHVsZURlbGV0ZXI6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OnByZXBhcmVTaGFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnByZXBhcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlByb2dyYW06OmFwcGVuZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpy
ZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJl
c29sdmVGdW5jdGlvbk92ZXJsb2FkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmVPdmVybG9hZEltcGwuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFNlbWFudGljTWF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0
Y2hTZW1hbnRpY3MpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmZpbmRFbnRyeVBvaW50KTog
RGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0
Y2hlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJy
YXJ5VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjppbmNsdWRlU3RhbmRh
cmRMaWJyYXJ5KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJk
TGlicmFyeVV0aWxpdGllcy5oOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVU2hhZGVyTW9kdWxl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpHUFVTaGFkZXJNb2R1bGU6OnBsYXRmb3JtU2hhZGVyTW9k
dWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVNoYWRlck1vZHVsZTo6d2hsc2xNb2R1
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVyTW9kdWxlOjp3aGxzbFNvdXJj
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29h
L0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6dHJ5U2V0RnVu
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRDb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlw
ZWxpbmVNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OnRyeVNldE1ldGFsRnVuY3Rpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OnRyeVNldEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW06CisgICAgICAgIChXZWJDb3Jl
OjpHUFVTaGFkZXJNb2R1bGU6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVTaGFk
ZXJNb2R1bGU6OkdQVVNoYWRlck1vZHVsZSk6CisKIDIwMTktMDgtMTYgIENvbW1pdCBRdWV1ZSAg
PGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIyNDg3NzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKaW5kZXggNjgw
NWQ2NjY0ZjkwN2M4M2NkNWI3YWY4ZGE0YmRmYTQ2ZGUyYjJiZC4uYjcyNTZkNTA1NDhmZTk5MDhh
NDI3YmY4ZjViMDFkN2Q5YmUzMTVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRp
b24uaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAj
aW5jbHVkZSAiV0hMU0xFbnRyeVBvaW50VHlwZS5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25B
dHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVTcGFjZS5oIgogI2luY2x1ZGUgIldITFNM
UGFyc2luZ01vZGUuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hM
U0xVbm5hbWVkVHlwZS5oIgpAQCAtODMsNiArODQsOSBAQCBwdWJsaWM6CiAKICAgICBQYXJzaW5n
TW9kZSBwYXJzaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2luZ01vZGU7IH0KIAorICAg
IE5hbWVTcGFjZSBuYW1lU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX25hbWVTcGFjZTsgfQorICAg
IHZvaWQgc2V0TmFtZVNwYWNlKE5hbWVTcGFjZSBuYW1lU3BhY2UpIHsgbV9uYW1lU3BhY2UgPSBu
YW1lU3BhY2U7IH0KKwogcHJpdmF0ZToKICAgICBDb2RlTG9jYXRpb24gbV9jb2RlTG9jYXRpb247
CiAgICAgQXR0cmlidXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsKQEAgLTkzLDYgKzk3LDcgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zIG1f
cGFyYW1ldGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+IG1fc2VtYW50aWM7Cisg
ICAgTmFtZVNwYWNlIG1fbmFtZVNwYWNlIHsgTmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZVNwYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lU3BhY2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDZm
ZGVmMTVmYjcxNzY4YmUwNTE5YTBlYTEzZjUyZTI0OTZlOGE4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZVNwYWNlLmgK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitu
YW1lc3BhY2UgQVNUIHsKKworLy8gRGlmZmVyZW50IHNoYWRlciBtb2R1bGVzIG9wZXJhdGUgaW4g
ZGlmZmVyZW50IG5hbWVzcGFjZXMuCisvLyBUaGlzIG1lYW5zIGl0J3MgcG9zc2libGUgdG8gaGF2
ZSB0d28gZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlcywgYXMgbG9uZyBhcyB0aGV5
IGFyZSBpbiBkaWZmZXJlbnQgbW9kdWxlcy4KK2VudW0gY2xhc3MgTmFtZVNwYWNlIDogdWludDhf
dCB7CisgICAgU3RhbmRhcmRMaWJyYXJ5ID0gMCwKKyAgICBOYW1lU3BhY2UxID0gMSwKKyAgICBO
YW1lU3BhY2UyID0gMgorfTsKKworfQorCit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJH
UFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xOYW1lZFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTE5hbWVkVHlwZS5oCmluZGV4IDQ1YjgwMTBjZDI4ZWJkZDUwZjg3MDE3ZWJlN2FjYjM0
MmU0Y2Y3YWUuLjU5OWM0NmM1ODUzODViMDE4N2MwMmViYzlkMmMzMDQzY2NiM2I4NzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVk
VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TE5hbWVkVHlwZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2lu
Y2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIK
ICNpbmNsdWRlICJXSExTTFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjAsMTIgKzYxLDE1IEBAIHB1YmxpYzoK
IAogICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogCisgICAgTmFtZVNwYWNl
IG5hbWVTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZVNwYWNlOyB9CisgICAgdm9pZCBzZXRO
YW1lU3BhY2UoTmFtZVNwYWNlIG5hbWVTcGFjZSkgeyBtX25hbWVTcGFjZSA9IG5hbWVTcGFjZTsg
fQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBUeXBlOwogICAgIFR5cGUmIHVuaWZ5Tm9k
ZUltcGwoKSB7IHJldHVybiAqdGhpczsgfQogICAgIENvZGVMb2NhdGlvbiBtX2NvZGVMb2NhdGlv
bjsKICAgICBTdHJpbmcgbV9uYW1lOworICAgIE5hbWVTcGFjZSBtX25hbWVTcGFjZSB7IE5hbWVT
cGFjZTo6U3RhbmRhcmRMaWJyYXJ5IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVu
Y3Rpb25Xcml0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKaW5kZXggZTUwMGY2MTE1ZmEwOGFmNGU0ZDM3YzZl
ZGYzNGMxMjRkOWQyZDBjYy4uMWU1MzFiMDI3ZmJjYjNhZDBkN2Y0NGY2ZDNiMjdhOGU2MDZkMjgw
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKQEAgLTgyNywxMSArODI3LDEy
IEBAIHByaXZhdGU6CiBSZW5kZXJNZXRhbEZ1bmN0aW9uRW50cnlQb2ludHMgZW1pdE1ldGFsRnVu
Y3Rpb25zKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIFByb2dyYW0mIHByb2dyYW0sIFR5
cGVOYW1lciYgdHlwZU5hbWVyLCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFu
dGljcywgTGF5b3V0JiBsYXlvdXQpCiB7CiAgICAgYXV0byYgdmVydGV4U2hhZGVyRW50cnlQb2lu
dCA9ICptYXRjaGVkU2VtYW50aWNzLnZlcnRleFNoYWRlcjsKLSAgICBhdXRvJiBmcmFnbWVudFNo
YWRlckVudHJ5UG9pbnQgPSAqbWF0Y2hlZFNlbWFudGljcy5mcmFnbWVudFNoYWRlcjsKKyAgICBh
dXRvKiBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQgPSBtYXRjaGVkU2VtYW50aWNzLmZyYWdtZW50
U2hhZGVyOwogCiAgICAgUmVhY2hhYmxlRnVuY3Rpb25zR2F0aGVyZXIgcmVhY2hhYmxlRnVuY3Rp
b25zR2F0aGVyZXI7CiAgICAgcmVhY2hhYmxlRnVuY3Rpb25zR2F0aGVyZXIuVmlzaXRvcjo6dmlz
aXQodmVydGV4U2hhZGVyRW50cnlQb2ludCk7Ci0gICAgcmVhY2hhYmxlRnVuY3Rpb25zR2F0aGVy
ZXIuVmlzaXRvcjo6dmlzaXQoZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50KTsKKyAgICBpZiAoZnJh
Z21lbnRTaGFkZXJFbnRyeVBvaW50KQorICAgICAgICByZWFjaGFibGVGdW5jdGlvbnNHYXRoZXJl
ci5WaXNpdG9yOjp2aXNpdCgqZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50KTsKICAgICBhdXRvIHJl
YWNoYWJsZUZ1bmN0aW9ucyA9IHJlYWNoYWJsZUZ1bmN0aW9uc0dhdGhlcmVyLnRha2VSZWFjaGFi
bGVGdW5jdGlvbnMoKTsKIAogICAgIGF1dG8gZnVuY3Rpb25NYXBwaW5nID0gZ2VuZXJhdGVNZXRh
bEZ1bmN0aW9uc01hcHBpbmcocHJvZ3JhbSk7CkBAIC04NDQsNyArODQ1LDcgQEAgUmVuZGVyTWV0
YWxGdW5jdGlvbkVudHJ5UG9pbnRzIGVtaXRNZXRhbEZ1bmN0aW9ucyhTdHJpbmdCdWlsZGVyJiBz
dHJpbmdCdWlsZGVyLAogICAgICAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnZpc2l0
KGZ1bmN0aW9uRGVmaW5pdGlvbik7CiAgICAgfQogCi0gICAgcmV0dXJuIHsgZnVuY3Rpb25NYXBw
aW5nLmdldCgmdmVydGV4U2hhZGVyRW50cnlQb2ludCksIGZ1bmN0aW9uTWFwcGluZy5nZXQoJmZy
YWdtZW50U2hhZGVyRW50cnlQb2ludCkgfTsKKyAgICByZXR1cm4geyBmdW5jdGlvbk1hcHBpbmcu
Z2V0KCZ2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50KSwgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50ID8g
ZnVuY3Rpb25NYXBwaW5nLmdldChmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQpIDogTWFuZ2xlZEZ1
bmN0aW9uTmFtZSB7IDAgfSB9OwogfQogCiBDb21wdXRlTWV0YWxGdW5jdGlvbkVudHJ5UG9pbnRz
IGVtaXRNZXRhbEZ1bmN0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBQcm9ncmFt
JiBwcm9ncmFtLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3Mm
JiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5jcHAKaW5kZXggZjhhN2EzZTkxZGQxMjcxN2FmY2Q3ZjZjNGUzMzU3MGY2
MWYzYzBhZC4uOWZlZjNhMWRiMjk0YzlkYmZlMjBkY2QxZDllM2MyOGFiZmRjMGIzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKQEAgLTc1LDYgKzc1LDExIEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKG1fZnVuY3Rpb24tPm5hbWUoKSAhPSBvdGhlci5tX2Z1bmN0aW9u
LT5uYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgaWYgKG1fZnVu
Y3Rpb24tPm5hbWVTcGFjZSgpICE9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkKKyAg
ICAgICAgICAgICYmIG90aGVyLm1fZnVuY3Rpb24tPm5hbWVTcGFjZSgpICE9IEFTVDo6TmFtZVNw
YWNlOjpTdGFuZGFyZExpYnJhcnkKKyAgICAgICAgICAgICYmIG1fZnVuY3Rpb24tPm5hbWVTcGFj
ZSgpICE9IG90aGVyLm1fZnVuY3Rpb24tPm5hbWVTcGFjZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgICAgIEFTU0VSVChtX2Z1bmN0aW9uLT5pc0Nhc3QoKSA9PSBvdGhlci5t
X2Z1bmN0aW9uLT5pc0Nhc3QoKSk7CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2Z1bmN0aW9uLT5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCmluZGV4IDYzMjU1
ZDQ2NGFlYjUwM2ZmOTAwNjRlZjRkYjM0NWMyODhhZGUzMzcuLjA3NmNiY2M4MjFkMjQ4MjhhYmFi
MTgxMjhkMjA4ZjMxMTcwODIyZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoISFtX2Nhc3RSZXR1cm5UeXBlICE9ICEhb3RoZXIubV9jYXN0UmV0dXJuVHlwZSkKKyAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PGJvb2w+KG1fY2FzdFJldHVyblR5cGUpICE9IHN0YXRpY19jYXN0
PGJvb2w+KG90aGVyLm1fY2FzdFJldHVyblR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIGlmICghbV9jYXN0UmV0dXJuVHlwZSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBz
dGF0aWMgYm9vbCBjaGVja1NlbWFudGljcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpbnB1dEl0
ZW1zLCBWZWN0b3I8RW50cnlQb2ludAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9v
bCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1
bmN0aW9uRGVmaW5pdGlvbiwgTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQorc3RhdGljIGJvb2wg
Y2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24sIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCwgQVNUOjpOYW1lU3BhY2Ug
Y3VycmVudE5hbWVTcGFjZSkKIHsKICAgICBlbnVtIGNsYXNzIENoZWNrS2luZCB7CiAgICAgICAg
IEluZGV4LApAQCAtNDgzLDE2ICs0ODMsMTQgQEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92
ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYXV0byYgdmFsdWVUeXBlID0gKmZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMV0tPnR5
cGUoKTsKICAgICAgICAgYXV0byBnZXR0ZXJOYW1lID0gZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUo
KS5zdWJzdHJpbmcoMCwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5sZW5ndGgoKSAtIDEpOwot
ICAgICAgICBhdXRvKiBnZXR0ZXJGdW5jcyA9IG5hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhnZXR0
ZXJOYW1lKTsKLSAgICAgICAgaWYgKCFnZXR0ZXJGdW5jcykKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgYXV0byBnZXR0ZXJGdW5jcyA9IG5hbWVDb250ZXh0LmdldEZ1bmN0aW9u
cyhnZXR0ZXJOYW1lLCBjdXJyZW50TmFtZVNwYWNlKTsKICAgICAgICAgVmVjdG9yPFJlc29sdmlu
Z1R5cGU+IGFyZ3VtZW50VHlwZXM7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVudFR5cGVSZWZlcmVuY2VzOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bUV4cGVjdGVkUGFyYW1ldGVycyAtIDE7ICsraSkKICAgICAg
ICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpW2ldLT50eXBlKCkpOwogICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3Vt
ZW50VHlwZXMpCiAgICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1
bWVudFR5cGUpOwotICAgICAgICBhdXRvKiBvdmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcyk7CisgICAgICAgIGF1dG8q
IG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoZ2V0dGVyRnVuY3MsIGFyZ3VtZW50
VHlwZVJlZmVyZW5jZXMsIGN1cnJlbnROYW1lU3BhY2UpOwogICAgICAgICBpZiAoIW92ZXJsb2Fk
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhdXRvJiByZXN1bHRUeXBlID0g
b3ZlcmxvYWQtPnR5cGUoKTsKQEAgLTY3MiwxNCArNjcwLDE1IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4gbV93cmFwcGVkRmxvYXRUeXBlOwogICAgIFJlZlB0cjxB
U1Q6OlVubmFtZWRUeXBlPiBtX2dlbmVyaWNQb2ludGVyVHlwZTsKICAgICBIYXNoTWFwPEFTVDo6
RXhwcmVzc2lvbiosIHN0ZDo6dW5pcXVlX3B0cjxSZXNvbHZpbmdUeXBlPj4gbV90eXBlTWFwOwot
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRzOwotICAgIEhhc2hTZXQ8U3Ry
aW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0
ZUVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRzWzNd
OworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHNbM107CisgICAgSGFz
aFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzWzNdOwogICAgIGNvbnN0IEludHJpbnNp
Y3MmIG1faW50cmluc2ljczsKICAgICBQcm9ncmFtJiBtX3Byb2dyYW07CiAgICAgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24qIG1fY3VycmVudEZ1bmN0aW9uIHsgbnVsbHB0ciB9OwogICAgIEhhc2hN
YXA8RnVuY3Rpb25LZXksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+LCBGdW5jdGlvbktleTo6SGFzaCwgRnVuY3Rpb25LZXk6OlRyYWl0
cz4gbV9mdW5jdGlvbnM7CiAgICAgSGFzaE1hcDxBbmRPdmVybG9hZFR5cGVLZXksIFJlZlB0cjxB
U1Q6OlVubmFtZWRUeXBlPiwgQW5kT3ZlcmxvYWRUeXBlS2V5OjpIYXNoLCBBbmRPdmVybG9hZFR5
cGVLZXk6OlRyYWl0cz4gbV9hbmRPdmVybG9hZFR5cGVNYXA7CisgICAgQVNUOjpOYW1lU3BhY2Ug
bV9jdXJyZW50TmFtZVNwYWNlIHsgQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSB9Owog
fTsKIAogdm9pZCBDaGVja2VyOjp2aXNpdChQcm9ncmFtJiBwcm9ncmFtKQpAQCAtNzIzLDE4ICs3
MjIsMjAgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IENoZWNrZXI6OmFzc2lnblR5cGVzKCkKIAog
Ym9vbCBDaGVja2VyOjpjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIHsKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CiAgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZp
bml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKICAgICBjYXNlIEFTVDo6RW50cnlQb2ludFR5cGU6
OlZlcnRleDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fdmVydGV4RW50cnlQ
b2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGJvb2w+KG1fdmVydGV4RW50cnlQb2ludHNbaW5kZXhdLmFkZChmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpKSk7CiAgICAgY2FzZSBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVu
dDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fZnJhZ21lbnRFbnRyeVBvaW50
cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9mcmFnbWVudEVudHJ5UG9pbnRzW2luZGV4XS5hZGQoZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKSkpOwogICAgIGNhc2UgQVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fY29tcHV0ZUVudHJ5UG9pbnRzLmFk
ZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxib29sPihtX2NvbXB1dGVFbnRyeVBvaW50c1tpbmRleF0uYWRkKGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCkpKTsKICAgICB9CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIHsKKyAgICBtX2N1cnJlbnROYW1lU3Bh
Y2UgPSBmdW5jdGlvbkRlZmluaXRpb24ubmFtZVNwYWNlKCk7CiAgICAgbV9jdXJyZW50RnVuY3Rp
b24gPSAmZnVuY3Rpb25EZWZpbml0aW9uOwogICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24uZW50
cnlQb2ludFR5cGUoKSkgewogICAgICAgICBpZiAoIWNoZWNrU2hhZGVyVHlwZShmdW5jdGlvbkRl
ZmluaXRpb24pKSB7CkBAIC03NTEsNyArNzUyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICghY2hlY2tPcGVyYXRvck92ZXJsb2FkKGZ1
bmN0aW9uRGVmaW5pdGlvbiwgbV9wcm9ncmFtLm5hbWVDb250ZXh0KCkpKSB7CisgICAgaWYgKCFj
aGVja09wZXJhdG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uLCBtX3Byb2dyYW0ubmFtZUNv
bnRleHQoKSwgbV9jdXJyZW50TmFtZVNwYWNlKSkgewogICAgICAgICBzZXRFcnJvcihFcnJvcigi
T3BlcmF0b3IgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgc2lnbmF0dXJlLiIsIGZ1bmN0aW9uRGVm
aW5pdGlvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODM0
LDcgKzgzNSw3IEBAIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogQ2hlY2tlcjo6cmVzb2x2ZUZ1
bmN0aW9uKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyCiAgICAgewogICAgICAgICBhdXRv
IGl0ZXIgPSBtX2Z1bmN0aW9ucy5maW5kKEZ1bmN0aW9uS2V5IHsgbmFtZSwgV1RGTW92ZSh1bm5h
bWVkVHlwZXMpLCBjYXN0UmV0dXJuVHlwZSB9KTsKICAgICAgICAgaWYgKGl0ZXIgIT0gbV9mdW5j
dGlvbnMuZW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24q
IGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoaXRlci0+dmFsdWUsIHR5cGVzLCBj
YXN0UmV0dXJuVHlwZSkpCisgICAgICAgICAgICBpZiAoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKGl0ZXItPnZhbHVlLCB0eXBlcywg
Y2FzdFJldHVyblR5cGUsIG1fY3VycmVudE5hbWVTcGFjZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uOwogICAgICAgICB9CiAgICAgfQpAQCAtMTY1MiwxNSArMTY1MywxNCBAQCB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQog
CiAgICAgaWYgKCFmdW5jdGlvbikgewogICAgICAgICBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQg
PSBtX3Byb2dyYW0ubmFtZUNvbnRleHQoKTsKLSAgICAgICAgaWYgKGF1dG8qIGNhc3RUeXBlcyA9
IG5hbWVDb250ZXh0LmdldFR5cGVzKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpIHsKLSAgICAgICAg
ICAgIGlmIChjYXN0VHlwZXMtPnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgQVNUOjpO
YW1lZFR5cGUmIGNhc3RUeXBlID0gKCpjYXN0VHlwZXMpWzBdLmdldCgpOwotICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uKHR5cGVzLCAib3BlcmF0b3IgY2FzdCJfc3Ry
LCBjYWxsRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSwgJmNhc3RUeXBlKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaGFzRXJyb3IoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIGlmIChmdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Np
b24uc2V0Q2FzdERhdGEoY2FzdFR5cGUpOwotICAgICAgICAgICAgfQorICAgICAgICBhdXRvIGNh
c3RUeXBlcyA9IG5hbWVDb250ZXh0LmdldFR5cGVzKGNhbGxFeHByZXNzaW9uLm5hbWUoKSwgbV9j
dXJyZW50TmFtZVNwYWNlKTsKKyAgICAgICAgaWYgKGNhc3RUeXBlcy5zaXplKCkgPT0gMSkgewor
ICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIGNhc3RUeXBlID0gY2FzdFR5cGVzWzBdLmdldCgp
OworICAgICAgICAgICAgZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb24odHlwZXMsICJvcGVyYXRv
ciBjYXN0Il9zdHIsIGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpLCAmY2FzdFR5cGUpOwor
ICAgICAgICAgICAgaWYgKGhhc0Vycm9yKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNl
dENhc3REYXRhKGNhc3RUeXBlKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAppbmRleCAxYWE1ZGZh
MzI0NWEwZTg1NWNkNzM0YWViN2NiODVmMzk0NzYzYjQ4Li4wNjJmZmZlM2ZkMWFjYTQzNGY0MzM0
ZDM2MzRkNjcyNTI5OWUzYjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTExleGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTExleGVyLmNwcApAQCAtMTcwMiw3ICsxNzAyLDYgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzTmV3bGluZShVQ2hhciBjb2RlVW5pdCkKICAgICB9CiB9CiAKLQogYXV0byBM
ZXhlcjo6bGluZUFuZENvbHVtbk51bWJlckZyb21PZmZzZXQoY29uc3QgU3RyaW5nVmlldyYgc3Ry
aW5nVmlldywgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0KSAtPiBMaW5lQW5kQ29sdW1uCiB7CiAgICAg
Ly8gQ291bnRpbmcgZnJvbSAxIHRvIG1hdGNoIG1vc3QgdGV4dCBlZGl0b3JzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0
LmNwcAppbmRleCAxOTkwMjEzYTNiNzI2YTMwMzNkMDE3YTYxMzFhZjRhNmRiNjY1YWZlLi5lNDQy
MjEzYjUyMTRiYWU5YjljMzQwMTI0YTdlODliM2U0NzEzYWJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcApA
QCAtNDUsOTkgKzQ1LDEzOCBAQCBOYW1lQ29udGV4dDo6TmFtZUNvbnRleHQoTmFtZUNvbnRleHQq
IHBhcmVudCkKIHsKIH0KIAotYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6VHlwZURlZmluaXRp
b24mIHR5cGVEZWZpbml0aW9uKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IE5hbWVDb250ZXh0Ojph
ZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCiB7Ci0gICAgaWYgKGV4aXN0
cyh0eXBlRGVmaW5pdGlvbi5uYW1lKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0
byByZXN1bHQgPSBtX3R5cGVzLmFkZCh0eXBlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7Ci0gICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhdXRvIGV4aXN0
aW5nID0gZ2xvYmFsRXhpc3RzKHR5cGVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChFcnJvcigiRHVwbGljYXRlIG5hbWUgaW4gcHJvZ3JhbSIsICpleGlz
dGluZykpOworICAgIHR5cGVEZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1lU3Bh
Y2UpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFt
ZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZCh0eXBlRGVmaW5p
dGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBl
PiwgMT4oKSk7CisgICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZCh0eXBlRGVmaW5pdGlvbik7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBO
YW1lQ29udGV4dDo6YWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5p
dGlvbikKIHsKLSAgICBpZiAoZXhpc3RzKHN0cnVjdHVyZURlZmluaXRpb24ubmFtZSgpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoc3RydWN0
dXJlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
TmFtZWRUeXBlPiwgMT4oKSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChhdXRvIGV4aXN0aW5nID0gZ2xvYmFsRXhpc3RzKHN0cnVj
dHVyZURlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVy
cm9yKCJEdXBsaWNhdGUgbmFtZSBpbiBwcm9ncmFtLiIsICpleGlzdGluZykpOworICAgIHN0cnVj
dHVyZURlZmluaXRpb24uc2V0TmFtZVNwYWNlKG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0
byBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2N1cnJlbnROYW1lU3BhY2UpOworICAg
IGF1dG8gcmVzdWx0ID0gbV90eXBlc1tpbmRleF0uYWRkKHN0cnVjdHVyZURlZmluaXRpb24ubmFt
ZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkp
OworICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4g
TmFtZUNvbnRleHQ6OmFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25E
ZWZpbml0aW9uKQogewotICAgIGlmIChleGlzdHMoZW51bWVyYXRpb25EZWZpbml0aW9uLm5hbWUo
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRk
KGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhdXRvIGV4aXN0aW5nID0gZ2xvYmFsRXhp
c3RzKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoRXJyb3IoIkR1cGxpY2F0ZSBuYW1lIGluIHByb2dyYW0uIiwgKmV4aXN0aW5nKSk7
CisgICAgZW51bWVyYXRpb25EZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1lU3Bh
Y2UpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFt
ZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZChlbnVtZXJhdGlv
bkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4sIDE+KCkpOworICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK0V4cGVjdGVkPHZv
aWQsIEVycm9yPiBOYW1lQ29udGV4dDo6YWRkKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24pCiB7Ci0gICAgaWYgKG1fdHlwZXMuZmluZChmdW5jdGlvbkRlZmluaXRp
b24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCi0gICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQo
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkgIT0gbV92YXJpYWJsZXMuZW5kKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChmdW5jdGlv
bkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgaWYgKGF1dG8qIHR5cGUgPSBzZWFy
Y2hUeXBlcyhmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEVycm9yKCJEdXBsaWNhdGUgbmFtZSBpbiBwcm9ncmFtLiIsIHR5cGUtPmNvZGVM
b2NhdGlvbigpKSk7CisgICAgZnVuY3Rpb25EZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJl
bnROYW1lU3BhY2UpOworICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnNbaW5kZXhdLmFkZChm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb24pOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiB7IH07CiB9CiAKLWJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCitFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiB7Ci0gICAgaWYgKG1fdHlwZXMuZmluZChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQotICAgICAgICB8fCBt
X3ZhcmlhYmxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3Zh
cmlhYmxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVzdWx0ID0g
bV9mdW5jdGlvbnMuYWRkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsK
KyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFj
ZSk7CisgICAgaWYgKGF1dG8qIHR5cGUgPSBzZWFyY2hUeXBlcyhuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiRHVw
bGljYXRlIG5hbWUgaW4gcHJvZ3JhbS4iLCB0eXBlLT5jb2RlTG9jYXRpb24oKSkpOworICAgIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uc2V0TmFtZVNwYWNlKG1fY3VycmVudE5hbWVTcGFjZSk7
CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9uc1tpbmRleF0uYWRkKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFw
cGVuZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBO
YW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCiB7Ci0gICAgaWYgKG1fZnVuY3Rpb25zLmZpbmQobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKLSAgICAgICAgfHwgbV92YXJpYWJsZXMu
ZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgaWYgKGF1dG8qIGZ1bmN0aW9uID0gc2Vh
cmNoRnVuY3Rpb25zKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkR1cGxpY2F0ZSBuYW1lIGluIHByb2dyYW0uIiwgZnVu
Y3Rpb24tPmNvZGVMb2NhdGlvbigpKSk7CisgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldE5h
bWVTcGFjZShtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlc1tp
bmRleF0uYWRkKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CiAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+
IE5hbWVDb250ZXh0OjphZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xh
cmF0aW9uKQogewogICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKS5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGV4aXN0cyh2YXJpYWJsZURlY2xhcmF0aW9u
Lm5hbWUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICBpZiAoYXV0byogZGVjbGFyYXRpb24gPSBsb2NhbEV4aXN0cyh2YXJpYWJsZURlY2xhcmF0aW9u
Lm5hbWUoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiRHVwbGljYXRl
IG5hbWUgaW4gcHJvZ3JhbS4iLCBkZWNsYXJhdGlvbi0+Y29kZUxvY2F0aW9uKCkpKTsKICAgICBh
dXRvIHJlc3VsdCA9IG1fdmFyaWFibGVzLmFkZChTdHJpbmcodmFyaWFibGVEZWNsYXJhdGlvbi5u
YW1lKCkpLCAmdmFyaWFibGVEZWNsYXJhdGlvbik7Ci0gICAgcmV0dXJuIHJlc3VsdC5pc05ld0Vu
dHJ5OworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+LCAxPiogTmFtZUNvbnRleHQ6OmdldFR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSkKK1Zl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4gTmFtZUNvbnRl
eHQ6OmdldFR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgQVNUOjpOYW1lU3BhY2UgZnJvbU5hbWVz
cGFjZSkKIHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlcy5maW5kKG5hbWUpOwotICAgIGlm
IChpdGVyYXRvciA9PSBtX3R5cGVzLmVuZCgpKSB7Ci0gICAgICAgIGlmIChtX3BhcmVudCkKLSAg
ICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0VHlwZXMobmFtZSk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgIC8vIE5hbWVkIHR5cGVzIGNhbiBvbmx5IGJlIGRlY2xhcmVkIGluIHRo
ZSBnbG9iYWwgbmFtZSBjb250ZXh0LgorICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgcmV0dXJu
IG1fcGFyZW50LT5nZXRUeXBlcyhuYW1lLCBmcm9tTmFtZXNwYWNlKTsKKworICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4gcmVzdWx0OworCisgICAg
dW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbU5hbWVzcGFjZSk7Cisg
ICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZXNbaW5kZXhdLmZpbmQobmFtZSk7CisgICAgaWYgKGl0
ZXJhdG9yICE9IG1fdHlwZXNbaW5kZXhdLmVuZCgpKSB7CisgICAgICAgIGZvciAoYXV0byB0eXBl
IDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0eXBlKTsKICAg
ICB9Ci0gICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CisKKyAgICBpZiAoZnJvbU5hbWVzcGFj
ZSAhPSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KSB7CisgICAgICAgIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOwor
ICAgICAgICBpdGVyYXRvciA9IG1fdHlwZXNbaW5kZXhdLmZpbmQobmFtZSk7CisgICAgICAgIGlm
IChpdGVyYXRvciAhPSBtX3R5cGVzW2luZGV4XS5lbmQoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIHR5cGUgOiBpdGVyYXRvci0+dmFsdWUpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh0eXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
KiBOYW1lQ29udGV4dDo6Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYgbmFtZSkKK1ZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IE5hbWVD
b250ZXh0OjpnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJiBuYW1lLCBBU1Q6Ok5hbWVTcGFjZSBm
cm9tTmFtZXNwYWNlKQogewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9ucy5maW5kKG5h
bWUpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2Z1bmN0aW9ucy5lbmQoKSkgewotICAgICAgICBp
ZiAobV9wYXJlbnQpCi0gICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldEZ1bmN0aW9ucyhu
YW1lKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gRnVuY3Rpb25zIGNhbiBvbmx5
IGJlIGRlY2xhcmVkIGluIHRoZSBnbG9iYWwgbmFtZSBjb250ZXh0LgorICAgIGlmIChtX3BhcmVu
dCkKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRGdW5jdGlvbnMobmFtZSwgZnJvbU5hbWVz
cGFjZSk7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24+LCAxPiByZXN1bHQ7CisKKyAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihmcm9tTmFtZXNwYWNlKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5j
dGlvbnNbaW5kZXhdLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25z
W2luZGV4XS5lbmQoKSkgeworICAgICAgICBmb3IgKGF1dG8gdHlwZSA6IGl0ZXJhdG9yLT52YWx1
ZSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7CisgICAgfQorCisgICAgaWYgKGZy
b21OYW1lc3BhY2UgIT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSkgeworICAgICAg
ICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRM
aWJyYXJ5KTsKKyAgICAgICAgaXRlcmF0b3IgPSBtX2Z1bmN0aW9uc1tpbmRleF0uZmluZChuYW1l
KTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25zW2luZGV4XS5lbmQoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIHR5cGUgOiBpdGVyYXRvci0+dmFsdWUpCisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCh0eXBlKTsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4g
Jml0ZXJhdG9yLT52YWx1ZTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiogTmFtZUNvbnRleHQ6OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFt
ZSkKQEAgLTE1MSwxMSArMTkwLDcyIEBAIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogTmFtZUNv
bnRleHQ6OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICByZXR1cm4gaXRlcmF0
b3ItPnZhbHVlOwogfQogCi1ib29sIE5hbWVDb250ZXh0OjpleGlzdHMoU3RyaW5nJiBuYW1lKQor
QVNUOjpOYW1lZFR5cGUqIE5hbWVDb250ZXh0OjpzZWFyY2hUeXBlcyhTdHJpbmcmIG5hbWUpIGNv
bnN0Cit7CisgICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgaWYgKG1fY3VycmVudE5hbWVTcGFj
ZSA9PSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KSB7CisgICAgICAgIGZvciAoYXV0
byYgdHlwZXMgOiBtX3R5cGVzKSB7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSB0eXBlcy5maW5k
KG5hbWUpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gdHlwZXMuZW5kKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZVswXS5nZXQoKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byBpdGVyID0gbV90eXBlc1tpbmRl
eF0uZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtX3R5cGVzW2luZGV4XS5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZVswXS5nZXQoKTsKKworICAgIGluZGV4ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOworICAgIGl0
ZXIgPSBtX3R5cGVzW2luZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChpdGVyICE9IG1fdHlwZXNb
aW5kZXhdLmVuZCgpKQorICAgICAgICByZXR1cm4gJml0ZXItPnZhbHVlWzBdLmdldCgpOworCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogTmFtZUNv
bnRleHQ6OnNlYXJjaEZ1bmN0aW9ucyhTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFtX3BhcmVudCk7CisgICAgaWYgKG1fY3VycmVudE5hbWVTcGFjZSA9PSBBU1Q6Ok5hbWVTcGFj
ZTo6U3RhbmRhcmRMaWJyYXJ5KSB7CisgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25zIDogbV9m
dW5jdGlvbnMpIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IGZ1bmN0aW9ucy5maW5kKG5hbWUp
OworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gZnVuY3Rpb25zLmVuZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiAmaXRlci0+dmFsdWVbMF0uZ2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gaXRlciA9IG1fZnVuY3Rpb25zW2lu
ZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChpdGVyICE9IG1fZnVuY3Rpb25zW2luZGV4XS5lbmQo
KSkKKyAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZVswXS5nZXQoKTsKKworICAgIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOwor
ICAgIGl0ZXIgPSBtX2Z1bmN0aW9uc1tpbmRleF0uZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAh
PSBtX2Z1bmN0aW9uc1tpbmRleF0uZW5kKCkpCisgICAgICAgIHJldHVybiAmaXRlci0+dmFsdWVb
MF0uZ2V0KCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworT3B0aW9uYWw8Q29kZUxvY2F0
aW9uPiBOYW1lQ29udGV4dDo6Z2xvYmFsRXhpc3RzKFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAg
ICBpZiAoYXV0byogdHlwZSA9IHNlYXJjaFR5cGVzKG5hbWUpKQorICAgICAgICByZXR1cm4gdHlw
ZS0+Y29kZUxvY2F0aW9uKCk7CisgICAgaWYgKGF1dG8qIGZ1bmN0aW9uID0gc2VhcmNoRnVuY3Rp
b25zKG5hbWUpKQorICAgICAgICByZXR1cm4gZnVuY3Rpb24tPmNvZGVMb2NhdGlvbigpOworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK0FTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogTmFt
ZUNvbnRleHQ6OmxvY2FsRXhpc3RzKFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV90eXBlcy5maW5kKG5hbWUpICE9IG1fdHlwZXMuZW5kKCkKLSAgICAgICAgfHwgbV9mdW5jdGlv
bnMuZmluZChuYW1lKSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQotICAgICAgICB8fCBtX3ZhcmlhYmxl
cy5maW5kKG5hbWUpICE9IG1fdmFyaWFibGVzLmVuZCgpOworICAgIEFTU0VSVChtX3BhcmVudCk7
CisgICAgYXV0byBpdGVyID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAh
PSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCmluZGV4
IGEwNDg3OGFlN2U5ZjFkODNlNWQ1OTJjMmZkNzUyYmVkYzkwZmE5Y2IuLjM4OWNkMDU4NzFlODJk
NjcxN2MzYjc5NDQ1ODA0Nzc3MTZhMGZkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKQEAgLTI3LDYgKzI3LDkg
QEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlICJXSExTTEVycm9yLmgiCisjaW5j
bHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIKKwogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01NCwyNSArNTcs
MzUgQEAgY2xhc3MgTmFtZUNvbnRleHQgewogcHVibGljOgogICAgIE5hbWVDb250ZXh0KE5hbWVD
b250ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsKIAotICAgIGJvb2wgYWRkKEFTVDo6VHlwZURlZmlu
aXRpb24mKTsKLSAgICBib29sIGFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsKLSAgICBi
b29sIGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOwotICAgIGJvb2wgYWRkKEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJik7Ci0gICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJik7Ci0gICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsK
LSAgICBib29sIGFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKLQotICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4qIGdldFR5cGVzKGNvbnN0
IFN0cmluZyYpOwotICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+KiBnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJik7CisgICAgdm9p
ZCBzZXRDdXJyZW50TmFtZVNwYWNlKEFTVDo6TmFtZVNwYWNlIGN1cnJlbnROYW1lU3BhY2UpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fcGFyZW50KTsKKyAgICAgICAgbV9jdXJyZW50TmFtZVNw
YWNlID0gY3VycmVudE5hbWVTcGFjZTsKKyAgICB9CisKKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJv
cj4gYWRkKEFTVDo6VHlwZURlZmluaXRpb24mKTsKKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4g
YWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpOworICAgIEV4cGVjdGVkPHZvaWQsIEVycm9y
PiBhZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICBFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gYWRkKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisgICAgRXhwZWN0ZWQ8dm9pZCwg
RXJyb3I+IGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICBFeHBlY3Rl
ZDx2b2lkLCBFcnJvcj4gYWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgRXhw
ZWN0ZWQ8dm9pZCwgRXJyb3I+IGFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKKworICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4gZ2V0VHlw
ZXMoY29uc3QgU3RyaW5nJiwgQVNUOjpOYW1lU3BhY2UgZnJvbU5hbWVzcGFjZSk7CisgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4g
Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYsIEFTVDo6TmFtZVNwYWNlIGZyb21OYW1lc3BhY2Up
OwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogZ2V0VmFyaWFibGUoY29uc3QgU3RyaW5n
Jik7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBleGlzdHMoU3RyaW5nJik7CisgICAgQVNUOjpOYW1l
ZFR5cGUqIHNlYXJjaFR5cGVzKFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKiBzZWFyY2hGdW5jdGlvbnMoU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBP
cHRpb25hbDxDb2RlTG9jYXRpb24+IGdsb2JhbEV4aXN0cyhTdHJpbmcmIG5hbWUpIGNvbnN0Owor
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogbG9jYWxFeGlzdHMoU3RyaW5nJiBuYW1lKSBj
b25zdDsKIAotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6Ok5hbWVkVHlwZT4sIDE+PiBtX3R5cGVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPj4g
bV9mdW5jdGlvbnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXNbM107CisgICAgSGFzaE1hcDxTdHJp
bmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+PiBtX2Z1bmN0aW9uc1szXTsKICAgICBIYXNoTWFwPFN0cmluZywgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uKj4gbV92YXJpYWJsZXM7CiAgICAgTmFtZUNvbnRleHQqIG1fcGFyZW50Owor
ICAgIEFTVDo6TmFtZVNwYWNlIG1fY3VycmVudE5hbWVTcGFjZSB7IEFTVDo6TmFtZVNwYWNlOjpT
dGFuZGFyZExpYnJhcnkgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAppbmRleCA2N2IxYzli
NmQ4NjA1MjQ3ZmMxMmM0YjFlNTNmMzI5NWJmYjk0NDczLi4yNzFlYmQxMjZhMzEwNzg5YjRjOGNm
NzBkZjg0NTc5ZmExZjgyNDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC01Nyw2ICs1Nyw3IEBA
IE5hbWVSZXNvbHZlcjo6TmFtZVJlc29sdmVyKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKIE5h
bWVSZXNvbHZlcjo6TmFtZVJlc29sdmVyKE5hbWVSZXNvbHZlciYgcGFyZW50UmVzb2x2ZXIsIE5h
bWVDb250ZXh0JiBuYW1lQ29udGV4dCkKICAgICA6IG1fbmFtZUNvbnRleHQobmFtZUNvbnRleHQp
CiAgICAgLCBtX3BhcmVudE5hbWVSZXNvbHZlcigmcGFyZW50UmVzb2x2ZXIpCisgICAgLCBtX2N1
cnJlbnROYW1lU3BhY2UocGFyZW50UmVzb2x2ZXIubV9jdXJyZW50TmFtZVNwYWNlKQogewogfQog
CkBAIC04MCwxNCArODEsMTAgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VHlwZVJl
ZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKICAgICBpZiAodHlwZVJlZmVyZW5jZS5tYXliZVJlc29s
dmVkVHlwZSgpKSAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5ODE2MSBTaG91bGRuJ3Qgd2Uga25vdyBieSBub3cgd2hldGhlciB0aGUgdHlwZSBoYXMg
YmVlbiByZXNvbHZlZCBvciBub3Q/CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIGNhbmRp
ZGF0ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKHR5cGVSZWZlcmVuY2UubmFtZSgpKTsKLSAg
ICBpZiAoY2FuZGlkYXRlcyA9PSBudWxscHRyKSB7Ci0gICAgICAgIHNldEVycm9yKEVycm9yKCJD
YW5ub3QgZmluZCB0eXBlIHJlZmVyZW5jZS4iLCB0eXBlUmVmZXJlbmNlLmNvZGVMb2NhdGlvbigp
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiAq
Y2FuZGlkYXRlcykKKyAgICBhdXRvIGNhbmRpZGF0ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVz
KHR5cGVSZWZlcmVuY2UubmFtZSgpLCBtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGZvciAoYXV0
byYgY2FuZGlkYXRlIDogY2FuZGlkYXRlcykKICAgICAgICAgVmlzaXRvcjo6dmlzaXQoY2FuZGlk
YXRlKTsKLSAgICBpZiAoYXV0byByZXN1bHQgPSByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbCgqY2Fu
ZGlkYXRlcywgdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpKQorICAgIGlmIChhdXRvIHJl
c3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKGNhbmRpZGF0ZXMsIHR5cGVSZWZlcmVuY2Uu
dHlwZUFyZ3VtZW50cygpKSkKICAgICAgICAgdHlwZVJlZmVyZW5jZS5zZXRSZXNvbHZlZFR5cGUo
KnJlc3VsdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3QgcmVz
b2x2ZSB0eXBlIGFyZ3VtZW50cy4iLCB0eXBlUmVmZXJlbmNlLmNvZGVMb2NhdGlvbigpKSk7CkBA
IC0xOTIsOSArMTg5LDkgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVz
c2lvbiYgZG90RXhwcmVzc2lvbikKICAgICAgICAgYXV0byYgdmFyaWFibGVSZWZlcmVuY2UgPSBk
b3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSk7CiAg
ICAgICAgIGlmICghbV9uYW1lQ29udGV4dC5nZXRWYXJpYWJsZSh2YXJpYWJsZVJlZmVyZW5jZS5u
YW1lKCkpKSB7CiAgICAgICAgICAgICBhdXRvIGJhc2VOYW1lID0gdmFyaWFibGVSZWZlcmVuY2Uu
bmFtZSgpOwotICAgICAgICAgICAgaWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNv
bnRleHQuZ2V0VHlwZXMoYmFzZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVudW1l
cmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlw
ZSYgdHlwZSA9ICgqZW51bWVyYXRpb25UeXBlcylbMF07CisgICAgICAgICAgICBhdXRvIGVudW1l
cmF0aW9uVHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGJhc2VOYW1lLCBtX2N1cnJlbnRO
YW1lU3BhY2UpOworICAgICAgICAgICAgaWYgKGVudW1lcmF0aW9uVHlwZXMuc2l6ZSgpID09IDEp
IHsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9IGVudW1lcmF0aW9uVHlw
ZXNbMF07CiAgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
Pih0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
biYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24+KHR5cGUpOwogICAgICAgICAgICAgICAgICAgICBhdXRvIG1lbWJlck5hbWUgPSBkb3RF
eHByZXNzaW9uLmZpZWxkTmFtZSgpOwpAQCAtMjA2LDcgKzIwMyw4IEBAIHZvaWQgTmFtZVJlc29s
dmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiAgICAgICAgICAg
ICAgICAgICAgIHNldEVycm9yKEVycm9yKCJObyBlbnVtIG1lbWJlciBtYXRjaGVzIHRoZSB1c2Vk
IG5hbWUuIiwgZG90RXhwcmVzc2lvbi5jb2RlTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMuaXNFbXB0
eSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjE4LDkgKzIxNiwxMCBAQCB2b2lkIE5hbWVS
ZXNvbHZlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbAogICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRp
b25NZW1iZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8gZW51bWVyYXRpb25U
eXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmxl
ZnQoKSkpIHsKLSAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsK
LSAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBdOwor
ICAgIGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmxlZnQoKSwgbV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBpZiAo
ZW51bWVyYXRpb25UeXBlcy5zaXplKCkgPT0gMSkgeworICAgICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTMzNSBUaGlzIG5lZWRzIHRvIHdv
cmsgd2l0aCB0eXBlZGVmJ2VkIGVudW1zLgorICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9
IGVudW1lcmF0aW9uVHlwZXNbMF07CiAgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbj4odHlwZSkpIHsKICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
JiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbj4odHlwZSk7CiAgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVyYXRpb25E
ZWZpbml0aW9uLm1lbWJlckJ5TmFtZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwucmlnaHQoKSkp
IHsKQEAgLTIyOSw3ICsyMjgsNyBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbAogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5v
dCByZXNvbHZlIGVudW1lcmF0aW9uIG1lbWJlciBsaXRlcmFsLiIsIGVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbC5jb2RlTG9jYXRpb24oKSkpOwogfQogCkBAIC0yNDUsMjEgKzI0NCwyNSBAQCB2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aQogRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHJlc29sdmVOYW1lc0lu
VHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCiB7CiAg
ICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkp
IHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnROYW1lU3BhY2UodHlwZURlZmluaXRp
b24uZ2V0KCkubmFtZVNwYWNlKCkpOwogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KHR5cGVEZWZpbml0aW9uKTsKICAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJv
cigpKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5yZXN1bHQoKTsKICAgICB9CiAg
ICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZp
bml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50TmFtZVNwYWNlKHN0
cnVjdHVyZURlZmluaXRpb24uZ2V0KCkubmFtZVNwYWNlKCkpOwogICAgICAgICBuYW1lUmVzb2x2
ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOwogICAgICAgICBpZiAo
bmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVy
LnJlc3VsdCgpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6
IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZl
ci5zZXRDdXJyZW50TmFtZVNwYWNlKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5nZXQoKS5uYW1lU3Bh
Y2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRp
b25EZWZpbml0aW9uKTsKICAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQogICAg
ICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5yZXN1bHQoKTsKICAgICB9CiAgICAgZm9yIChh
dXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudE5hbWVTcGFjZShuYXRpdmVU
eXBlRGVjbGFyYXRpb24uZ2V0KCkubmFtZVNwYWNlKCkpOwogICAgICAgICBuYW1lUmVzb2x2ZXIu
Y2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiAgICAgICAgIGlmIChu
YW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKICAgICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2ZXIu
cmVzdWx0KCk7CkBAIC0yNzAsMTEgKzI3MywxMyBAQCBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVz
b2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZQog
RXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHJlc29sdmVUeXBlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFt
JiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKIHsKICAgICBmb3IgKGF1dG8m
IGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7Cisg
ICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50TmFtZVNwYWNlKGZ1bmN0aW9uRGVmaW5pdGlv
bi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5k
VmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKICAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNF
cnJvcigpKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5yZXN1bHQoKTsKICAgICB9
CiAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJy
ZW50TmFtZVNwYWNlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uZ2V0KCkubmFtZVNwYWNlKCkp
OwogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAgICAg
ICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKaW5kZXgg
NjU4YzM1ZmNkYjU3MmUyNGQ1ODIxNzFmMTFlOGM2YTJiYTAzMmU3My4uYTc5MjRlMDVmZjZhYTBh
ZGY2OWJkM2M2ODIyYTNjYmVmZDdjMzE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCkBAIC00Niw2ICs0Niw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfk5hbWVSZXNvbHZlcigpOwogCisgICAgdm9pZCBz
ZXRDdXJyZW50TmFtZVNwYWNlKEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkgeyBtX2N1cnJlbnRO
YW1lU3BhY2UgPSBuYW1lU3BhY2U7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKQEAgLTYzLDYgKzY1LDcgQEAgcHJpdmF0
ZToKICAgICBOYW1lQ29udGV4dCYgbV9uYW1lQ29udGV4dDsKICAgICBIYXNoU2V0PEFTVDo6VHlw
ZVJlZmVyZW5jZSo+IG1fdHlwZVJlZmVyZW5jZXM7CiAgICAgTmFtZVJlc29sdmVyKiBtX3BhcmVu
dE5hbWVSZXNvbHZlciB7IG51bGxwdHIgfTsKKyAgICBBU1Q6Ok5hbWVTcGFjZSBtX2N1cnJlbnRO
YW1lU3BhY2UgeyBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5IH07CiB9OwogCiBFeHBl
Y3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJlc29s
dmVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFBhcnNlci5jcHAKaW5kZXggMDE2MTE0YTYxMGUxMTAwZWZlNjk3MmNhMmEyMzUzMjdjMTUyZTdh
Yi4uODlkNWZhZWU5YTIyZWQ1MTJjZmMyZmFhNjMxNzVkNWE0OTVkOWM0YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApAQCAt
NDEsMjQgKzQxLDIzIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAjZGVmaW5lIFBBUlNFKG5hbWUsIGVs
ZW1lbnQsIC4uLikgXAogICAgIGF1dG8gbmFtZSA9IHBhcnNlIyNlbGVtZW50KF9fVkFfQVJHU19f
KTsgXAogICAgIGlmICghbmFtZSkgXAotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
bmFtZS5lcnJvcigpKTsgXAorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJv
cigpKTsgXAogCiAjZGVmaW5lIENPTlNVTUVfVFlQRShuYW1lLCB0eXBlKSBcCiAgICAgYXV0byBu
YW1lID0gY29uc3VtZVR5cGUoVG9rZW46OlR5cGU6OnR5cGUpOyBcCiAgICAgaWYgKCFuYW1lKSBc
Ci0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsKIAogI2RlZmluZSBQRUVLKG5h
bWUpIFwKICAgICBhdXRvIG5hbWUgPSBwZWVrKCk7IFwKICAgICBpZiAoIW5hbWUpIFwKLSAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChuYW1lLmVycm9yKCkpOwogCiAjZGVmaW5lIFBFRUtfRlVSVEhFUihu
YW1lKSBcCiAgICAgYXV0byBuYW1lID0gcGVla0Z1cnRoZXIoKTsgXAogICAgIGlmICghbmFtZSkg
XAotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG5hbWUuZXJyb3IoKSk7CiAKLS8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NjgyIFJldHVybiBhIGJldHRl
ciBlcnJvciBjb2RlIGZyb20gdGhpcywgYW5kIHJlcG9ydCBpdCB0byBKYXZhU2NyaXB0LgogYXV0
byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
UGFyc2luZ01vZGUgbW9kZSkgLT4gRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+CiB7CiAgICAgbV9sZXhl
ciA9IExleGVyKHN0cmluZ1ZpZXcpOwpAQCAtNzYsMjUgKzc1LDMyIEBAIGF1dG8gUGFyc2VyOjpw
YXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFBhcnNpbmdNb2Rl
IG1vZGUpIC0+CiAgICAgICAgICAgICBhdXRvIHR5cGVEZWZpbml0aW9uID0gcGFyc2VUeXBlRGVm
aW5pdGlvbigpOwogICAgICAgICAgICAgaWYgKCF0eXBlRGVmaW5pdGlvbikKICAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodHlwZURlZmluaXRpb24uZXJyb3IoKSk7Ci0gICAg
ICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOworICAgICAg
ICAgICAgYXV0byBhcHBlbmRSZXN1bHQgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVm
aW5pdGlvbikpOworICAgICAgICAgICAgaWYgKCFhcHBlbmRSZXN1bHQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFwcGVuZFJlc3VsdC5lcnJvcigpKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6OlN0cnVj
dDogewogICAgICAgICAgICAgYXV0byBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gcGFyc2VTdHJ1Y3R1
cmVEZWZpbml0aW9uKCk7CiAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZURlZmluaXRpb24pCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHN0cnVjdHVyZURlZmluaXRpb24u
ZXJyb3IoKSk7Ci0gICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpzdHJ1Y3R1cmVE
ZWZpbml0aW9uKSk7CisgICAgICAgICAgICBhdXRvIGFwcGVuZFJlc3VsdCA9IHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgIGlmICghYXBw
ZW5kUmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChhcHBlbmRS
ZXN1bHQuZXJyb3IoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIFRva2VuOjpUeXBlOjpFbnVtOiB7CiAgICAgICAgICAgICBhdXRvIGVudW1lcmF0aW9u
RGVmaW5pdGlvbiA9IHBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICBp
ZiAoIWVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZW51bWVyYXRpb25EZWZpbml0aW9uLmVycm9yKCkpOwotICAgICAgICAgICAgcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CisgICAgICAgICAg
ICBhdXRvIGFwcGVuZFJlc3VsdCA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9u
RGVmaW5pdGlvbikpOworICAgICAgICAgICAgaWYgKCFhcHBlbmRSZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFwcGVuZFJlc3VsdC5lcnJvcigpKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVG9rZW46OlR5cGU6Ok5h
dGl2ZTogewotICAgICAgICAgICAgQVNTRVJUKG1fbW9kZSA9PSBQYXJzaW5nTW9kZTo6U3RhbmRh
cmRMaWJyYXJ5KTsKKyAgICAgICAgICAgIGlmIChtX21vZGUgIT0gUGFyc2luZ01vZGU6OlN0YW5k
YXJkTGlicmFyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChtYWtlU3RyaW5nKCInbmF0
aXZlJyBjYW4ndCBleGlzdCBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiIpKTsKICAg
ICAgICAgICAgIGF1dG8gZnVydGhlclRva2VuID0gcGVla0Z1cnRoZXIoKTsKICAgICAgICAgICAg
IGlmICghZnVydGhlclRva2VuKQogICAgICAgICAgICAgICAgIHJldHVybiB7IH07CkBAIC0xMDIs
MjAgKzEwOCwyNiBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5n
VmlldyBzdHJpbmdWaWV3LCBQYXJzaW5nTW9kZSBtb2RlKSAtPgogICAgICAgICAgICAgICAgIGF1
dG8gbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gcGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRpb24oKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5lcnJv
cigpKTsKLSAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBl
RGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIGFwcGVuZFJlc3VsdCA9IHByb2dy
YW0uYXBwZW5kKFdURk1vdmUoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAg
ICAgIGlmICghYXBwZW5kUmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoYXBwZW5kUmVzdWx0LmVycm9yKCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXV0byBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uID0gcGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICBpZiAo
IW5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uZXJyb3IoKSk7Ci0gICAgICAgICAg
ICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cisg
ICAgICAgICAgICBhdXRvIGFwcGVuZFJlc3VsdCA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIGlmICghYXBwZW5kUmVzdWx0
KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChhcHBlbmRSZXN1bHQuZXJy
b3IoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0
OiB7CiAgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uRGVmaW5pdGlvbiA9IHBhcnNlRnVuY3Rpb25E
ZWZpbml0aW9uKCk7CiAgICAgICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmaW5pdGlvbikKICAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZnVuY3Rpb25EZWZpbml0aW9uLmVycm9y
KCkpOwotICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqZnVuY3Rpb25EZWZpbml0
aW9uKSk7CisgICAgICAgICAgICBhdXRvIGFwcGVuZFJlc3VsdCA9IHByb2dyYW0uYXBwZW5kKFdU
Rk1vdmUoKmZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgaWYgKCFhcHBlbmRSZXN1
bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFwcGVuZFJlc3VsdC5l
cnJvcigpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTEyOCw5ICsxNDAsOSBAQCBhdXRvIFBhcnNlcjo6ZmFpbChjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFRyeVRvUGVlayB0cnlUb1BlZWspIC0+IFVuZXhwZWN0ZWQ8RXJybwogewogICAgIGlmICh0cnlU
b1BlZWsgPT0gVHJ5VG9QZWVrOjpZZXMpIHsKICAgICAgICAgaWYgKGF1dG8gbmV4dFRva2VuID0g
cGVlaygpKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1fbGV4
ZXIuZXJyb3JTdHJpbmcoKm5leHRUb2tlbiwgbWVzc2FnZSkpKTsKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChFcnJvcihtX2xleGVyLmVycm9yU3RyaW5nKCpuZXh0VG9rZW4sIG1l
c3NhZ2UpKSk7CiAgICAgfQotICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihtYWtl
U3RyaW5nKCJDYW5ub3QgbGV4OiAiLCBtZXNzYWdlKSkpOworICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChFcnJvcihtYWtlU3RyaW5nKCJDYW5ub3QgbGV4OiAiLCBtZXNzYWdlKSkpOwogfQogCiBh
dXRvIFBhcnNlcjo6cGVlaygpIC0+IEV4cGVjdGVkPFRva2VuLCBFcnJvcj4KQEAgLTMwNiwyMSAr
MzE4LDIxIEBAIGF1dG8gUGFyc2VyOjpjb25zdW1lSW50ZWdyYWxMaXRlcmFsKCkgLT4gRXhwZWN0
ZWQ8VmFyaWFudDxpbnQsIHVuc2lnbmVkPiwgRXJyb3I+CiB7CiAgICAgYXV0byBpbnRlZ3JhbExp
dGVyYWxUb2tlbiA9IGNvbnN1bWVUeXBlczxUb2tlbjo6VHlwZTo6SW50TGl0ZXJhbCwgVG9rZW46
OlR5cGU6OlVpbnRMaXRlcmFsPigpOwogICAgIGlmICghaW50ZWdyYWxMaXRlcmFsVG9rZW4pCi0g
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihpbnRlZ3JhbExpdGVyYWxUb2tlbi5lcnJv
cigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGludGVncmFsTGl0ZXJhbFRva2Vu
LmVycm9yKCkpOwogCiAgICAgc3dpdGNoIChpbnRlZ3JhbExpdGVyYWxUb2tlbi0+dHlwZSkgewog
ICAgIGNhc2UgVG9rZW46OlR5cGU6OkludExpdGVyYWw6IHsKICAgICAgICAgYXV0byByZXN1bHQg
PSBpbnRMaXRlcmFsVG9JbnQoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnN0cmluZ1ZpZXcobV9sZXhl
cikpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHt7ICpyZXN1bHQg
fX07Ci0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyZXN1bHQuZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQuZXJyb3IoKSk7CiAgICAgfQogICAg
IGRlZmF1bHQ6IHsKICAgICAgICAgQVNTRVJUKGludGVncmFsTGl0ZXJhbFRva2VuLT50eXBlID09
IFRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbCk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdWludExp
dGVyYWxUb1VpbnQoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnN0cmluZ1ZpZXcobV9sZXhlcikpOwog
ICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHt7ICpyZXN1bHQgfX07Ci0g
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQuZXJyb3IoKSk7CiAgICAgfQogICAgIH0KIH0K
QEAgLTMyOSw3ICszNDEsNyBAQCBhdXRvIFBhcnNlcjo6Y29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdy
YWxMaXRlcmFsKCkgLT4gRXhwZWN0ZWQ8dW5zaWduZWQsIEVycm9yPgogewogICAgIGF1dG8gaW50
ZWdyYWxMaXRlcmFsID0gY29uc3VtZUludGVncmFsTGl0ZXJhbCgpOwogICAgIGlmICghaW50ZWdy
YWxMaXRlcmFsKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oaW50ZWdyYWxMaXRl
cmFsLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoaW50ZWdyYWxMaXRl
cmFsLmVycm9yKCkpOwogICAgIGF1dG8gcmVzdWx0ID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFtdKGludCB4KSAtPiBPcHRpb25hbDx1bnNpZ25lZD4gewogICAgICAgICBpZiAoeCA8IDAp
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMzY5LDI1ICszODEsMjUgQEAg
YXV0byBQYXJzZXI6OnBhcnNlQ29uc3RhbnRFeHByZXNzaW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpD
b25zdGFudEV4cHJlc3Npb24sIEVycm8KICAgICAgICAgVG9rZW46OlR5cGU6OkZhbHNlLAogICAg
ICAgICBUb2tlbjo6VHlwZTo6SWRlbnRpZmllcj4oKTsKICAgICBpZiAoIXR5cGUpCi0gICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQodHlwZS5lcnJvcigpKTsKIAogICAgIHN3aXRjaCAodHlwZS0+dHlwZSkg
ewogICAgIGNhc2UgVG9rZW46OlR5cGU6OkludExpdGVyYWw6IHsKICAgICAgICAgYXV0byB2YWx1
ZSA9IGludExpdGVyYWxUb0ludCh0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAg
aWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5l
cnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh2YWx1ZS5lcnJvcigp
KTsKICAgICAgICAgcmV0dXJuIHt7IEFTVDo6SW50ZWdlckxpdGVyYWwoeyAqdHlwZSB9LCAqdmFs
dWUpIH19OwogICAgIH0KICAgICBjYXNlIFRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbDogewogICAg
ICAgICBhdXRvIHZhbHVlID0gdWludExpdGVyYWxUb1VpbnQodHlwZS0+c3RyaW5nVmlldyhtX2xl
eGVyKSk7CiAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQodmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7eyBBU1Q6OlVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwoeyAqdHlwZSB9LCAqdmFsdWUpIH19OwogICAgIH0KICAgICBjYXNlIFRva2VuOjpU
eXBlOjpGbG9hdExpdGVyYWw6IHsKICAgICAgICAgYXV0byB2YWx1ZSA9IGZsb2F0TGl0ZXJhbFRv
RmxvYXQodHlwZS0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmICghdmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJl
dHVybiB7eyBBU1Q6OkZsb2F0TGl0ZXJhbCh7ICp0eXBlIH0sICp2YWx1ZSkgfX07CiAgICAgfQog
ICAgIGNhc2UgVG9rZW46OlR5cGU6Ok51bGw6CkBAIC00NTIsMTEgKzQ2NCwxMSBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKSAtPiBFeHBlY3RlZDxUeXBlU3VmZml4
QWJicmV2aWF0ZWQsIEVycgogICAgICAgICBUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXIs
CiAgICAgICAgIFRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldD4oKTsKICAgICBpZiAoIXRv
a2VuKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odG9rZW4uZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh0b2tlbi5lcnJvcigpKTsKICAgICBpZiAodG9r
ZW4tPnR5cGUgPT0gVG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0KSB7CiAgICAgICAgIGF1
dG8gbnVtRWxlbWVudHMgPSBjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbExpdGVyYWwoKTsKICAg
ICAgICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPihudW1FbGVtZW50cy5lcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChudW1FbGVtZW50cy5lcnJvcigpKTsKICAgICAgICAgQ09OU1VNRV9UWVBFKHJpZ2h0U3F1
YXJlQnJhY2tldCwgUmlnaHRTcXVhcmVCcmFja2V0KTsKICAgICAgICAgcmV0dXJuIHt7IHsgKnRv
a2VuLCAqcmlnaHRTcXVhcmVCcmFja2V0IH0sICp0b2tlbiwgKm51bUVsZW1lbnRzIH19OwogICAg
IH0KQEAgLTQ3MCwxMSArNDgyLDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhOb25B
YmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlCiAgICAgICAg
IFRva2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0UGFpciwKICAgICAgICAgVG9rZW46OlR5cGU6Okxl
ZnRTcXVhcmVCcmFja2V0PigpOwogICAgIGlmICghdG9rZW4pCi0gICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPih0b2tlbi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKHRva2VuLmVycm9yKCkpOwogICAgIGlmICh0b2tlbi0+dHlwZSA9PSBUb2tlbjo6VHlwZTo6
TGVmdFNxdWFyZUJyYWNrZXQpIHsKICAgICAgICAgYXV0byBudW1FbGVtZW50cyA9IGNvbnN1bWVO
b25OZWdhdGl2ZUludGVncmFsTGl0ZXJhbCgpOwogICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQot
ICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG51bUVsZW1lbnRzLmVycm9yKCkp
OworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG51bUVsZW1lbnRzLmVycm9yKCkp
OwogICAgICAgICBDT05TVU1FX1RZUEUocmlnaHRTcXVhcmVCcmFja2V0LCBSaWdodFNxdWFyZUJy
YWNrZXQpOwogICAgICAgICByZXR1cm4ge3sgeyAqdG9rZW4sICpyaWdodFNxdWFyZUJyYWNrZXQg
fSwgKnRva2VuLCBXVEY6Om51bGxvcHQsICpudW1FbGVtZW50cyB9fTsKICAgICB9CkBAIC00ODQs
NyArNDk2LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCkg
LT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGUKICAgICAgICAgVG9rZW46OlR5cGU6
OlRocmVhZGdyb3VwLAogICAgICAgICBUb2tlbjo6VHlwZTo6VGhyZWFkPigpOwogICAgIGlmICgh
YWRkcmVzc1NwYWNlVG9rZW4pCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRy
ZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFk
ZHJlc3NTcGFjZVRva2VuLmVycm9yKCkpOwogICAgIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NT
cGFjZTsKICAgICBzd2l0Y2ggKGFkZHJlc3NTcGFjZVRva2VuLT50eXBlKSB7CiAgICAgY2FzZSBU
b2tlbjo6VHlwZTo6Q29uc3RhbnQ6CkBAIC02MTksNyArNjMxLDcgQEAgYXV0byBQYXJzZXI6OnBh
cnNlQnVpbHRJblNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpCdWlsdEluU2VtYW50aWMsIEVy
cm9yPgogICAgICAgICBUb2tlbjo6VHlwZTo6U1ZHcm91cEluZGV4LAogICAgICAgICBUb2tlbjo6
VHlwZTo6U1ZHcm91cFRocmVhZElEPigpOwogICAgIGlmICghb3JpZ2luKQotICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQob3JpZ2luLmVycm9yKCkpOwogCiAgICAgc3dpdGNoIChvcmlnaW4tPnR5cGUp
IHsKICAgICBjYXNlIFRva2VuOjpUeXBlOjpTVkluc3RhbmNlSUQ6CkBAIC02MzksNyArNjUxLDcg
QEAgYXV0byBQYXJzZXI6OnBhcnNlQnVpbHRJblNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpC
dWlsdEluU2VtYW50aWMsIEVycm9yPgogICAgIGNhc2UgVG9rZW46OlR5cGU6OlNWVGFyZ2V0OiB7
CiAgICAgICAgIGF1dG8gdGFyZ2V0ID0gY29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFs
KCk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1
ODA3IE1ha2UgdGhpcyB3b3JrIHdpdGggc3RyaW5ncyBsaWtlICJTVl9UYXJnZXQwIi4KICAgICAg
ICAgaWYgKCF0YXJnZXQpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odGFy
Z2V0LmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHRhcmdldC5l
cnJvcigpKTsKICAgICAgICAgcmV0dXJuIEFTVDo6QnVpbHRJblNlbWFudGljKHsgKm9yaWdpbiB9
LCBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWVGFyZ2V0LCAqdGFyZ2V0KTsKICAg
ICB9CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U1ZEZXB0aDoKQEAgLTY2OSw3ICs2ODEsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VSZXNvdXJjZVNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpSZXNv
dXJjZVNlbWFudGljLCBFcnJvcj4KICAgICAgICAgJiYgaW5mb1N0cmluZ1ZpZXdbMF0gIT0gJ3Qn
CiAgICAgICAgICYmIGluZm9TdHJpbmdWaWV3WzBdICE9ICdiJwogICAgICAgICAmJiBpbmZvU3Ry
aW5nVmlld1swXSAhPSAncycpKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJy
b3IobWFrZVN0cmluZyhpbmZvU3RyaW5nVmlldy5zdWJzdHJpbmcoMCwgMSksICIgaXMgbm90IGEg
a25vd24gcmVzb3VyY2UgdHlwZSAoJ3UnLCAndCcsICdiJywgb3IgJ3MnKSIpKSk7CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKGluZm9TdHJpbmdWaWV3LnN1
YnN0cmluZygwLCAxKSwgIiBpcyBub3QgYSBrbm93biByZXNvdXJjZSB0eXBlICgndScsICd0Jywg
J2InLCBvciAncycpIikpKTsKIAogICAgIEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZSBtb2Rl
OwogICAgIHN3aXRjaCAoaW5mb1N0cmluZ1ZpZXdbMF0pIHsKQEAgLTY4OSw3ICs3MDEsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VSZXNvdXJjZVNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpSZXNv
dXJjZVNlbWFudGljLCBFcnJvcj4KIAogICAgIGF1dG8gaW5kZXggPSByZWNvZ25pemVTaW1wbGVV
bnNpZ25lZEludGVnZXIoaW5mb1N0cmluZ1ZpZXcuc3Vic3RyaW5nKDEpKTsKICAgICBpZiAoIWlu
ZGV4KQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oaW5kZXguZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChpbmRleC5lcnJvcigpKTsKIAogICAgIHVuc2ln
bmVkIHNwYWNlID0gMDsKICAgICBpZiAodHJ5VHlwZShUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CkBA
IC02OTcsMTIgKzcwOSwxMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VSZXNvdXJjZVNlbWFudGljKCkg
LT4gRXhwZWN0ZWQ8QVNUOjpSZXNvdXJjZVNlbWFudGljLCBFcnJvcj4KICAgICAgICAgYXV0byBz
cGFjZVRva2VuU3RyaW5nVmlldyA9IHNwYWNlVG9rZW4tPnN0cmluZ1ZpZXcobV9sZXhlcik7CiAg
ICAgICAgIFN0cmluZ1ZpZXcgcHJlZml4IHsgInNwYWNlIiB9OwogICAgICAgICBpZiAoIXNwYWNl
VG9rZW5TdHJpbmdWaWV3LnN0YXJ0c1dpdGgocHJlZml4KSkKLSAgICAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihFcnJvcihtYWtlU3RyaW5nKCJTZWNvbmQgYXJndW1lbnQgdG8gcmVz
b3VyY2Ugc2VtYW50aWMgIiwgc3BhY2VUb2tlblN0cmluZ1ZpZXcsICIgbmVlZHMgYmUgb2YgdGhl
IGZvcm0gJ3NwYWNlMCciKSkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVy
cm9yKG1ha2VTdHJpbmcoIlNlY29uZCBhcmd1bWVudCB0byByZXNvdXJjZSBzZW1hbnRpYyAiLCBz
cGFjZVRva2VuU3RyaW5nVmlldywgIiBuZWVkcyBiZSBvZiB0aGUgZm9ybSAnc3BhY2UwJyIpKSk7
CiAgICAgICAgIGlmIChzcGFjZVRva2VuU3RyaW5nVmlldy5sZW5ndGgoKSA8PSBwcmVmaXgubGVu
Z3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJyb3IobWFrZVN0
cmluZygiU2Vjb25kIGFyZ3VtZW50IHRvIHJlc291cmNlIHNlbWFudGljICIsIHNwYWNlVG9rZW5T
dHJpbmdWaWV3LCAiIG5lZWRzIGJlIG9mIHRoZSBmb3JtICdzcGFjZTAnIikpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcihtYWtlU3RyaW5nKCJTZWNvbmQgYXJndW1l
bnQgdG8gcmVzb3VyY2Ugc2VtYW50aWMgIiwgc3BhY2VUb2tlblN0cmluZ1ZpZXcsICIgbmVlZHMg
YmUgb2YgdGhlIGZvcm0gJ3NwYWNlMCciKSkpOwogICAgICAgICBhdXRvIHNwYWNlVmFsdWUgPSBy
ZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVnZXIoc3BhY2VUb2tlblN0cmluZ1ZpZXcuc3Vic3Ry
aW5nKHByZWZpeC5sZW5ndGgoKSkpOwogICAgICAgICBpZiAoIXNwYWNlVmFsdWUpCi0gICAgICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oc3BhY2VWYWx1ZS5lcnJvcigpKTsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzcGFjZVZhbHVlLmVycm9yKCkpOwogICAgICAg
ICBzcGFjZSA9ICpzcGFjZVZhbHVlOwogICAgIH0KIApAQCAtNzI0LDcgKzczNiw3IEBAIGF1dG8g
UGFyc2VyOjpwYXJzZVN0YWdlSW5PdXRTZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6U3RhZ2VJ
bk91dFNlbWFudGljLCBFcnJvCiAKICAgICBhdXRvIGluZGV4ID0gY29uc3VtZU5vbk5lZ2F0aXZl
SW50ZWdyYWxMaXRlcmFsKCk7CiAgICAgaWYgKCFpbmRleCkKLSAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KGluZGV4LmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoaW5kZXguZXJyb3IoKSk7CiAKICAgICBDT05TVU1FX1RZUEUocmlnaHRQYXJlbnRoZXNpcywg
UmlnaHRQYXJlbnRoZXNpcyk7CiAKQEAgLTgyMSw3ICs4MzMsNyBAQCBhdXRvIFBhcnNlcjo6cGFy
c2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbgogICAgICAgICByZXR1cm4geyBBU1Q6OlR5cGVSZWZlcmVuY2U6OmNyZWF0ZSgqb3Jp
Z2luLCAiaW50Il9zdHIsIEFTVDo6VHlwZUFyZ3VtZW50cygpKSB9OwogICAgIH0pKCk7CiAgICAg
aWYgKCF0eXBlKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odHlwZS5lcnJvcigp
KTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHR5cGUuZXJyb3IoKSk7CiAKICAgICBD
T05TVU1FX1RZUEUobGVmdEN1cmx5QnJhY2tldCwgTGVmdEN1cmx5QnJhY2tldCk7CiAKQEAgLTg2
OCw3ICs4ODAsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbk1lbWJlcihpbnQ2NF90
IGRlZmF1bHRWYWx1ZSkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVtZQogICAgICAgICB9KSk7CiAKICAg
ICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPigi
ZW51bSBpbml0aWFsaXphdGlvbiB2YWx1ZXMgY2FuIG9ubHkgYmUgYW4gaW50IG9yIHVpbnQgY29u
c3RhbnQuIik7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoImVudW0g
aW5pdGlhbGl6YXRpb24gdmFsdWVzIGNhbiBvbmx5IGJlIGFuIGludCBvciB1aW50IGNvbnN0YW50
LiIpKTsKICAgICAgICAgcmV0dXJuIEFTVDo6RW51bWVyYXRpb25NZW1iZXIoKmlkZW50aWZpZXIs
IFdURk1vdmUobmFtZSksICp2YWx1ZSk7CiAgICAgfQogICAgIHJldHVybiBBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyKCppZGVudGlmaWVyLCBXVEZNb3ZlKG5hbWUpLCBkZWZhdWx0VmFsdWUpOwpAQCAt
ODkyLDE5ICs5MDQsMTkgQEAgYXV0byBQYXJzZXI6OnBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0
cmlidXRlKCkgLT4gRXhwZWN0ZWQ8QVNUOjpOdW1UaHJlYWRzRnVuY3QKIAogICAgIGF1dG8gd2lk
dGggPSBjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbExpdGVyYWwoKTsKICAgICBpZiAoIXdpZHRo
KQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4od2lkdGguZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh3aWR0aC5lcnJvcigpKTsKIAogICAgIENPTlNVTUVf
VFlQRShjb21tYSwgQ29tbWEpOwogCiAgICAgYXV0byBoZWlnaHQgPSBjb25zdW1lTm9uTmVnYXRp
dmVJbnRlZ3JhbExpdGVyYWwoKTsKICAgICBpZiAoIWhlaWdodCkKLSAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KGhlaWdodC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGhlaWdodC5lcnJvcigpKTsKIAogICAgIENPTlNVTUVfVFlQRShzZWNvbmRDb21tYSwg
Q29tbWEpOwogCiAgICAgYXV0byBkZXB0aCA9IGNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTGl0
ZXJhbCgpOwogICAgIGlmICghZGVwdGgpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihkZXB0aC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGRlcHRoLmVy
cm9yKCkpOwogCiAgICAgQ09OU1VNRV9UWVBFKHJpZ2h0UGFyZW50aGVzaXMsIFJpZ2h0UGFyZW50
aGVzaXMpOwogCkBAIC05OTMsNyArMTAwNSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZlcnRleE9y
RnJhZ21lbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvCiB7
CiAgICAgYXV0byBlbnRyeVBvaW50ID0gY29uc3VtZVR5cGVzPFRva2VuOjpUeXBlOjpWZXJ0ZXgs
IFRva2VuOjpUeXBlOjpGcmFnbWVudD4oKTsKICAgICBpZiAoIWVudHJ5UG9pbnQpCi0gICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihlbnRyeVBvaW50LmVycm9yKCkpOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZW50cnlQb2ludC5lcnJvcigpKTsKICAgICBhdXRvIGVudHJ5
UG9pbnRUeXBlID0gKGVudHJ5UG9pbnQtPnR5cGUgPT0gVG9rZW46OlR5cGU6OlZlcnRleCkgPyBB
U1Q6OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXggOiBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVu
dDsKIAogICAgIFBBUlNFKHR5cGUsIFR5cGUpOwpAQCAtMTAxNSw3ICsxMDI3LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXQKIAogICAgIGF1dG8gbmFtZSA9IGNvbnN1bWVUeXBlczxUb2tlbjo6
VHlwZTo6SWRlbnRpZmllciwgVG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZT4oKTsKICAgICBpZiAo
IW5hbWUpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsKICAgICBhdXRvIGlz
T3BlcmF0b3IgPSBuYW1lLT50eXBlID09IFRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWU7CiAKICAg
ICBQQVJTRShwYXJhbWV0ZXJzLCBQYXJhbWV0ZXJzKTsKQEAgLTExMzYsNyArMTE0OCw3IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZVN3aXRjaENhc2UoKSAtPiBFeHBlY3RlZDxBU1Q6OlN3aXRjaENhc2Us
IEVycm9yPgogewogICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGVzPFRva2VuOjpUeXBlOjpD
YXNlLCBUb2tlbjo6VHlwZTo6RGVmYXVsdD4oKTsKICAgICBpZiAoIW9yaWdpbikKLSAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKG9yaWdpbi5lcnJvcigpKTsKIAogICAgIHN3aXRjaCAob3JpZ2luLT50
eXBlKSB7CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6Q2FzZTogewpAQCAtMTE3MSw3ICsxMTgzLDcg
QEAgYXV0byBQYXJzZXI6OnBhcnNlRm9yTG9vcCgpIC0+IEV4cGVjdGVkPEFTVDo6Rm9yTG9vcCwg
RXJyb3I+CiAgICAgICAgICAgICBpZiAoYXV0byBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9u
KCkpCiAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gKCpleHByZXNzaW9uKS5tb3ZlVG9Vbmlx
dWVQdHIoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXhwcmVzc2lvbi5lcnJvcigpKTsKICAgICAgICAgICAgIENPTlNVTUVf
VFlQRShzZWNvbmRTZW1pY29sb24sIFNlbWljb2xvbik7CiAgICAgICAgIH0KIApAQCAtMTE4MCw3
ICsxMTkyLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRm9yTG9vcCgpIC0+IEV4cGVjdGVkPEFTVDo6
Rm9yTG9vcCwgRXJyb3I+CiAgICAgICAgICAgICBpZiAoYXV0byBleHByZXNzaW9uID0gcGFyc2VF
eHByZXNzaW9uKCkpCiAgICAgICAgICAgICAgICAgaW5jcmVtZW50ID0gKCpleHByZXNzaW9uKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXhwcmVzc2lvbi5lcnJvcigpKTsKICAgICAgICAgICAg
IENPTlNVTUVfVFlQRShyaWdodFBhcmVudGhlc2lzLCBSaWdodFBhcmVudGhlc2lzKTsKICAgICAg
ICAgfQogCkBAIC0xMjU0LDcgKzEyNjYsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURl
Y2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdAogCiAg
ICAgYXV0byBmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b24odHlwZS0+Y29weVJlZigpKTsKICAgICBpZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikK
LSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlv
bi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGZpcnN0VmFyaWFibGVE
ZWNsYXJhdGlvbi5lcnJvcigpKTsKIAogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPj4gcmVzdWx0OwogICAgIHJlc3VsdC5hcHBlbmQobWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KFdURk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlv
bikpKTsKQEAgLTEyNjIsNyArMTI3NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAg
d2hpbGUgKHRyeVR5cGUoVG9rZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAgICBhdXRvIHZhcmlh
YmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24odHlwZS0+Y29weVJlZigp
KTsKICAgICAgICAgaWYgKCF2YXJpYWJsZURlY2xhcmF0aW9uKQotICAgICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsK
ICAgICAgICAgcmVzdWx0LmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4oV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpKTsKICAgICB9CiAKQEAgLTE1NjQs
NyArMTU3Niw3IEBAIGF1dG8gUGFyc2VyOjpjb21wbGV0ZUFzc2lnbm1lbnQoVW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4mJiBsZWZ0KSAtPiBFeHBlY3RlZDxVCiAgICAgICAgIFRva2VuOjpUeXBl
OjpSaWdodFNoaWZ0RXF1YWxzLAogICAgICAgICBUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0RXF1YWxz
PigpOwogICAgIGlmICghYXNzaWdubWVudE9wZXJhdG9yKQotICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oYXNzaWdubWVudE9wZXJhdG9yLmVycm9yKCkpOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoYXNzaWdubWVudE9wZXJhdG9yLmVycm9yKCkpOwogCiAgICAgUEFSU0Uo
cmlnaHQsIFBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKTsKICAgICBDb2RlTG9jYXRpb24gbG9j
YXRpb24gPSB7IGxlZnQtPmNvZGVMb2NhdGlvbigpLCAoKnJpZ2h0KS0+Y29kZUxvY2F0aW9uKCkg
fTsKQEAgLTE2MzYsMjMgKzE2NDgsMjMgQEAgYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVUZXJu
YXJ5Q29uZGl0aW9uYWwoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXMKIAogICAg
IGV4cHJlc3Npb24gPSBjb21wbGV0ZVBvc3NpYmxlU2hpZnQoV1RGTW92ZSgqZXhwcmVzc2lvbikp
OwogICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KGV4cHJlc3Npb24uZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChleHBy
ZXNzaW9uLmVycm9yKCkpOwogCiAgICAgZXhwcmVzc2lvbiA9IGNvbXBsZXRlUG9zc2libGVNdWx0
aXBseShXVEZNb3ZlKCpleHByZXNzaW9uKSk7CiAgICAgaWYgKCFleHByZXNzaW9uKQotICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGV4cHJlc3Npb24uZXJyb3IoKSk7CiAKICAgICBleHByZXNz
aW9uID0gY29tcGxldGVQb3NzaWJsZUFkZChXVEZNb3ZlKCpleHByZXNzaW9uKSk7CiAgICAgaWYg
KCFleHByZXNzaW9uKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lv
bi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGV4cHJlc3Npb24uZXJy
b3IoKSk7CiAKICAgICBleHByZXNzaW9uID0gY29tcGxldGVQb3NzaWJsZVJlbGF0aW9uYWxCaW5h
cnlPcGVyYXRpb24oV1RGTW92ZSgqZXhwcmVzc2lvbikpOwogICAgIGlmICghZXhwcmVzc2lvbikK
LSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGV4cHJlc3Npb24uZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChleHByZXNzaW9uLmVycm9yKCkpOwogCiAgICAg
ZXhwcmVzc2lvbiA9IGNvbXBsZXRlUG9zc2libGVMb2dpY2FsQmluYXJ5T3BlcmF0aW9uKFdURk1v
dmUoKmV4cHJlc3Npb24pKTsKICAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihleHByZXNzaW9uLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXhwcmVzc2lvbi5lcnJvcigpKTsKIAogICAgIFBFRUsobmV4dFRva2VuKTsK
ICAgICBpZiAobmV4dFRva2VuLT50eXBlID09IFRva2VuOjpUeXBlOjpRdWVzdGlvbk1hcmspCkBA
IC0yMDI4LDI1ICsyMDQwLDI1IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVRlcm0oKSAtPiBFeHBlY3Rl
ZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+CiAgICAgICAgIFRva2VuOjpUeXBl
OjpJZGVudGlmaWVyLAogICAgICAgICBUb2tlbjo6VHlwZTo6TGVmdFBhcmVudGhlc2lzPigpOwog
ICAgIGlmICghdHlwZSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh0eXBlLmVycm9yKCkpOwogCiAg
ICAgc3dpdGNoICh0eXBlLT50eXBlKSB7CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6SW50TGl0ZXJh
bDogewogICAgICAgICBhdXRvIHZhbHVlID0gaW50TGl0ZXJhbFRvSW50KHR5cGUtPnN0cmluZ1Zp
ZXcobV9sZXhlcikpOwogICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKHZhbHVlLmVycm9yKCkpOwogICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVm
PEFTVDo6SW50ZWdlckxpdGVyYWw+KCp0eXBlLCAqdmFsdWUpIH07CiAgICAgfQogICAgIGNhc2Ug
VG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsOiB7CiAgICAgICAgIGF1dG8gdmFsdWUgPSB1aW50TGl0
ZXJhbFRvVWludCh0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigpKTsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh2YWx1ZS5lcnJvcigpKTsKICAgICAg
ICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KCp0
eXBlLCAqdmFsdWUpIH07CiAgICAgfQogICAgIGNhc2UgVG9rZW46OlR5cGU6OkZsb2F0TGl0ZXJh
bDogewogICAgICAgICBhdXRvIHZhbHVlID0gZmxvYXRMaXRlcmFsVG9GbG9hdCh0eXBlLT5zdHJp
bmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCh2YWx1ZS5lcnJvcigpKTsKICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1
ZVJlZjxBU1Q6OkZsb2F0TGl0ZXJhbD4oKnR5cGUsICp2YWx1ZSkgfTsKICAgICB9CiAgICAgY2Fz
ZSBUb2tlbjo6VHlwZTo6TnVsbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCmluZGV4IDczZjQ4MzIwM2EwNGE0ODMzYzE1NDUz
ODBkYjFlODVkYzJiMmE0ODAuLjBlN2MwYjAwY2YzMzQ0NWMzNWU2ODE5YjQxNjFmMjVjZTI5NzZk
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIldITFNMTGl0ZXJhbFR5
cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaCIKICNpbmNs
dWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgorI2luY2x1ZGUgIldITFNMTmFtZVNwYWNlLmgiCiAj
aW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByZXNlcnZlVmFyaWFibGVM
aWZldGltZXMuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKQEAgLTEyNCwxMyArMTI1LDMz
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotCiBwcml2YXRlOgogICAgIFN0cmluZyBt
X3BoYXNlTmFtZTsKICAgICBQaGFzZVRpbWVzJiBtX3BoYXNlVGltZXM7CiAgICAgTW9ub3Rvbmlj
VGltZSBtX3N0YXJ0OwogfTsKIAorc3RydWN0IFNoYWRlck1vZHVsZSB7CisgICAgU2hhZGVyTW9k
dWxlKGNvbnN0IFN0cmluZyYgd2hsc2xTb3VyY2UpCisgICAgICAgIDogd2hsc2xTb3VyY2Uod2hs
c2xTb3VyY2UpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyB3aGxzbFNvdXJjZTsKK307CisK
K093bmVkU2hhZGVyTW9kdWxlIGNyZWF0ZVNoYWRlck1vZHVsZShjb25zdCBTdHJpbmcmIHdobHNs
U291cmNlKQoreworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAwODcyIFdlIHNob3VsZCBjb25zaWRlciBtb3ZpbmcgYXMgbXVjaCB3b3JrIGZy
b20gcHJlcGFyZSgpIGludG8gaGVyZSBhcyBwb3NzaWJsZS4KKyAgICByZXR1cm4gT3duZWRTaGFk
ZXJNb2R1bGUobmV3IFNoYWRlck1vZHVsZSh3aGxzbFNvdXJjZSkpOworfQorCit2b2lkIFNoYWRl
ck1vZHVsZURlbGV0ZXI6Om9wZXJhdG9yKCkoU2hhZGVyTW9kdWxlKiBtb2R1bGUpCit7CisgICAg
ZGVsZXRlIG1vZHVsZTsKK30KKworLy8gRklYTUU6IFRoZSBmaXJzdCBhcmd1bWVudCB0byBlcnJv
clN0cmluZygpCiAjZGVmaW5lIENIRUNLX1BBU1MocGFzcywgLi4uKSBcCiAgICAgZG8geyBcCiAg
ICAgICAgIGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRlZChwcm9ncmFtLCAiQVNUIGJlZm9y
ZSAiICMgcGFzcyk7IFwKQEAgLTEzOCw4ICsxNTksOCBAQCBwcml2YXRlOgogICAgICAgICBhdXRv
IHJlc3VsdCA9IHBhc3MoX19WQV9BUkdTX18pOyBcCiAgICAgICAgIGlmICghcmVzdWx0KSB7IFwK
ICAgICAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpIFwKLSAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oImZhaWxlZCBwYXNzOiAiICMgcGFzcywgTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291
cmNlLCByZXN1bHQuZXJyb3IoKSkpOyBcCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCByZXN1bHQuZXJyb3IoKSkpOyBcCisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgcGFzczogIiAjIHBhc3MsIExleGVyOjpl
cnJvclN0cmluZyhTdHJpbmcoKSwgcmVzdWx0LmVycm9yKCkpKTsgXAorICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyhTdHJpbmcoKSwgcmVzdWx0LmVy
cm9yKCkpKTsgXAogICAgICAgICB9IFwKICAgICB9IHdoaWxlICgwKQogCkBAIC0xNTAsMTkgKzE3
MSwzNyBAQCBwcml2YXRlOgogICAgICAgICBwYXNzKF9fVkFfQVJHU19fKTsgXAogICAgIH0gd2hp
bGUgKDApCiAKLXN0YXRpYyBFeHBlY3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBhcmVTaGFyZWQo
UGhhc2VUaW1lcyYgcGhhc2VUaW1lcywgU3RyaW5nJiB3aGxzbFNvdXJjZSkKK3N0YXRpYyBFeHBl
Y3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBhcmVTaGFyZWQoUGhhc2VUaW1lcyYgcGhhc2VUaW1l
cywgY29uc3QgU3RyaW5nJiB3aGxzbFNvdXJjZTEsIGNvbnN0IFN0cmluZyogd2hsc2xTb3VyY2Uy
ID0gbnVsbHB0cikKIHsKICAgICBQcm9ncmFtIHByb2dyYW07CiAgICAgUGFyc2VyIHBhcnNlcjsK
IAogICAgIHsKKyAgICAgICAgcHJvZ3JhbS5uYW1lQ29udGV4dCgpLnNldEN1cnJlbnROYW1lU3Bh
Y2UoQVNUOjpOYW1lU3BhY2U6Ok5hbWVTcGFjZTEpOworCiAgICAgICAgIFBoYXNlVGltZXIgcGhh
c2VUaW1lcigicGFyc2UiLCBwaGFzZVRpbWVzKTsKLSAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9
IHBhcnNlci5wYXJzZShwcm9ncmFtLCB3aGxzbFNvdXJjZSwgUGFyc2luZ01vZGU6OlVzZXIpOwor
ICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291
cmNlMSwgUGFyc2luZ01vZGU6OlVzZXIpOwogICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7Ci0g
ICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dM
bigiZmFpbGVkIHRvIHBhcnNlIHRoZSBwcm9ncmFtOiAiLCBMZXhlcjo6ZXJyb3JTdHJpbmcod2hs
c2xTb3VyY2UsIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIHBhcnNlUmVzdWx0LmVy
cm9yKCkpKTsKKyAgICAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yU3RyaW5nKCkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwgTGV4
ZXI6OmVycm9yU3RyaW5nKFN0cmluZygpLCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9y
U3RyaW5nKCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JT
dHJpbmcoU3RyaW5nKCksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAod2hsc2xTb3VyY2UyKSB7CisgICAgICAgICAgICBwcm9ncmFtLm5hbWVDb250ZXh0KCku
c2V0Q3VycmVudE5hbWVTcGFjZShBU1Q6Ok5hbWVTcGFjZTo6TmFtZVNwYWNlMik7CisgICAgICAg
ICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sICp3aGxzbFNvdXJj
ZTIsIFBhcnNpbmdNb2RlOjpVc2VyKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwg
TGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZygpLCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJndW1l
bnQgdG8gZXJyb3JTdHJpbmcoKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChMZXhlcjo6ZXJyb3JTdHJpbmcoU3RyaW5nKCksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBwcm9ncmFtLm5hbWVDb250ZXh0KCkuc2V0
Q3VycmVudE5hbWVTcGFjZShBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KTsKICAgICB9
CiAKICAgICB7CkBAIC0yMDAsMjMgKzIzOSwzMSBAQCBzdGF0aWMgRXhwZWN0ZWQ8UHJvZ3JhbSwg
U3RyaW5nPiBwcmVwYXJlU2hhcmVkKFBoYXNlVGltZXMmIHBoYXNlVGltZXMsIFN0cmluZyYgdwog
ICAgIHJldHVybiBwcm9ncmFtOwogfQogCi1FeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0LCBT
dHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpCitFeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVz
dWx0LCBTdHJpbmc+IHByZXBhcmUoY29uc3QgU2hhZGVyTW9kdWxlJiB2ZXJ0ZXhTaGFkZXJNb2R1
bGUsIGNvbnN0IFNoYWRlck1vZHVsZSogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIFJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKQogewogICAgIFBoYXNlVGlt
ZXMgcGhhc2VUaW1lczsKICAgICBNZXRhbDo6UmVuZGVyTWV0YWxDb2RlIGdlbmVyYXRlZENvZGU7
CiAKICAgICB7CiAgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigicHJlcGFyZSB0b3RhbCIs
IHBoYXNlVGltZXMpOwotICAgICAgICBhdXRvIHByb2dyYW0gPSBwcmVwYXJlU2hhcmVkKHBoYXNl
VGltZXMsIHdobHNsU291cmNlKTsKKyAgICAgICAgY29uc3QgU3RyaW5nKiBzZWNvbmRTaGFkZXIg
PSBudWxscHRyOworICAgICAgICBib29sIGRpc3RpbmN0RnJhZ21lbnRTaGFkZXIgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGZyYWdtZW50U2hhZGVyTW9kdWxlICYmIGZyYWdtZW50U2hhZGVyTW9kdWxl
ICE9ICZ2ZXJ0ZXhTaGFkZXJNb2R1bGUpIHsKKyAgICAgICAgICAgIHNlY29uZFNoYWRlciA9ICZm
cmFnbWVudFNoYWRlck1vZHVsZS0+d2hsc2xTb3VyY2U7CisgICAgICAgICAgICBkaXN0aW5jdEZy
YWdtZW50U2hhZGVyID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIHByb2dyYW0gPSBw
cmVwYXJlU2hhcmVkKHBoYXNlVGltZXMsIHZlcnRleFNoYWRlck1vZHVsZS53aGxzbFNvdXJjZSwg
c2Vjb25kU2hhZGVyKTsKICAgICAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKHByb2dyYW0uZXJyb3IoKSk7CiAKICAgICAgICAgT3B0aW9uYWw8TWF0
Y2hlZFJlbmRlclNlbWFudGljcz4gbWF0Y2hlZFNlbWFudGljczsKICAgICAgICAgewogICAgICAg
ICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJtYXRjaFNlbWFudGljcyIsIHBoYXNlVGltZXMp
OwotICAgICAgICAgICAgbWF0Y2hlZFNlbWFudGljcyA9IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFt
LCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwotICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2Vt
YW50aWNzKQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJy
b3JTdHJpbmcod2hsc2xTb3VyY2UsIEVycm9yKCJDb3VsZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9z
dHIpKSk7CisgICAgICAgICAgICBtYXRjaGVkU2VtYW50aWNzID0gbWF0Y2hTZW1hbnRpY3MoKnBy
b2dyYW0sIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciwgZGlzdGluY3RGcmFnbWVudFNoYWRlciwg
ZnJhZ21lbnRTaGFkZXJNb2R1bGUpOworICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2VtYW50aWNz
KSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBmaXJzdCBhcmd1bWVudCB0byBlcnJv
clN0cmluZygpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjpl
cnJvclN0cmluZyhTdHJpbmcoKSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBzZW1hbnRpY3MiX3N0
cikpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHsKQEAgLTIzNCw3ICsy
ODEsNyBAQCBFeHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3Ry
aW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUV4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3
aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYgY29tcHV0ZVBpcGVsaW5lRGVz
Y3JpcHRvcikKK0V4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUo
Y29uc3QgU2hhZGVyTW9kdWxlJiBzaGFkZXJNb2R1bGUsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3ImIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpCiB7CiAgICAgUGhhc2VUaW1lcyBwaGFzZVRp
bWVzOwogICAgIE1ldGFsOjpDb21wdXRlTWV0YWxDb2RlIGdlbmVyYXRlZENvZGU7CkBAIC0yNDIs
NyArMjg5LDcgQEAgRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFy
ZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlwZWwKIAogICAgIHsKICAgICAgICAgUGhh
c2VUaW1lciBwaGFzZVRpbWVyKCJwcmVwYXJlIHRvdGFsIiwgcGhhc2VUaW1lcyk7Ci0gICAgICAg
IGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQocGhhc2VUaW1lcywgd2hsc2xTb3VyY2UpOwor
ICAgICAgICBhdXRvIHByb2dyYW0gPSBwcmVwYXJlU2hhcmVkKHBoYXNlVGltZXMsIHNoYWRlck1v
ZHVsZS53aGxzbFNvdXJjZSk7CiAgICAgICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChwcm9ncmFtLmVycm9yKCkpOwogCkBAIC0yNTAsMTUgKzI5Nywy
MCBAQCBFeHBlY3RlZDxDb21wdXRlUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmlu
ZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQaXBlbAogICAgICAgICB7CiAgICAgICAgICAgICBQaGFz
ZVRpbWVyIHBoYXNlVGltZXIoIm1hdGNoU2VtYW50aWNzIiwgcGhhc2VUaW1lcyk7CiAgICAgICAg
ICAgICBtYXRjaGVkU2VtYW50aWNzID0gbWF0Y2hTZW1hbnRpY3MoKnByb2dyYW0sIGNvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IpOwotICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2VtYW50aWNzKQot
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmco
d2hsc2xTb3VyY2UsIEVycm9yKCJDb3VsZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9zdHIpKSk7Cisg
ICAgICAgICAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3MpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yU3RyaW5nKCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZygpLCBFcnJv
cigiQ291bGQgbm90IG1hdGNoIHNlbWFudGljcyJfc3RyKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAogICAgICAgICB9CiAKICAgICAgICAgewogICAgICAgICAgICAgUGhhc2VU
aW1lciBwaGFzZVRpbWVyKCJjb21wdXRlRGltZW5zaW9ucyIsIHBoYXNlVGltZXMpOwogICAgICAg
ICAgICAgY29tcHV0ZURpbWVuc2lvbnMgPSBXSExTTDo6Y29tcHV0ZURpbWVuc2lvbnMoKnByb2dy
YW0sICptYXRjaGVkU2VtYW50aWNzLT5zaGFkZXIpOwotICAgICAgICAgICAgaWYgKCFjb21wdXRl
RGltZW5zaW9ucykKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6
OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCBFcnJvcigiQ291bGQgbm90IG1hdGNoIGNvbXB1dGUg
ZGltZW5zaW9ucyJfc3RyKSkpOworICAgICAgICAgICAgaWYgKCFjb21wdXRlRGltZW5zaW9ucykg
eworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gZXJyb3JT
dHJpbmcoKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJy
b3JTdHJpbmcoU3RyaW5nKCksIEVycm9yKCJDb3VsZCBub3QgbWF0Y2ggY29tcHV0ZSBkaW1lbnNp
b25zIl9zdHIpKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oCmlu
ZGV4IDVkYTc3ZjVmMmVkZGI5NTA5NzQ4MzQ3ZTk0Y2E3YjU5Y2ViNGE1YjQuLmVmZDY1YTcwNTc1
ZjU5YWM2NGRiMjVhNGYyNzY2ZDM3YzQxMmFiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oCkBAIC0zOSwxMiArMzksMjAgQEAg
bmFtZXNwYWNlIFdITFNMIHsKIAogY29uc3RleHByIGJvb2wgZHVtcE1ldGFsQ29tcGlsZVRpbWVz
ID0gZmFsc2U7CiAKKy8vIEhpZGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBTaGFkZXJNb2R1bGUuIENs
aWVudHMgb2YgdGhlIGNvbXBpbGVyIHNob3VsZG4ndCBjYXJlIHdoYXQncyBpbnNpZGUgaXQuCitz
dHJ1Y3QgU2hhZGVyTW9kdWxlOworc3RydWN0IFNoYWRlck1vZHVsZURlbGV0ZXIgeworICAgIHZv
aWQgb3BlcmF0b3IoKShTaGFkZXJNb2R1bGUqKTsKK307Cit1c2luZyBPd25lZFNoYWRlck1vZHVs
ZSA9IHN0ZDo6dW5pcXVlX3B0cjxTaGFkZXJNb2R1bGUsIFNoYWRlck1vZHVsZURlbGV0ZXI+Owor
T3duZWRTaGFkZXJNb2R1bGUgY3JlYXRlU2hhZGVyTW9kdWxlKGNvbnN0IFN0cmluZyYgd2hsc2xT
b3VyY2UpOworCiBzdHJ1Y3QgUmVuZGVyUHJlcGFyZVJlc3VsdCB7CiAgICAgU3RyaW5nQnVpbGRl
ciBtZXRhbFNvdXJjZTsKICAgICBNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZSBtYW5nbGVkVmVy
dGV4RW50cnlQb2ludE5hbWU7CiAgICAgTWV0YWw6Ok1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xl
ZEZyYWdtZW50RW50cnlQb2ludE5hbWU7CiB9OwotRXhwZWN0ZWQ8UmVuZGVyUHJlcGFyZVJlc3Vs
dCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciYpOworRXhwZWN0ZWQ8UmVuZGVyUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJl
KGNvbnN0IFNoYWRlck1vZHVsZSYgdmVydGV4U2hhZGVyTW9kdWxlLCBjb25zdCBTaGFkZXJNb2R1
bGUqIGZyYWdtZW50U2hhZGVyTW9kdWxlLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImKTsKIAog
c3RydWN0IENvbXB1dGVEaW1lbnNpb25zIHsKICAgICB1bnNpZ25lZCB3aWR0aDsKQEAgLTU3LDcg
KzY1LDcgQEAgc3RydWN0IENvbXB1dGVQcmVwYXJlUmVzdWx0IHsKICAgICBNZXRhbDo6TWFuZ2xl
ZEZ1bmN0aW9uTmFtZSBtYW5nbGVkRW50cnlQb2ludE5hbWU7CiAgICAgQ29tcHV0ZURpbWVuc2lv
bnMgY29tcHV0ZURpbWVuc2lvbnM7CiB9OwotRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQs
IFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNj
cmlwdG9yJik7CitFeHBlY3RlZDxDb21wdXRlUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJl
KGNvbnN0IFNoYWRlck1vZHVsZSYsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImKTsKIAogfSAv
LyBuYW1lc3BhY2UgV0hMU0wKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFByb2dyYW0uaAppbmRleCA0MGJhZjA5NDJlYWY2YWZmZTQxYjYyNTQ0Njg5
MGUzMmFjYzFhMGI1Li45MDg2MWVjMmFhNGNjNDhlMjE0YWQxODMxODlmMWU0MDU2Yzk5MzA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dy
YW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dy
YW0uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJX
SExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKICNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldITFNMSW50cmlu
c2ljcy5oIgogI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKQEAgLTQ2LDM4ICs0NywzOCBA
QCBwdWJsaWM6CiAgICAgUHJvZ3JhbSgpID0gZGVmYXVsdDsKICAgICBQcm9ncmFtKFByb2dyYW0m
JikgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYmIHR5
cGVEZWZpbml0aW9uKQorICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBhcHBlbmQoQVNUOjpUeXBl
RGVmaW5pdGlvbiYmIHR5cGVEZWZpbml0aW9uKQogICAgIHsKICAgICAgICAgbV90eXBlRGVmaW5p
dGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBlRGVmaW5pdGlvbj4oV1RGTW92ZSh0
eXBlRGVmaW5pdGlvbikpKTsKICAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKG1fdHlw
ZURlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAgYm9vbCBhcHBlbmQoQVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikKKyAgICBFeHBlY3RlZDx2b2lk
LCBFcnJvcj4gYXBwZW5kKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYmIHN0cnVjdHVyZURlZmlu
aXRpb24pCiAgICAgewogICAgICAgICBtX3N0cnVjdHVyZURlZmluaXRpb25zLmFwcGVuZChtYWtl
VW5pcXVlUmVmPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4oV1RGTW92ZShzdHJ1Y3R1cmVEZWZp
bml0aW9uKSkpOwogICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQobV9zdHJ1Y3R1cmVE
ZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KIAotICAgIGJvb2wgYXBwZW5kKEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uJiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQorICAgIEV4cGVjdGVkPHZv
aWQsIEVycm9yPiBhcHBlbmQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJhdGlv
bkRlZmluaXRpb24pCiAgICAgewogICAgICAgICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMuYXBw
ZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KFdURk1vdmUoZW51
bWVyYXRpb25EZWZpbml0aW9uKSkpOwogICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQo
bV9lbnVtZXJhdGlvbkRlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAgYm9vbCBhcHBl
bmQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCisgICAgRXhw
ZWN0ZWQ8dm9pZCwgRXJyb3I+IGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0
aW9uRGVmaW5pdGlvbikKICAgICB7CiAgICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBl
bmQobWFrZVVuaXF1ZVJlZjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShmdW5jdGlv
bkRlZmluaXRpb24pKSk7CiAgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChtX2Z1bmN0
aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9CiAKLSAgICBib29sIGFwcGVuZChBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQorICAg
IEV4cGVjdGVkPHZvaWQsIEVycm9yPiBhcHBlbmQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKICAgICB7CiAgICAgICAgIG1fbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSk7CiAg
ICAgICAgIG1faW50cmluc2ljcy5hZGQobV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5sYXN0
KCkpOwogICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQobV9uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucy5sYXN0KCkpOwogICAgIH0KIAotICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorICAgIEV4cGVjdGVkPHZv
aWQsIEVycm9yPiBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBw
ZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KFdURk1vdmUobmF0
aXZlVHlwZURlY2xhcmF0aW9uKSkpOwogICAgICAgICBtX2ludHJpbnNpY3MuYWRkKG1fbmF0aXZl
VHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAK
aW5kZXggNDI0ZTc5NTE1ZTc5MzFhZmU4NDYzNGVjNGI2ZWM2YzM5NzczODZmOC4uN2M2NTY5Nzg4
NDlkZmIwYjlmNWYxMTBmZGVkNGNkZWMxODJmZGE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9h
ZEltcGwuY3BwCkBAIC01MiwxMiArNTIsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGNvbnZlcnNpb25D
b3N0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgY2FuZGlkYXRlLCBjb25zdCBWZWN0b3IKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVLaW5kPgotQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMs
IFR5cGVLaW5kKiBjYXN0UmV0dXJuVHlwZSkKK3N0YXRpYyBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBl
cywgVHlwZUtpbmQqIGNhc3RSZXR1cm5UeXBlLCBBU1Q6Ok5hbWVTcGFjZSBuYW1lU3BhY2UpCiB7
CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4gY2FuZGlkYXRlczsKICAgICBmb3IgKGF1dG8mIHBvc3NpYmxlRnVuY3Rpb24gOiBw
b3NzaWJsZUZ1bmN0aW9ucykgewogICAgICAgICBpZiAocG9zc2libGVGdW5jdGlvbi5nZXQoKS5l
bnRyeVBvaW50VHlwZSgpKQogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChuYW1l
U3BhY2UgPT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSkgeworICAgICAgICAgICAg
aWYgKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkubmFtZVNwYWNlKCkgIT0gQVNUOjpOYW1lU3BhY2U6
OlN0YW5kYXJkTGlicmFyeSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLm5hbWVTcGFjZSgp
ICE9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkgJiYgcG9zc2libGVGdW5jdGlvbi5n
ZXQoKS5uYW1lU3BhY2UoKSAhPSBuYW1lU3BhY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KICAgICAgICAgaWYgKGluZmVyVHlwZXNGb3JDYWxsKHBvc3NpYmxlRnVuY3Rp
b24uZ2V0KCksIGFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKICAgICAgICAgICAgIGNh
bmRpZGF0ZXMuYXBwZW5kKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkpOwogICAgIH0KQEAgLTc3LDE5
ICs4NCwxOSBAQCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcAogICAgIHJldHVybiBudWxscHRyOwog
fQogCi1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzKQorQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNv
bHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpOYW1l
U3BhY2UgbmFtZVNwYWNlKQogewotICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZElt
cGwocG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIHN0YXRpY19jYXN0PEFTVDo6TmFt
ZWRUeXBlKj4obnVsbHB0cikpOworICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZElt
cGwocG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIHN0YXRpY19jYXN0PEFTVDo6TmFt
ZWRUeXBlKj4obnVsbHB0ciksIG5hbWVTcGFjZSk7CiB9CiAKLUFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMs
IEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSkKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFT
VDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSwgQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlKQog
ewotICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocG9zc2libGVGdW5jdGlv
bnMsIGFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICByZXR1cm4gcmVzb2x2ZUZ1
bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0
UmV0dXJuVHlwZSwgbmFtZVNwYWNlKTsKIH0KIAotQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBy
ZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpV
bm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJl
c29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6OlVu
bmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSwgQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlKQogewot
ICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocG9zc2libGVGdW5jdGlvbnMs
IGFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0
dXJuVHlwZSwgbmFtZVNwYWNlKTsKIH0KIAogQVNUOjpOYW1lZFR5cGUqIHJlc29sdmVUeXBlT3Zl
cmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwg
MT4mIHBvc3NpYmxlVHlwZXMsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKaW5kZXggM2QzNGFiNmYzOGQ0OTljOWQzNTg2Y2QxMzBh
NzNhMjkxZTdkMGQxMi4uM2IxOTVhMjFjNTcyZTBmNzIwZmFkYWRmZGExYTE3ZGE0NjA0MTJjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKQEAgLTQzLDkgKzQzLDkgQEAgY2xhc3MgTmFt
ZWRUeXBlOwogCiB9CiAKLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMpOwotQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBl
cywgQVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKLUFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMs
IEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKK0FTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMs
IEFTVDo6TmFtZVNwYWNlKTsKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBj
YXN0UmV0dXJuVHlwZSwgQVNUOjpOYW1lU3BhY2UpOworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgQVNU
OjpVbm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUsIEFTVDo6TmFtZVNwYWNlKTsKIEFTVDo6TmFt
ZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiwgQVNUOjpUeXBlQXJndW1lbnRzJik7CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50
aWNNYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U2VtYW50aWNNYXRjaGVyLmNwcAppbmRleCAxNTdhNGJmYzkyMzMxZDdlN2NkNWJjZTMyMGQ0MTE4
ZGMwMDg3MDJiLi4yY2M3ZDdkYmI1NDM1OWExODRlZTdmOWI1MTk0ZGI3YWNkOWFmMDI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGlj
TWF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTZW1hbnRpY01hdGNoZXIuY3BwCkBAIC00NSwxNiArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLXN0YXRpYyBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biogZmluZEVudHJ5UG9pbnQoVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
bj4+JiBmdW5jdGlvbkRlZmluaXRpb25zLCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgYXV0byBpdGVy
YXRvciA9IHN0ZDo6ZmluZF9pZihmdW5jdGlvbkRlZmluaXRpb25zLmJlZ2luKCksIGZ1bmN0aW9u
RGVmaW5pdGlvbnMuZW5kKCksIFsmXShBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0aW9uKSB7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2lu
dFR5cGUoKSAmJiBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09IG5hbWU7Ci0gICAgfSk7Ci0g
ICAgaWYgKGl0ZXJhdG9yID09IGZ1bmN0aW9uRGVmaW5pdGlvbnMuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiAmKml0ZXJhdG9yOwotfTsKLQogc3RhdGljIGJvb2wg
bWF0Y2hNb2RlKEJpbmRpbmc6OkJpbmRpbmdEZXRhaWxzIGJpbmRpbmdUeXBlLCBBU1Q6OlJlc291
cmNlU2VtYW50aWM6Ok1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShVbmlmb3JtQnVmZmVyQmluZGluZykgLT4gYm9vbCB7CkBAIC0yOTAsNDYg
KzI4MCw1OSBAQCBzdGF0aWMgYm9vbCBtYXRjaERlcHRoQXR0YWNobWVudChWZWN0b3I8RW50cnlQ
b2ludEl0ZW0+JiBmcmFnbWVudE91dHB1dHMsIE9wdGlvbgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotT3B0aW9uYWw8TWF0Y2hlZFJlbmRlclNlbWFudGljcz4gbWF0Y2hTZW1hbnRpY3MoUHJvZ3Jh
bSYgcHJvZ3JhbSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiByZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IpCitPcHRpb25hbDxNYXRjaGVkUmVuZGVyU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQ
cm9ncmFtJiBwcm9ncmFtLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciwgYm9vbCBkaXN0aW5jdEZyYWdtZW50U2hhZGVyLCBib29sIGZyYWdtZW50U2hh
ZGVyRXhpc3RzKQogewotICAgIGF1dG8gdmVydGV4U2hhZGVyRW50cnlQb2ludCA9IGZpbmRFbnRy
eVBvaW50KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLCByZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IudmVydGV4RW50cnlQb2ludE5hbWUpOwotICAgIGF1dG8gZnJhZ21lbnRTaGFkZXJFbnRy
eVBvaW50ID0gZmluZEVudHJ5UG9pbnQocHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCksIHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvci5mcmFnbWVudEVudHJ5UG9pbnROYW1lKTsKLSAgICBpZiAo
IXZlcnRleFNoYWRlckVudHJ5UG9pbnQgfHwgIWZyYWdtZW50U2hhZGVyRW50cnlQb2ludCkKKyAg
ICBhdXRvIHZlcnRleEZ1bmN0aW9ucyA9IHByb2dyYW0ubmFtZUNvbnRleHQoKS5nZXRGdW5jdGlv
bnMocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLnZlcnRleEVudHJ5UG9pbnROYW1lLCBBU1Q6Ok5h
bWVTcGFjZTo6TmFtZVNwYWNlMSk7CisgICAgaWYgKHZlcnRleEZ1bmN0aW9ucy5zaXplKCkgIT0g
MSB8fCAhdmVydGV4RnVuY3Rpb25zWzBdLmdldCgpLmVudHJ5UG9pbnRUeXBlKCkgfHwgIWlzPEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uPih2ZXJ0ZXhGdW5jdGlvbnNbMF0uZ2V0KCkpKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gdmVydGV4U2hhZGVyRW50cnlQb2ludEl0
ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCAqdmVydGV4
U2hhZGVyRW50cnlQb2ludCk7Ci0gICAgYXV0byBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVt
cyA9IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgKmZyYWdtZW50
U2hhZGVyRW50cnlQb2ludCk7Ci0gICAgaWYgKCF2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMg
fHwgIWZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zKQorICAgIGF1dG8mIHZlcnRleFNoYWRl
ckVudHJ5UG9pbnQgPSBkb3duY2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4odmVydGV4RnVu
Y3Rpb25zWzBdLmdldCgpKTsKKyAgICBhdXRvIHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcyA9
IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgdmVydGV4U2hhZGVy
RW50cnlQb2ludCk7CisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgYXV0byB2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1h
cCA9IG1hdGNoUmVzb3VyY2VzKHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCBy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0LCBTaGFkZXJTdGFnZTo6VmVydGV4KTsKLSAg
ICBhdXRvIGZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXAgPSBtYXRjaFJlc291cmNlcyhmcmFnbWVu
dFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3Iu
bGF5b3V0LCBTaGFkZXJTdGFnZTo6RnJhZ21lbnQpOwotICAgIGlmICghdmVydGV4U2hhZGVyUmVz
b3VyY2VNYXAgfHwgIWZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXApCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFtYXRjaElucHV0c091dHB1dHModmVydGV4U2hhZGVyRW50
cnlQb2ludEl0ZW1zLT5vdXRwdXRzLCBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5w
dXRzKSkKKyAgICBpZiAoIXZlcnRleFNoYWRlclJlc291cmNlTWFwKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIGF1dG8gbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMgPSBtYXRjaFZl
cnRleEF0dHJpYnV0ZXModmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvci52ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtLmludHJpbnNpY3Mo
KSk7CiAgICAgaWYgKCFtYXRjaGVkVmVydGV4QXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBpZiAoIWZyYWdtZW50U2hhZGVyRXhpc3RzKQorICAgICAgICByZXR1
cm4ge3sgJnZlcnRleFNoYWRlckVudHJ5UG9pbnQsIG51bGxwdHIsICp2ZXJ0ZXhTaGFkZXJFbnRy
eVBvaW50SXRlbXMsIEVudHJ5UG9pbnRJdGVtcygpLCAqdmVydGV4U2hhZGVyUmVzb3VyY2VNYXAs
IEhhc2hNYXA8QmluZGluZyosIHNpemVfdD4oKSwgKm1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzLCBI
YXNoTWFwPEF0dGFjaG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90PigpIH19OworCisgICAgYXV0byBm
cmFnbWVudE5hbWVTcGFjZSA9IGRpc3RpbmN0RnJhZ21lbnRTaGFkZXIgPyBBU1Q6Ok5hbWVTcGFj
ZTo6TmFtZVNwYWNlMiA6IEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UxOworICAgIGF1dG8gZnJh
Z21lbnRGdW5jdGlvbnMgPSBwcm9ncmFtLm5hbWVDb250ZXh0KCkuZ2V0RnVuY3Rpb25zKHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvci5mcmFnbWVudEVudHJ5UG9pbnROYW1lLCBmcmFnbWVudE5hbWVT
cGFjZSk7CisgICAgaWYgKGZyYWdtZW50RnVuY3Rpb25zLnNpemUoKSAhPSAxIHx8ICFmcmFnbWVu
dEZ1bmN0aW9uc1swXS5nZXQoKS5lbnRyeVBvaW50VHlwZSgpIHx8ICFpczxBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbj4oZnJhZ21lbnRGdW5jdGlvbnNbMF0uZ2V0KCkpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGF1dG8mIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCA9IGRvd25j
YXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihmcmFnbWVudEZ1bmN0aW9uc1swXS5nZXQoKSk7
CisgICAgYXV0byBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5UG9p
bnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50KTsK
KyAgICBpZiAoIWZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGF1dG8gZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcCA9IG1hdGNo
UmVzb3VyY2VzKGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvci5sYXlvdXQsIFNoYWRlclN0YWdlOjpGcmFnbWVudCk7CisgICAgaWYg
KCFmcmFnbWVudFNoYWRlclJlc291cmNlTWFwKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIGlmICghbWF0Y2hJbnB1dHNPdXRwdXRzKHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVt
cy0+b3V0cHV0cywgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMtPmlucHV0cykpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgYXV0byBtYXRjaGVkQ29sb3JBdHRhY2htZW50
cyA9IG1hdGNoQ29sb3JBdHRhY2htZW50cyhmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+
b3V0cHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVEZXNjcmlw
dG9yLmF0dGFjaG1lbnREZXNjcmlwdG9ycywgcHJvZ3JhbS5pbnRyaW5zaWNzKCkpOwogICAgIGlm
ICghbWF0Y2hlZENvbG9yQXR0YWNobWVudHMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgaWYgKCFtYXRjaERlcHRoQXR0YWNobWVudChmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJ
dGVtcy0+b3V0cHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVE
ZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yLCBwcm9ncmFtLmludHJp
bnNpY3MoKSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHt7IHZl
cnRleFNoYWRlckVudHJ5UG9pbnQsIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCwgKnZlcnRleFNo
YWRlckVudHJ5UG9pbnRJdGVtcywgKmZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLCAqdmVy
dGV4U2hhZGVyUmVzb3VyY2VNYXAsICpmcmFnbWVudFNoYWRlclJlc291cmNlTWFwLCAqbWF0Y2hl
ZFZlcnRleEF0dHJpYnV0ZXMsICptYXRjaGVkQ29sb3JBdHRhY2htZW50cyB9fTsKKyAgICByZXR1
cm4ge3sgJnZlcnRleFNoYWRlckVudHJ5UG9pbnQsICZmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQs
ICp2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMsICpmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJ
dGVtcywgKnZlcnRleFNoYWRlclJlc291cmNlTWFwLCAqZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1h
cCwgKm1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzLCAqbWF0Y2hlZENvbG9yQXR0YWNobWVudHMgfX07
CiB9CiAKIE9wdGlvbmFsPE1hdGNoZWRDb21wdXRlU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQ
cm9ncmFtJiBwcm9ncmFtLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yKQogewotICAgIGF1dG8gZW50cnlQb2ludCA9IGZpbmRFbnRyeVBvaW50KHBy
b2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yLmVu
dHJ5UG9pbnROYW1lKTsKLSAgICBpZiAoIWVudHJ5UG9pbnQpCisgICAgYXV0byBmdW5jdGlvbnMg
PSBwcm9ncmFtLm5hbWVDb250ZXh0KCkuZ2V0RnVuY3Rpb25zKGNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3IuZW50cnlQb2ludE5hbWUsIEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UxKTsKKyAgICBp
ZiAoZnVuY3Rpb25zLnNpemUoKSAhPSAxIHx8ICFmdW5jdGlvbnNbMF0uZ2V0KCkuZW50cnlQb2lu
dFR5cGUoKSB8fCAhaXM8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGZ1bmN0aW9uc1swXS5nZXQo
KSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byBlbnRyeVBvaW50SXRl
bXMgPSBnYXRoZXJFbnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksICplbnRyeVBv
aW50KTsKKyAgICBhdXRvJiBlbnRyeVBvaW50ID0gZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24+KGZ1bmN0aW9uc1swXS5nZXQoKSk7CisgICAgYXV0byBlbnRyeVBvaW50SXRlbXMgPSBn
YXRoZXJFbnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksIGVudHJ5UG9pbnQpOwog
ICAgIGlmICghZW50cnlQb2ludEl0ZW1zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIEFTU0VSVChlbnRyeVBvaW50SXRlbXMtPm91dHB1dHMuaXNFbXB0eSgpKTsKICAgICBhdXRv
IHJlc291cmNlTWFwID0gbWF0Y2hSZXNvdXJjZXMoZW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIGNv
bXB1dGVQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0LCBTaGFkZXJTdGFnZTo6Q29tcHV0ZSk7CiAg
ICAgaWYgKCFyZXNvdXJjZU1hcCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBy
ZXR1cm4ge3sgZW50cnlQb2ludCwgKmVudHJ5UG9pbnRJdGVtcywgKnJlc291cmNlTWFwIH19Owor
ICAgIHJldHVybiB7eyAmZW50cnlQb2ludCwgKmVudHJ5UG9pbnRJdGVtcywgKnJlc291cmNlTWFw
IH19OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmgKaW5kZXgg
YmRmZjRiYmZmNzg4MDg0Zjc3ZGM2ZTY4ZGFlY2Q2ODk3Y2IxY2M3MC4uMzY5YmU0YjhlODU1MTE3
ZDQ5ZTg3N2NjNTQxZWZiYzAyM2YxN2ExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5oCkBAIC00OCw3
ICs0OCw3IEBAIHN0cnVjdCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzIHsKICAgICBIYXNoTWFwPEF0
dGFjaG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90PiBtYXRjaGVkQ29sb3JBdHRhY2htZW50czsKIH07
CiAKLU9wdGlvbmFsPE1hdGNoZWRSZW5kZXJTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dy
YW0mLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImKTsKK09wdGlvbmFsPE1hdGNoZWRSZW5kZXJT
ZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0mLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0
b3ImLCBib29sIGRpc3RpbmN0RnJhZ21lbnRTaGFkZXIsIGJvb2wgZnJhZ21lbnRTaGFkZXJFeGlz
dHMpOwogCiBzdHJ1Y3QgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MgewogICAgIEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uKiBzaGFkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGll
cy5jcHAKaW5kZXggMjQwNjllYzU1M2FlOGFjNTc3MmVmN2ZjMzg5ZTYwNjVhN2Q5ZWNkMS4uNWRh
MGU5MGYzNWY1M2Y5M2RmMzFhOTMzZGUxMjgyZDU3ZGU3MzBhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3Rh
bmRhcmRMaWJyYXJ5VXRpbGl0aWVzLmNwcApAQCAtNzcsMjMgKzc3LDIyIEBAIHByaXZhdGU6CiAg
ICAgSGFzaFNldDxTdHJpbmc+IG1fZnVuY3Rpb25OYW1lczsKIH07CiAKLXZvaWQgaW5jbHVkZVN0
YW5kYXJkTGlicmFyeShQcm9ncmFtJiBwcm9ncmFtLCBQYXJzZXImIHBhcnNlciwgYm9vbCBwYXJz
ZUZ1bGxTdGFuZGFyZExpYnJhcnkpCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gaW5jbHVkZVN0YW5k
YXJkTGlicmFyeShQcm9ncmFtJiBwcm9ncmFtLCBQYXJzZXImIHBhcnNlciwgYm9vbCBwYXJzZUZ1
bGxTdGFuZGFyZExpYnJhcnkpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
c3RhbmRhcmRMaWJyYXJ5KGRlY29tcHJlc3NBbmREZWNvZGVTdGFuZGFyZExpYnJhcnkoKSk7CiAg
ICAgaWYgKHBhcnNlRnVsbFN0YW5kYXJkTGlicmFyeSkgewogICAgICAgICBhdXRvIHBhcnNlUmVz
dWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0YW5kYXJkTGlicmFyeS5nZXQoKSwgUGFyc2lu
Z01vZGU6OlN0YW5kYXJkTGlicmFyeSk7Ci0gICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKLSAg
ICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSAoZnVsbCkgc3RhbmRhcmQg
bGlicmFyeTogIiwgTGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZ1ZpZXcoc3RhbmRhcmRMaWJyYXJ5
KSwgcGFyc2VSZXN1bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXBhcnNlUmVzdWx0
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHBhcnNlUmVzdWx0LmVycm9yKCkp
OworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoTWFwPFN0cmluZywgU3Vic3RyaW5nTG9jYXRpb24+PiBzdGFuZGFyZExpYnJhcnlGdW5j
dGlvbk1hcChjb21wdXRlU3RhbmRhcmRMaWJyYXJ5RnVuY3Rpb25NYXAoKSk7CiAKICAgICBhdXRv
IHN0cmluZ1ZpZXcgPSBTdHJpbmdWaWV3KHN0YW5kYXJkTGlicmFyeS5nZXQoKSkuc3Vic3RyaW5n
KDAsIGZpcnN0RnVuY3Rpb25PZmZzZXRJblN0YW5kYXJkTGlicmFyeSgpKTsKICAgICBhdXRvIHBh
cnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcsIFBhcnNpbmdNb2Rl
OjpTdGFuZGFyZExpYnJhcnkpOwotICAgIEFTU0VSVF9VTlVTRUQocGFyc2VSZXN1bHQsIHBhcnNl
UmVzdWx0KTsKKyAgICBpZiAoIXBhcnNlUmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQocGFyc2VSZXN1bHQuZXJyb3IoKSk7CiAKICAgICBOYW1lRmluZGVyIG5hbWVGaW5kZXI7
CiAgICAgbmFtZUZpbmRlci5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKQEAgLTEwMiw2ICsxMDEs
MTAgQEAgdm9pZCBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5KFByb2dyYW0mIHByb2dyYW0sIFBhcnNl
ciYgcGFyc2VyLCBib29sIHBhcnNlRnVsbFN0YW4KICAgICAvLyBUaGUgbmFtZSBvZiBhIGNhbGwg
dG8gYSBjYXN0IG9wZXJhdG9yIGlzIHRoZSBuYW1lIG9mIHRoZSB0eXBlLCBzbyB3ZSBjYW4ndCBt
YXRjaCB0aGVtIHVwIGNvcnJlY3RseS4KICAgICAvLyBJbnN0ZWFkLCBqdXN0IGluY2x1ZGUgYWxs
IGNhc3Rpbmcgb3BlcmF0b3JzLgogICAgIGZ1bmN0aW9uTmFtZXMuYWRkKCJvcGVyYXRvciBjYXN0
Il9zdHIpOworICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW4gYXV0aG9yIGNhbid0
IHdyaXRlIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgYW55dGhpbmcgaW4g
dGhlIHN0YW5kYXJkIGxpYnJhcnkuCisgICAgLy8gSWYgdGhleSBkbyBzbywgd2UgbmVlZCB0byBt
YWtlIHN1cmUgaXQgY29sbGlkZXMuCisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24g
OiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25OYW1lcy5h
ZGQoZnVuY3Rpb25EZWZpbml0aW9uLT5uYW1lKCkpOwogICAgIHdoaWxlICghZnVuY3Rpb25OYW1l
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0byBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uc0Nv
dW50ID0gcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKTsKICAgICAg
ICAgYXV0byBmdW5jdGlvbkRlZmluaXRpb25zQ291bnQgPSBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5p
dGlvbnMoKS5zaXplKCk7CkBAIC0xMTksMTEgKzEyMiw4IEBAIHZvaWQgaW5jbHVkZVN0YW5kYXJk
TGlicmFyeShQcm9ncmFtJiBwcm9ncmFtLCBQYXJzZXImIHBhcnNlciwgYm9vbCBwYXJzZUZ1bGxT
dGFuCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gcHJvZ3JhbS5mdW5j
dGlvbkRlZmluaXRpb25zKCkuc2l6ZSgpOwogICAgICAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9
IHBhcnNlci5wYXJzZShwcm9ncmFtLCBzdHJpbmdWaWV3LCBQYXJzaW5nTW9kZTo6U3RhbmRhcmRM
aWJyYXJ5KTsKLSAgICAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgKHBhcnRpYWwpIHN0YW5kYXJkIGxpYnJh
cnk6ICIsIExleGVyOjplcnJvclN0cmluZyhzdHJpbmdWaWV3LCBwYXJzZVJlc3VsdC5lcnJvcigp
KSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocGFyc2VSZXN1bHQuZXJyb3Io
KSk7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGlmIChwcm9n
cmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKS5zaXplKCkgIT0gc3RhcnQpCiAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigibm9uIG5hdGl2ZSBzdGRsaWIgZnVuY3Rpb246ICciLCBuYW1lLCAi
JyIpOwpAQCAtMTM2LDYgKzEzNiw3IEBAIHZvaWQgaW5jbHVkZVN0YW5kYXJkTGlicmFyeShQcm9n
cmFtJiBwcm9ncmFtLCBQYXJzZXImIHBhcnNlciwgYm9vbCBwYXJzZUZ1bGxTdGFuCiAgICAgICAg
ICAgICBuYW1lRmluZGVyLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9u
cygpW2Z1bmN0aW9uRGVmaW5pdGlvbnNDb3VudF0pOwogICAgICAgICBmdW5jdGlvbk5hbWVzID0g
bmFtZUZpbmRlci50YWtlRnVuY3Rpb25OYW1lcygpOwogICAgIH0KKyAgICByZXR1cm4geyB9Owog
fQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0
aWVzLmgKaW5kZXggY2FmNmE0MWUyM2I5Y2JlMTgzNDQ4MGI0ZmNhYmYxMGNjYWMwZTYzNy4uMDE4
Y2U3Yzk2Yzg0MGJkOTdlZjg0MWYyYzQxYjQ0ZDQ5MjU1NDBlMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRp
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5k
YXJkTGlicmFyeVV0aWxpdGllcy5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCisjaW5jbHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zNiw3ICszOCw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBjbGFzcyBQYXJzZXI7CiBjbGFz
cyBQcm9ncmFtOwogCi12b2lkIGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYsIFBhcnNl
ciYsIGJvb2wgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5KTsKK0V4cGVjdGVkPHZvaWQsIEVycm9y
PiBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5KFByb2dyYW0mLCBQYXJzZXImLCBib29sIHBhcnNlRnVs
bFN0YW5kYXJkTGlicmFyeSk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE3YmMzYTkwNTg1MjZhMjhkYmU3NTU4YWU2
NGY5Mjc4ZTllNTEwOWQuLjNkNGUxZTJjNmEyYWU3MDhiZjUwZDk3ZWM4ZmI3NTUzZWNiOWI3Njgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTEzMzQ0LDYgKzEzMzQ0LDcgQEAKIAkJQzIzNEE5QjUyMUU5MkMyMzAwM0M5ODREIC8q
IFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzIzNEE5QjYyMUU5MkNDMDAwM0M5ODREIC8qIFdITFNMSW50cmluc2ljcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTEludHJpbnNpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzIzNEE5QjcyMUU5MkNDMTAwM0M5ODREIC8qIFdITFNMSW50cmluc2ljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXSExTTEludHJpbnNpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDMjM5OEVCRDIzMEExQjc2MDA2NDE1MDcgLyogV0hMU0xOYW1lU3BhY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xOYW1lU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzI0NThFNjExRkU4OTc5RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyNEE1N0FGMjFGQUQ1M0YwMDRDNkREMSAvKiBXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMjRBNTdCMjIxRkI4RERBMDA0QzZERDEgLyogV0hMU0xTZW1hbnRp
Y01hdGNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTZW1hbnRpY01hdGNoZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxMTQsNiArMTcxMTUsNyBAQAogCQkJ
CUMyMUJGNzJEMjFDRDg5RTkwMDIyNzk3OSAvKiBXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24uaCAqLywKIAkJCQlDMjFCRjcyQzIxQ0Q4OUU5MDAyMjc5NzkgLyogV0hMU0xNYWtlUG9p
bnRlckV4cHJlc3Npb24uaCAqLywKIAkJCQkxQzMzMjc3MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hM
U0xOYW1lZFR5cGUuaCAqLywKKwkJCQlDMjM5OEVCRDIzMEExQjc2MDA2NDE1MDcgLyogV0hMU0xO
YW1lU3BhY2UuaCAqLywKIAkJCQlDMjFCRjcyMzIxQ0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCiAJCQkJQzIxQkY3MkEyMUNEODlFNzAwMjI3OTc5
IC8qIFdITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggKi8sCiAJCQkJQzIxQkY3MDcyMUNEODlD
ODAwMjI3OTc5IC8qIFdITFNMTnVsbExpdGVyYWwuaCAqLywKQEAgLTE4NTU4LDE0ICsxODU2MCwx
NCBAQAogCQk1MTBBNThFRTFCQUI3MUUwMDBDMTkyODIgLyogc2VydmVyICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk5MzIzQjA2RDIzMDYxRTlCMDA5MDFD
OEIgLyogSURCU2VyaWFsaXphdGlvbkNvbnRleHQuY3BwICovLAotCQkJCTkzMjNCMDZGMjMwNjFF
OUMwMDkwMUM4QiAvKiBJREJTZXJpYWxpemF0aW9uQ29udGV4dC5oICovLAogCQkJCTUxQkE0QUM3
MUJCQzVBRDYwMERGM0Q2RCAvKiBJREJCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk1MTZEN0Q2RDFC
QjVGMDY1MDBBRjdDNzcgLyogSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcCAqLywKIAkJCQk1MTBB
NThGRTFCQjA3QUE1MDBDMTkyODIgLyogSURCQ29ubmVjdGlvblRvQ2xpZW50LmggKi8sCiAJCQkJ
NTE2RDdENkUxQkI1RjA2NTAwQUY3Qzc3IC8qIElEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRl
LmggKi8sCiAJCQkJNTExRUMxMjUxQzUwQUE1NzAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24u
Y3BwICovLAogCQkJCTUxMUVDMTI2MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9u
LmggKi8sCisJCQkJOTMyM0IwNkQyMzA2MUU5QjAwOTAxQzhCIC8qIElEQlNlcmlhbGl6YXRpb25D
b250ZXh0LmNwcCAqLywKKwkJCQk5MzIzQjA2RjIzMDYxRTlDMDA5MDFDOEIgLyogSURCU2VyaWFs
aXphdGlvbkNvbnRleHQuaCAqLywKIAkJCQk1MTBBNThFRjFCQUI3MjBGMDBDMTkyODIgLyogSURC
U2VydmVyLmNwcCAqLywKIAkJCQk1MTBBNThGMDFCQUI3MjBGMDBDMTkyODIgLyogSURCU2VydmVy
LmggKi8sCiAJCQkJNTFFRUFBNzExQkVGRkE3OTAwMjE4MDA4IC8qIEluZGV4VmFsdWVFbnRyeS5j
cHAgKi8sCkBAIC0yOTUzNiw2ICsyOTUzOCw3IEBACiAJCQkJNTE0NUIxMEExQkM0OEUyRTAwRTg2
MjE5IC8qIElEQlJlc291cmNlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzIz
NkQxQkI2MTc0OTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxMUVDMTI4MUM1MEFBQ0EwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5MzIzQjA3MDIzMDYxRjk3MDA5MDFDOEIgLyogSURCU2VyaWFsaXphdGlvbkNv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQ0JCMUJCNENCRjgwMDEyODk4RiAvKiBJ
REJTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQ0FEMUJCNEM0RTgwMDEyODk4RiAv
KiBJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE5OEY3QUQxQkJERDNFQjAw
RTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDAwOSw3
ICszMDAxMiw2IEBACiAJCQkJQkM0OTE4QzkwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTElGcmFt
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJBQTk4MEExQ0REMkQwMEI0MkIyNSAv
KiBKU0hUTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3RTk3MEExQTgz
RTMwMDdGQjhDNSAvKiBKU0hUTUxJbnB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTkz
MjNCMDcwMjMwNjFGOTcwMDkwMUM4QiAvKiBJREJTZXJpYWxpemF0aW9uQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODM2QjA5NTYxRjVGMzREOTAwM0MzNzAyIC8qIEpTSFRNTElucHV0RWxl
bWVudEVudHJpZXNBUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE2MTQ4QTc5MTJFNDFFM0IwMDQ0
QTc4NCAvKiBKU0hUTUxLZXlnZW5FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUIy
MjBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTGFiZWxFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVTaGFk
ZXJNb2R1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVTaGFk
ZXJNb2R1bGUuaAppbmRleCBjZTMzNDFlNGZhNzc0MjFhODNlZjEwZjY4MTRhMTlmODNkYzk4ZWFj
Li5iODYwZWVhZDYxZjEwOTI4ZTYxMDllMWFkNjUwZjdjMjZmODA3NmMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVU2hhZGVyTW9kdWxlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5o
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hM
U0xQcmVwYXJlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDYsMTUgKzQ3LDE1IEBA
IGNsYXNzIEdQVVNoYWRlck1vZHVsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVVNoYWRlck1vZHVs
ZT4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8R1BVU2hhZGVyTW9kdWxlPiB0cnlDcmVh
dGUoY29uc3QgR1BVRGV2aWNlJiwgY29uc3QgR1BVU2hhZGVyTW9kdWxlRGVzY3JpcHRvciYpOwog
Ci0gICAgUGxhdGZvcm1TaGFkZXJNb2R1bGUqIHBsYXRmb3JtU2hhZGVyTW9kdWxlKCkgY29uc3Qg
eyByZXR1cm4gbV93aGxzbFNvdXJjZS5pc051bGwoKSA/IG1fcGxhdGZvcm1TaGFkZXJNb2R1bGUu
Z2V0KCkgOiBudWxscHRyOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB3aGxzbFNvdXJjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fd2hsc2xTb3VyY2U7IH0KKyAgICBQbGF0Zm9ybVNoYWRlck1vZHVsZSogcGxh
dGZvcm1TaGFkZXJNb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX3dobHNsTW9kdWxlID8gbnVsbHB0
ciA6IG1fcGxhdGZvcm1TaGFkZXJNb2R1bGUuZ2V0KCk7IH0KKyAgICBjb25zdCBXSExTTDo6U2hh
ZGVyTW9kdWxlKiB3aGxzbE1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2hsc2xNb2R1bGUuZ2V0
KCk7IH0KIAogcHJpdmF0ZToKICAgICBHUFVTaGFkZXJNb2R1bGUoUGxhdGZvcm1TaGFkZXJNb2R1
bGVTbWFydFB0ciYmKTsKLSAgICBHUFVTaGFkZXJNb2R1bGUoU3RyaW5nJiYgd2hsc2xTb3VyY2Up
OworICAgIEdQVVNoYWRlck1vZHVsZShXSExTTDo6T3duZWRTaGFkZXJNb2R1bGUmJiB3aGxzbE1v
ZHVsZSk7CiAKICAgICBQbGF0Zm9ybVNoYWRlck1vZHVsZVNtYXJ0UHRyIG1fcGxhdGZvcm1TaGFk
ZXJNb2R1bGU7Ci0gICAgU3RyaW5nIG1fd2hsc2xTb3VyY2U7CisgICAgV0hMU0w6Ok93bmVkU2hh
ZGVyTW9kdWxlIG1fd2hsc2xNb2R1bGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
Q29tcHV0ZVBpcGVsaW5lTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KaW5kZXggMWNlZmVlZGI5ODVl
NGE3Njc0NTMyZmQyODM0NjA3YTk3OWEwMGI1OS4uZTAxYjc1YWY5NTE3NWMwNDk2NTU4MDg5M2Y2
MTYwMGQ1NmU1MmQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5t
bQpAQCAtNzAsMTMgKzcwLDExIEBAIHN0YXRpYyBPcHRpb25hbDxXSExTTDo6Q29tcHV0ZURpbWVu
c2lvbnM+IHRyeVNldEZ1bmN0aW9ucyhjb25zdCBHUFVQaXBlbGluZVN0YWdlCiAgICAgV0hMU0w6
OkNvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zIHsgMSwgMSwgMSB9OwogCiAgICAg
aWYgKHdobHNsRGVzY3JpcHRvcikgewotICAgICAgICAvLyBXSExTTCBmdW5jdGlvbnMgYXJlIGNv
bXBpbGVkIHRvIE1TTCBmaXJzdC4KLSAgICAgICAgU3RyaW5nIHdobHNsU291cmNlID0gY29tcHV0
ZVN0YWdlLm1vZHVsZS0+d2hsc2xTb3VyY2UoKTsKLSAgICAgICAgQVNTRVJUKCF3aGxzbFNvdXJj
ZS5pc051bGwoKSk7CisgICAgICAgIEFTU0VSVChjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbE1v
ZHVsZSgpKTsKIAogICAgICAgICB3aGxzbERlc2NyaXB0b3ItPmVudHJ5UG9pbnROYW1lID0gY29t
cHV0ZVN0YWdlLmVudHJ5UG9pbnQ7CiAKLSAgICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQg
PSBXSExTTDo6cHJlcGFyZSh3aGxzbFNvdXJjZSwgKndobHNsRGVzY3JpcHRvcik7CisgICAgICAg
IGF1dG8gd2hsc2xDb21waWxlUmVzdWx0ID0gV0hMU0w6OnByZXBhcmUoKmNvbXB1dGVTdGFnZS5t
b2R1bGUtPndobHNsTW9kdWxlKCksICp3aGxzbERlc2NyaXB0b3IpOwogICAgICAgICBpZiAoIXdo
bHNsQ29tcGlsZVJlc3VsdCkgewogICAgICAgICAgICAgZXJyb3JTY29wZXMuZ2VuZXJhdGVQcmVm
aXhlZEVycm9yKG1ha2VTdHJpbmcoIldITFNMIGNvbXBpbGUgZXJyb3I6ICIsIHdobHNsQ29tcGls
ZVJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAt
MTM0LDcgKzEzMiw3IEBAIHN0YXRpYyBPcHRpb25hbDxDb252ZXJ0UmVzdWx0PiBjb252ZXJ0Q29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvcihjb25zdCBHUFVDb21wdXRlCiAKICAgICBjb25zdCBhdXRv
JiBjb21wdXRlU3RhZ2UgPSBkZXNjcmlwdG9yLmNvbXB1dGVTdGFnZTsKIAotICAgIGJvb2wgaXNX
aGxzbCA9ICFjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbFNvdXJjZSgpLmlzTnVsbCgpOworICAg
IGJvb2wgaXNXaGxzbCA9IGNvbXB1dGVTdGFnZS5tb2R1bGUtPndobHNsTW9kdWxlKCk7CiAKICAg
ICBPcHRpb25hbDxXSExTTDo6Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcj4gd2hsc2xEZXNjcmlw
dG9yOwogICAgIGlmIChpc1dobHNsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRh
bC5tbQppbmRleCA4NmFhZGQ4NDIwODEyNTVjZDM1ODFkMjQ4MjIwZmVkNTBiMjU3YTEwLi5mNGEw
MzcxZmM5NTY5ZTg0ODRhM2M0YmE0NzdlMjg4NDgyNTIzNTc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRh
bC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
UmVuZGVyUGlwZWxpbmVNZXRhbC5tbQpAQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyBib29sIHRy
eVNldE1ldGFsRnVuY3Rpb25zKE1UTExpYnJhcnkgKnZlcnRleE1ldGFsTGlicmFyeSwgTVRMTGli
cmFyeSAqZnJhCiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgICAg
ICAvLyBIb3dldmVyLCBmcmFnbWVudCBzaGFkZXJzIGFyZSBvcHRpb25hbC4KLSAgICAgICAgaWYg
KCFmcmFnbWVudE1ldGFsTGlicmFyeSkKKyAgICAgICAgaWYgKCFmcmFnbWVudE1ldGFsTGlicmFy
eSB8fCBmcmFnbWVudEVudHJ5UG9pbnROYW1lLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICAgICAgYXV0byBmdW5jdGlvbiA9IGFkb3B0TlMoW2ZyYWdtZW50TWV0YWxM
aWJyYXJ5IG5ld0Z1bmN0aW9uV2l0aE5hbWU6ZnJhZ21lbnRFbnRyeVBvaW50TmFtZV0pOwpAQCAt
MzgyLDE1ICszODIsMTQgQEAgc3RhdGljIGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBp
cGVsaW5lU3RhZ2VEZXNjcmlwdG9yJiB2ZXJ0ZXhTdGFnZSwgY29uc3QKICAgICBTdHJpbmcgdmVy
dGV4RW50cnlQb2ludCwgZnJhZ21lbnRFbnRyeVBvaW50OwogCiAgICAgaWYgKHdobHNsRGVzY3Jp
cHRvcikgewotICAgICAgICAvLyBXSExTTCBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkIHRvIE1TTCBm
aXJzdC4KLSAgICAgICAgU3RyaW5nIHdobHNsU291cmNlID0gdmVydGV4U3RhZ2UubW9kdWxlLT53
aGxzbFNvdXJjZSgpOwotICAgICAgICBBU1NFUlQoIXdobHNsU291cmNlLmlzTnVsbCgpKTsKKyAg
ICAgICAgQVNTRVJUKHZlcnRleFN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSk7CisgICAgICAg
IEFTU0VSVCghZnJhZ21lbnRTdGFnZSB8fCBmcmFnbWVudFN0YWdlLT5tb2R1bGUtPndobHNsTW9k
dWxlKCkpOwogCiAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+dmVydGV4RW50cnlQb2ludE5hbWUg
PSB2ZXJ0ZXhTdGFnZS5lbnRyeVBvaW50OwogICAgICAgICBpZiAoZnJhZ21lbnRTdGFnZSkKICAg
ICAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+ZnJhZ21lbnRFbnRyeVBvaW50TmFtZSA9IGZyYWdt
ZW50U3RhZ2UtPmVudHJ5UG9pbnQ7CiAKLSAgICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQg
PSBXSExTTDo6cHJlcGFyZSh3aGxzbFNvdXJjZSwgKndobHNsRGVzY3JpcHRvcik7CisgICAgICAg
IGF1dG8gd2hsc2xDb21waWxlUmVzdWx0ID0gV0hMU0w6OnByZXBhcmUoKnZlcnRleFN0YWdlLm1v
ZHVsZS0+d2hsc2xNb2R1bGUoKSwgZnJhZ21lbnRTdGFnZSA/IGZyYWdtZW50U3RhZ2UtPm1vZHVs
ZS0+d2hsc2xNb2R1bGUoKSA6IG51bGxwdHIsICp3aGxzbERlc2NyaXB0b3IpOwogICAgICAgICBp
ZiAoIXdobHNsQ29tcGlsZVJlc3VsdCkgewogICAgICAgICAgICAgZXJyb3JTY29wZXMuZ2VuZXJh
dGVQcmVmaXhlZEVycm9yKG1ha2VTdHJpbmcoIldITFNMIGNvbXBpbGUgZXJyb3I6ICIsIHdobHNs
Q29tcGlsZVJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00
MjAsNyArNDE5LDggQEAgc3RhdGljIGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBpcGVs
aW5lU3RhZ2VEZXNjcmlwdG9yJiB2ZXJ0ZXhTdGFnZSwgY29uc3QKIAogICAgICAgICBmcmFnbWVu
dExpYnJhcnkgPSB2ZXJ0ZXhMaWJyYXJ5OwogICAgICAgICB2ZXJ0ZXhFbnRyeVBvaW50ID0gd2hs
c2xDb21waWxlUmVzdWx0LT5tYW5nbGVkVmVydGV4RW50cnlQb2ludE5hbWUudG9TdHJpbmcoKTsK
LSAgICAgICAgZnJhZ21lbnRFbnRyeVBvaW50ID0gd2hsc2xDb21waWxlUmVzdWx0LT5tYW5nbGVk
RnJhZ21lbnRFbnRyeVBvaW50TmFtZS50b1N0cmluZygpOworICAgICAgICBpZiAoZnJhZ21lbnRT
dGFnZSkKKyAgICAgICAgICAgIGZyYWdtZW50RW50cnlQb2ludCA9IHdobHNsQ29tcGlsZVJlc3Vs
dC0+bWFuZ2xlZEZyYWdtZW50RW50cnlQb2ludE5hbWUudG9TdHJpbmcoKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICB2ZXJ0ZXhMaWJyYXJ5ID0gdmVydGV4U3RhZ2UubW9kdWxlLT5wbGF0Zm9ybVNo
YWRlck1vZHVsZSgpOwogICAgICAgICB2ZXJ0ZXhFbnRyeVBvaW50ID0gdmVydGV4U3RhZ2UuZW50
cnlQb2ludDsKQEAgLTQ1Miw4ICs0NTIsOSBAQCBzdGF0aWMgUmV0YWluUHRyPE1UTFJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcj4gY29udmVydFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcihjbwogICAg
IGNvbnN0IGF1dG8mIHZlcnRleFN0YWdlID0gZGVzY3JpcHRvci52ZXJ0ZXhTdGFnZTsKICAgICBj
b25zdCBhdXRvJiBmcmFnbWVudFN0YWdlID0gZGVzY3JpcHRvci5mcmFnbWVudFN0YWdlOwogCi0g
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU0
NDYgQWxsb3cgV0hMU0wgc2hhZGVycyB0byBjb21lIGZyb20gZGlmZmVyZW50IHByb2dyYW1zLgot
ICAgIGJvb2wgaXNXaGxzbCA9ICF2ZXJ0ZXhTdGFnZS5tb2R1bGUtPndobHNsU291cmNlKCkuaXNO
dWxsKCkgJiYgKCFmcmFnbWVudFN0YWdlIHx8IHZlcnRleFN0YWdlLm1vZHVsZS5wdHIoKSA9PSBm
cmFnbWVudFN0YWdlLT5tb2R1bGUucHRyKCkpOworICAgIGlmIChmcmFnbWVudFN0YWdlICYmIHN0
YXRpY19jYXN0PGJvb2w+KHZlcnRleFN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSkgIT0gc3Rh
dGljX2Nhc3Q8Ym9vbD4oZnJhZ21lbnRTdGFnZS0+bW9kdWxlLT53aGxzbE1vZHVsZSgpKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYm9vbCBpc1dobHNsID0gdmVydGV4U3RhZ2UubW9k
dWxlLT53aGxzbE1vZHVsZSgpOwogCiAgICAgLy8gU2V0IGRhdGEgZm9yIHRoZSBNZXRhbCBwaXBl
bGluZSBkZXNjcmlwdG9yIChhbmQgV0hMU0wncywgaWYgbmVlZGVkKS4KICAgICBPcHRpb25hbDxX
SExTTDo6UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yPiB3aGxzbERlc2NyaXB0b3I7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVU2hhZGVy
TW9kdWxlTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0KaW5kZXggYjdmNTZjODMyN2NhYWJiMTQyNDk1MDA0
YTYyZTkyYzVkNzA4OWJkMS4uMzIyMTQ4NTkwNjI3ODE2NzA3Y2JiZmEwOTI5MGJmNWYyYzU3MjYx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29h
L0dQVVNoYWRlck1vZHVsZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9jb2NvYS9HUFVTaGFkZXJNb2R1bGVNZXRhbC5tbQpAQCAtNDQsOCArNDQsMTEg
QEAgUmVmUHRyPEdQVVNoYWRlck1vZHVsZT4gR1BVU2hhZGVyTW9kdWxlOjp0cnlDcmVhdGUoY29u
c3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnMKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIAotICAgIGlmIChkZXNjcmlwdG9yLmlzV0hMU0wpCi0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgR1BVU2hhZGVyTW9kdWxlKFN0cmluZyhkZXNjcmlwdG9yLmNvZGUpKSk7CisgICAg
aWYgKGRlc2NyaXB0b3IuaXNXSExTTCkgeworICAgICAgICBpZiAoYXV0byB3aGxzbE1vZHVsZSA9
IFdITFNMOjpjcmVhdGVTaGFkZXJNb2R1bGUoZGVzY3JpcHRvci5jb2RlKSkKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgR1BVU2hhZGVyTW9kdWxlKFdURk1vdmUod2hsc2xNb2R1bGUp
KSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAogICAgIFBsYXRmb3JtU2hhZGVy
TW9kdWxlU21hcnRQdHIgbW9kdWxlOwogCkBAIC02Niw4ICs2OSw4IEBAIEdQVVNoYWRlck1vZHVs
ZTo6R1BVU2hhZGVyTW9kdWxlKFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHImJiBtb2R1bGUp
CiB7CiB9CiAKLUdQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFN0cmluZyYmIHdobHNs
U291cmNlKQotICAgIDogbV93aGxzbFNvdXJjZShXVEZNb3ZlKHdobHNsU291cmNlKSkKK0dQVVNo
YWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFdITFNMOjpPd25lZFNoYWRlck1vZHVsZSYmIHdo
bHNsTW9kdWxlKQorICAgIDogbV93aGxzbE1vZHVsZShXVEZNb3ZlKHdobHNsTW9kdWxlKSkKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGUxMzFhNjg3ZjUwZWUyYTRiZTkwMGQzZmUwZWEyM2JlY2I3MDE1NDAuLmM0
YzI2ZDQyMWJiYjJhYWRjN2QyNTEyODQzYzUxODZlMjJiMzE5Y2QgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2
NSBAQAorMjAxOS0wOC0xOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29t
PgorCisgICAgICAgIFtXSExTTF0gVmVydGV4IHNoYWRlciBhbmQgZnJhZ21lbnQgc2hhZGVyIG5l
ZWQgdG8gYmUgYWJsZSB0byBjb21lIGZyb20gdHdvIGRpZmZlcmVudCBwcm9ncmFtcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NDQ2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTAtZXhwZWN0
ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEwLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0xMS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTEuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTEyLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0xMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTMtZXhwZWN0ZWQuaHRtbDogQWRkZWQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTEzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNC1leHBlY3Rl
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTQuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTE1LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMTYtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTE2Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNy1leHBlY3RlZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMTcuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4LWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTktZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE5Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0yLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0y
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0yMC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIy
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIyLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0yMy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjQtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLTI0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0yNS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjYtZXhw
ZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI2Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0yNy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy00LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNi1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy02Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy03LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy04LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTguaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtOS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtZXhwZWN0ZWQuaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA4LTE3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBDb250ZW50IGluIDxpZnJhbWU+
IHNob3VsZCBvdmVycmlkZSAidG91Y2gtYWN0aW9uIiBzZXQgaW4gZW1iZWRkaW5nIGRvY3VtZW50
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTAtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0xMC1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmViYTQzYzhhMjcy
MTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MTAtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91
bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEwLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2I5NDk1Njk2Y2VlMDAxMDg1ZWZiNjY3MGU5MWY3MDcwOTJmNmI4YgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMC5odG1sCkBAIC0wLDAgKzEsMTA1IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0
dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAordHlw
ZWRlZiBGb28gPSBpbnQ7CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBv
c2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIEZvbyB4OworICAgIHJl
dHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmlj
ZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJN
b2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNv
bnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0
ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRl
eFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7
c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0g
e3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0
cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5w
dXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBM
YXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlw
ZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0
aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNp
bFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlv
dXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVs
aW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJE
ZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1
ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVz
Y3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsK
KyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7
CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1
bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21t
YW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBh
OiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRU
ZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9w
OiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRh
Y2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0
dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3Jp
cHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZl
cl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0xMS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTExLWV4cGVjdGVkLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmRkMTg0ZGJmZWJhNDNjOGEyNzIxNWE0Yjk2ZmYxMThiYjc3MDczNQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMS1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTExLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMWRhMTU5ZDRm
ZWJlYWEzMDFhZTNiZDRkMTA3OTc4OTRlNzZmNDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTExLmh0bWwKQEAgLTAsMCArMSwxMDggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAw
IiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291
cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0
cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKwor
Y29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBpbnQgeDsK
K30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNW
X1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28gZjsKKyAgICByZXR1cm4gZmxvYXQ0
KDEsIDEsIDEsIDEpOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBj
b25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVu
dFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50
U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7
bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsK
KyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9s
b2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7
ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVz
ID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVN
YXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5j
aWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0
aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2
LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRd
OworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAg
ICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119
OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0
KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURl
c2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5
LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVy
dGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBj
b25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29u
c3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlw
dG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1
ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9
IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2Fu
dmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7
ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29u
dGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0
IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwor
CisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAg
Y29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcs
IHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwg
Y2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51
bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywg
ZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBj
b21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rl
ci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJd
KTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFy
dChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9u
KCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0
ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTIt
ZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMi1leHBlY3RlZC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZkZDE4NGRiZmViYTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTItZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdX
aGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMi5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTEyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTNhMmY0ODA0NjE1ZjYxZTBjNzBi
MmQ5MzUyMjJhYWY4MDEwNjM0NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0x
Mi5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0
MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3Zl
cnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkg
OiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdt
ZW50U2hhZGVyU291cmNlID0gYAorZW51bSBGb28geworICAgIHYKK30KK2ZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJn
ZXQgMCB7CisgICAgRm9vIGYgPSBGb28udjsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEp
OworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhT
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFk
ZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNl
LCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0
ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBm
cmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFu
Z2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAi
Y3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAg
Y29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6
ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAv
LyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51
bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3Jt
YXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVT
ZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0
IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7
dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0
aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNh
bXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0
MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
NF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3Jt
YXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1
cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1
cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3Qg
Y29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAg
ICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JB
dHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJn
ZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjog
cmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29u
c3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2ls
QXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rl
ci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFz
cygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsK
KyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTMtZXhwZWN0ZWQuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0xMy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRi
ZmViYTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMTMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMy5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTEzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRiMmQ5MTZjNzNhZjVhMjY2NTYyNGU1MjU3M2I4MWZl
YThlYTkzZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMy5odG1sCkBAIC0w
LDAgKzEsMTA1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFz
PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0g
aW50OwordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29u
c3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCit0eXBlZGVmIEZvbyA9IGludDsKK2ZyYWdtZW50
IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBT
Vl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2Nv
bnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMg
ZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0g
ZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dI
TFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1
ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9
IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFk
ZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Cisg
ICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6
ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxl
bmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIs
IGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0
ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAg
IGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07
CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRl
XX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9
IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBm
cmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xv
clN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwg
bGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZp
Y2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVT
X1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4
QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1h
cCgpOworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAg
ICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9y
bSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3
YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4u
Z2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1
dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVy
ID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0g
e3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBb
e2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2Fk
T3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNv
bnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NE
ZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9Owor
ICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQ
YXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBl
bGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVm
ZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3
KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25z
dCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdl
dFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5u
ZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRo
ZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7
Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5T
b2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE0LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMTQtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1
YTRiOTZmZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE0
LWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhl
aWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5k
SW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMTQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRiNWUxYWJhMTU3ZGUyNzFhMjU0NDEwNTJkZmJhYzhmNDRlZWNmMTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTQuaHRtbApAQCAtMCwwICsxLDEwOSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citj
b25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBpbnQgeDsKK30K
K3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgw
KSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZy
YWdtZW50U2hhZGVyU291cmNlID0gYAorc3RydWN0IEZvbyB7CisgICAgaW50IHg7Cit9CitmcmFn
bWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24p
IDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOwor
Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2Fz
eW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6
IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1v
ZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3Rh
Z2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50
U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAi
OworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxN
b2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
ckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5v
cm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9y
V3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAK
KyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0
NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJp
YnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5w
dXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFn
ZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwg
Y29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6
IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0g
ZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZl
cnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEw
XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIu
dW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7
CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4
dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFp
bihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENo
YWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBv
dXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJl
ZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRz
ID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwg
bG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQ
YXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVu
ZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRl
eEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
ZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAg
Y29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmlj
ZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2Uo
KS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlv
bigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAg
IH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3Vu
ZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNS1leHBlY3RlZC5odG1sIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTE1LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRkMTg0ZGJmZWJhNDNjOGEy
NzIxNWE0Yjk2ZmYxMThiYjc3MDczNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0xNS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAw
IiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dy
b3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE1Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NTdjOTY0YWQ1NmQ0MThjNWE4M2ZiN2I5MGIyOGMxZmRiMzZmNmY0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE1Lmh0bWwKQEAgLTAsMCArMSwxMDkg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0
PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAorZW51bSBGb28geworICAgIHgKK30KK3Zl
cnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkg
OiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdt
ZW50U2hhZGVyU291cmNlID0gYAorZW51bSBGb28geworICAgIHgKK30KK2ZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJn
ZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0
cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRy
eVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1
bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsK
KyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29u
c3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25l
In07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhh
QmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMu
QUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0
IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAg
Y29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07Cisg
ICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0
ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRl
dmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVu
dFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRl
cywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0
OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVy
QXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0g
MTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
Nl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOwor
CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25z
dCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9Owor
ICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFp
bkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3Vy
cmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1
cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAs
IGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFj
aG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJj
bGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlw
dG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNv
bnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJl
bmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShy
ZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygw
LCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEs
IDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21t
YW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVu
Y3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBm
dW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTE2LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MTYtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRiOTZm
ZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE2LWV4cGVj
dGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMTYuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNi5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjI5YTRmNGEzOWYwOWNmN2Y3MWQ2Y2JiY2MzOTdmMzQ4MmVmYTZiYjEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTYuaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52
YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2
ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCitmbG9hdDQgaGVscGVyKCkgeworICAgIHJldHVybiBmbG9h
dDQoMCwgMCwgMCwgMCk7Cit9Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9z
aXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlv
bjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2Zsb2F0NCBoZWxwZXIo
KSB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2ZyYWdtZW50IGZsb2F0NCBm
cmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQg
MCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24g
c3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAg
IGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6
IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAg
ICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3Qg
cmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07
CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxl
bmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxM
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0
dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29u
c3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAg
Y29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhC
dWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmlj
ZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJy
YXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBz
d2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAg
IGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRl
c2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVu
dFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUu
Y3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNl
LmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6
IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1l
bnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVh
ciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9y
ID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0
IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRl
clBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5k
ZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5j
dGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTE3LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTct
ZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRiOTZmZjEx
OGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE3LWV4cGVjdGVk
Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMTcuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNjOWJmNDc0M2I0Yjg0MTJhOTU1YjBkOWZjNDg4M2ZiM2JmNzI3YzcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMTcuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5j
dGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMi
IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0
ZXhTaGFkZXJTb3VyY2UgPSBgCit0eXBlZGVmIEZvbyA9IGZsb2F0OwordmVydGV4IGZsb2F0NCB2
ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9u
IHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBgCit0eXBlZGVmIEZvbyA9IGZsb2F0OworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICBG
b28geCA9IDE7CisgICAgcmV0dXJuIGZsb2F0NCh4LCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0
IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVu
Y3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0p
OworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHtt
b2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIi
fTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAg
Y29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJu
b25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQg
PSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFs
cGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJp
dHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNv
bnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07Cisg
ICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07
CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2
ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFn
bWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0
YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5
b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2Uu
Y3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVy
QXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVm
ZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNd
ID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEz
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBj
b25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9
OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBD
aGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0
Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRl
eHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0g
ZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNj
cmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAg
IGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNz
KHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVy
cygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQs
IDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBj
b21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1
ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4o
ZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9
LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTgtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRi
OTZmZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4LWV4
cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdo
dD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5T
b2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMTguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjgxMzdlNjViMzY3MTM5MWYyNzA5ZDNhMDFlNTZjMDZkOTQzYTg3N2IKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTguaHRtbApAQCAtMCwwICsxLDExMSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJj
YW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25z
dCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQor
dmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDAp
KSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJh
Z21lbnRTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9u
KSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28gZjsKKyAgICBmLnggPSAxOworICAgIHJldHVybiBm
bG9hdDQoZi54LCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVs
ZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3Qg
ZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBm
cmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0
YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hh
ZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRp
dmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0
YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxw
aGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
clN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQs
IHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVw
dGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFk
ZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3Ry
aWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9
OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91
dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGlu
ZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVU
b3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3Rh
dGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07
CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUo
cmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9Owor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVy
RGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2
ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlw
dG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFp
biA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZp
ZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9
OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1
cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJz
dG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNo
bWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9y
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwg
WzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFu
ZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5k
QnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7Cisg
ICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBm
dW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBk
cmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTE5LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTktZXhwZWN0ZWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRiOTZmZjExOGJiNzcwNzM1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE5LWV4cGVjdGVkLmh0bWwKQEAgLTAsMCAr
MSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxz
Y3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTku
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMzMyYTUwZDU3ZDM4
YjBhYzVmMDU1M2ZhNjg5NTNiNTEwOTE1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMTkuaHRtbApAQCAtMCwwICsxLDExMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhl
aWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2Ug
PSBgCitlbnVtIEZvbyB7CisgICAgeAorfQordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxv
YXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4g
cG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitlbnVtIEZv
byB7CisgICAgeCA9IDAsCisgICAgeSA9IDEKK30KK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNo
YWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAg
aW50IHkgPSBpbnQoRm9vLnkpOworICAgIHJldHVybiBmbG9hdDQoZmxvYXQoeSksIDEsIDEsIDEp
OworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhT
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFk
ZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNl
LCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0
ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBm
cmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFu
Z2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAi
Y3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAg
Y29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6
ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAv
LyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51
bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3Jt
YXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVT
ZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0
IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7
dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0
aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNh
bXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0
MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
NF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3Jt
YXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1
cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1
cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3Qg
Y29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAg
ICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JB
dHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJn
ZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjog
cmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29u
c3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2ls
QXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rl
ci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFz
cygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsK
KyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJh
c2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRo
ZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMi1leHBlY3RlZC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTItZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZl
YmE0M2M4YTI3MjE1YTRiOTZmZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTItZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
Mi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmU1ZDI2YjM3OGU2ZmYwMzUwNTJhYzEzZTQ3MWU1NjFkNWM4MWQy
YzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMi5odG1sCkBAIC0wLDAgKzEs
MTA2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNj
cmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4
U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7Cisg
ICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0g
YAorZmxvYXQ0IGhlbHBlcigpIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQor
ZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0
aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gaGVscGVyKCk7Cit9CitgOworCitjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRl
dmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9
KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7
bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVy
In07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAg
IGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAi
bm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBh
bHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVC
aXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBj
b25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9Owor
ICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19
OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7
dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQg
PSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsK
KworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJh
Z21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JT
dGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNl
LmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVm
ZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
ckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1
ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsz
XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
M10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAo
KTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAg
Y29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0i
fTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2Fw
Q2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdl
dEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRU
ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9
IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHty
OiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3th
dHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9w
OiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25z
dCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVz
Y3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFz
cyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxp
bmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZl
cnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0
LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3Qg
Y29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRR
dWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVu
KGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOwor
fSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29m
dHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMjAtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQy
N2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjAtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MjAuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5YzhhYjZmODM0
ZDUwN2Y1YjZlN2Q3NTU4MjYwMzg3MmI0NzVmNDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMjAuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNv
dXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0
dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisK
K2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZmxvYXQ0IGhlbHBlcigpIHsKKyAgICBy
ZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorZmxvYXQ0IGhlbHBlcigpIHsKKyAgICByZXR1
cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1
cm4gaGVscGVyKCk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAg
ICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtj
b2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFn
bWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdt
ZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2Ug
PSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIi
fTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRv
cG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUg
PSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3Rh
dGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3Jp
dGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0
ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxv
Y2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6
IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5w
dXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisK
KyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czog
W119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2Nv
cGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7
dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0
aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNh
bXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAgIGlmICh4
KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlv
bigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOwor
ICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlzaEpT
VGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0yMS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIz
MTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0yMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwMzJmZThhZmE0MGJlMzIwMjQz
Mzk3OGZiZmNjMGIyNGVkYzk5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MjEuaHRtbApAQCAtMCwwICsxLDY2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAK
K3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgw
KSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZy
YWdtZW50U2hhZGVyU291cmNlID0gYAordHlwZWRlZiBGb28gPSBpbnQ7Cit0eXBlZGVmIEZvbyA9
IGludDsKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBT
Vl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAx
KTsKK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZl
cnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRl
eFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVy
TW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6
IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNv
bnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQ
b2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAi
dHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZh
Y2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zv
cm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1
fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRl
ID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAs
IGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJp
YnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAg
Y29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRh
dGlvbiIpOworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFn
ZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwg
Y29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6
IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0g
ZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7Cisg
ICAgcmV0dXJuIGRldmljZS5wb3BFcnJvclNjb3BlKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3lu
YyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAg
c3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgaWYgKHgpCisgICAgICAg
ICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAg
ICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9
LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9
KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLTIyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMi1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMi1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMi5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLTIyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY0ZmM5Y2QyZTgzZjczMzNkNGMwM2QwYTAyYzNm
NWE5ZDdjZTYyMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMi5odG1sCkBA
IC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZs
b2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bv
c2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBpbnQgeDsKK30KK3N0cnVjdCBGb28gewor
ICAgIGludCB4OworfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEs
IDEsIDEsIDEpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAg
Y29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21l
bnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVu
dFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0g
e21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07
CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3Bv
bG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0g
e2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRl
cyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRl
TWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2Nh
dGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAx
NiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0
XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtd
fTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3Bl
KCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3Zl
cnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlv
blN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1w
bGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlw
ZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2Up
IHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBpZiAoeCkK
KyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rl
c3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMjMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4
MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIzLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIzLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMjMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZGRjMWYwN2I5MGE4NDU2N2NlNmFl
NjAyMmJkYTg2NmNhNzBiZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIz
Lmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCit2
ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkp
IDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFn
bWVudFNoYWRlclNvdXJjZSA9IGAKK2VudW0gRm9vIHsKKyAgICB4Cit9CitlbnVtIEZvbyB7Cisg
ICAgeAorfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6
IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEs
IDEpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qg
dmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVy
dGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFk
ZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRl
clNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVs
ZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAg
Y29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRy
eVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9
ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250
RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9
OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7
Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazog
MTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3Rh
dGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjog
MCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0
cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAg
ICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxp
ZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0
YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRl
LCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3Vu
dDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUg
PSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsK
KyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAg
ICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBpZiAoeCkKKyAgICAg
ICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0RmFp
bGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsK
K30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsK
K30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMjQtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNC1leHBlY3RlZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmViYTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjQtZXhwZWN0ZWQuaHRtbApAQCAt
MCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFz
PgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52
YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0yNC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRhMmQwN2U3
OGY1MzA5ZTBlNmRiNWNhOTYwZTFkM2ZmMTJiYTQ0MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0yNC5odG1sCkBAIC0wLDAgKzEsMTA2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNv
dXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0
dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisK
K2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZmxvYXQgc2F0dXJhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkgeworICAgIHJldHVybiAxOworfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICBy
ZXR1cm4gZmxvYXQ0KHNhdHVyYXRlKDMsIDQpLCBzYXR1cmF0ZSgyKSwgMSwgMSk7Cit9CitgOwor
Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2Fz
eW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6
IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1v
ZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3Rh
Z2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50
U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAi
OworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxN
b2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
ckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5v
cm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9y
V3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAK
KyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0
NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJp
YnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5w
dXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFn
ZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwg
Y29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6
IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0g
ZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZl
cnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEw
XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIu
dW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7
CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4
dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFp
bihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENo
YWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBv
dXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJl
ZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRz
ID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwg
bG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQ
YXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVu
ZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRl
eEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
ZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAg
Y29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmlj
ZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2Uo
KS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlv
bigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAg
IH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3Vu
ZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMjUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIx
OWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MjUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMjUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzNDIz
NGRlNzZiOTc4NjU5MTY3MzVkYzNmNDc5NmEzYjNjNmJjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMjUuaHRtbApAQCAtMCwwICsxLDY4IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNo
YWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlv
biA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOwor
fQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bv
c2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOwor
fQorYDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1Rhcmdl
dCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKworYXN5bmMgZnVu
Y3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0p
OworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHtt
b2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIi
fTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAg
Y29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJu
b25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQg
PSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFs
cGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJp
dHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNv
bnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07Cisg
ICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07
CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2
ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmlt
aXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVu
Y2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxh
eW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVy
cm9yU2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2
aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVu
Y3Rpb24oeCkgeworICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOwor
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRl
c3RQYXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjYtZXhwZWN0ZWQuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0yNi1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRi
ZmViYTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMjYtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9u
Qmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNi5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTI2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGY4MGE3NWNjNjI3NTljM2I0Yjg4ODk5NzFlNzZiYWEy
MDg3OWE4NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNi5odG1sCkBAIC0w
LDAgKzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFz
PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQg
dmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlv
biB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICBy
ZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBgCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9u
IDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwg
MSwgMSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZl
cnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRl
eFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVy
TW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6
IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNv
bnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQ
b2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAi
dHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZh
Y2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zv
cm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1
fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRl
ID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAs
IGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJp
YnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAg
Y29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
ciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rl
cml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1
dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJl
bmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6
IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1h
cFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFd
ID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAg
ICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0
Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2Us
IGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNv
bmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRU
ZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0
VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBj
b25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7
fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBj
b2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2
ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNv
bG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5l
bmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlz
aCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQor
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
Z2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmlj
ZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJl
T25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJm
OTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMjctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMjcuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjM5MWMxNTRhZjQzNjUwZjVkNWM1ZDU5Yzc1ODIyMDI3OTJjZmI3M2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjcuaHRtbApAQCAtMCwwICsxLDY4IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4K
K2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0
dXJuIHBvc2l0aW9uOworfQorYDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitm
cmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRp
b24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9Citm
cmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRp
b24sIGJvb2wgaXNGb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKSA6IFNWX1RhcmdldCAwIHsKKyAg
ICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNv
bnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZy
YWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBj
b25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFz
dGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Cisg
ICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQs
IGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisg
ICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJp
YnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3Qg
aW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29u
c3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZm
ZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5j
cmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2
aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3Bv
bG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUs
IHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUo
KTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhl
bihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkg
eworICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7
CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBm
aW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQo
KTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5
Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0z
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmU0ZjI0NDYz
MjhjZWJiNjM0MzRkODUxZDQ0YTQzYzk5ZWFlZTI5MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0zLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJT
b3VyY2UgPSBgCitmbG9hdDQgaGVscGVyKCkgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwg
MSk7Cit9Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRy
aWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitj
b25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNo
YWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAg
cmV0dXJuIGhlbHBlcigpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7
CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVs
ZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3Qg
ZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBm
cmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0
YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hh
ZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRp
dmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0
YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxw
aGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
clN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQs
IHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVw
dGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFk
ZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3Ry
aWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9
OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91
dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGlu
ZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJv
clNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVy
aXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0
LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRv
dy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihk
ZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBp
ZiAoeCkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5p
c2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtNC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFm
MjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy00LWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTQuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy00Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRlYzhiYjFjNzEwNWJiZTVhMGFk
ODQ4NTlhMWY2MjUwZmIyNTcyNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy00
Lmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCit0
eXBlZGVmIEZvbyA9IGludDsKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9u
OworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZnJhZ21lbnQgZmxvYXQ0
IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1Rhcmdl
dCAwIHsKKyAgICBGb28geDsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsK
KworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVy
TW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNX
SExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJh
Z21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1z
dHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3Iiwg
Y3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0
IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdi
YTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BV
Q29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwor
ICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAi
ZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBb
YXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0
ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERl
c2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVu
dFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRl
cywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0
OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4g
ZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
K2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZp
Y2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQ
YXNzZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RG
YWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9u
KCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy01LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1Mg
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy01Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmRjMThmZTg3NDVlMTI1ZDhiZTY2ZTVlNGRmOGIwNmYzNTdkODVlZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy01Lmh0bWwKQEAgLTAsMCArMSw2OSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+
Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBpbnQgeDsK
K30KKwordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29u
c3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFk
ZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIEZv
byB4OworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5j
dGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZp
Y2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6
IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVT
aGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21v
ZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9
OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBj
b25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5v
bmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9
IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxw
aGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0
cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29u
c3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAg
ICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsK
KyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3Zl
cnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0
b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisK
KyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1p
dGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5j
aWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5
b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBl
bGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJy
b3JTY29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZp
Y2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5j
dGlvbih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7Cisg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVz
dFBhc3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy02LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy02LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2
ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLTYtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtNi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTYuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
MDVlNDY4NGM4MDZmNDhhNGI2YjIwOGRjZTEyNTBlY2ZlNjYxOTAzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTYuaHRtbApAQCAtMCwwICsxLDY4IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRl
eFNoYWRlclNvdXJjZSA9IGAKK2VudW0gRm9vIHsKKyAgICB2Cit9Cit2ZXJ0ZXggZmxvYXQ0IHZl
cnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24g
eworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJj
ZSA9IGAKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBT
Vl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgRm9vIHggPSBGb28udjsKKyAgICByZXR1
cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2
aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtj
b2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZl
cnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVy
dGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50
U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBw
cmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXph
dGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29u
c3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25z
dCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9y
QmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29u
c3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9
IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQg
PSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5w
dXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBp
bnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQ
aXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1
c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwg
cmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRl
eElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29u
c3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30K
K3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5j
dGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAg
ICAgICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTctZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRi
OTZmZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTctZXhw
ZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0
PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNv
ZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy03Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZjZDFiNGY5NjcyYjhiMWZjOTVmMzkwOTI3MDZiMDViOTlhNjU3YTEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNy5odG1sCkBAIC0wLDAgKzEsMTA5IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHZl
cnRleFNoYWRlclNvdXJjZSA9IGAKK2Zsb2F0NCBoZWxwZXIoKSB7CisgICAgcmV0dXJuIGZsb2F0
NCgwLCAwLCAwLCAwKTsKK30KK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9u
OworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZmxvYXQ0IGhlbHBlcigp
IHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorZnJhZ21lbnQgZmxvYXQ0IGZy
YWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAw
IHsKKyAgICByZXR1cm4gaGVscGVyKCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmlj
ZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJN
b2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNv
bnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0
ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRl
eFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7
c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0g
e3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0
cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5w
dXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBM
YXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlw
ZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0
aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNp
bFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlv
dXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVs
aW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJE
ZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1
ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVz
Y3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsK
KyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7
CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1
bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21t
YW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBh
OiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRU
ZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9w
OiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRh
Y2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0
dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3Jp
cHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZl
cl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy04LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy04LWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOC5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMTJhNGZkMGMyNmRmZmFlMzY3NDc1YzM4NTc1ZmJkNWIx
Yjk3OTFiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTguaHRtbApAQCAtMCww
ICsxLDY3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQg
dmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlv
biB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291
cmNlID0gYAorZmxvYXQgc2F0dXJhdGUoZmxvYXQgeCkgeworICAgIHJldHVybiAwOworfQorZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9u
KSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsK
KworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVy
TW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNX
SExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJh
Z21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1z
dHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3Iiwg
Y3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0
IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdi
YTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BV
Q29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwor
ICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAi
ZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBb
YXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0
ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERl
c2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVu
dFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRl
cywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0
OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4g
ZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
K2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZp
Y2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQ
YXNzZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RG
YWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9u
KCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy05LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1Mg
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy05Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZGE2YzA5NTI5NDFkOTAwZjc1Yzk2NGEwOTNlYjA5N2MwZGYwNDBkMQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy05Lmh0bWwKQEAgLTAsMCArMSw2NSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+
Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRl
cihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJl
dHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK3R5
cGVkZWYgYm9vbDIgPSBpbnQ7CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0
IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9h
dDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsK
KyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBm
cmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZy
YWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3Rh
Z2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFk
ZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2
ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3Rh
dGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBo
YUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
U3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwg
d3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRl
ckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJp
ZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBb
aW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307
CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVycm9y
U2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ig
PSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJp
emF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQs
IHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURl
c2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRl
dmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAgIGlm
ICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlz
aEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLWV4cGVj
dGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRkMTg0ZGJmZWJhNDNjOGEyNzIxNWE0Yjk2ZmYxMThiYjc3
MDczNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy1leHBlY3RlZC5odG1sCkBA
IC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52
YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFz
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDIwYTgyMmVjZTgz
ZmYwNzQ4N2E4ZmQ0OGYyYmM5NzU4YmVhYmFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0g
YAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRl
KDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3Qg
ZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVy
biBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkg
eworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0
IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
ZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNo
YWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0
aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25T
dGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFs
cGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29s
b3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5k
LCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRl
cHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hh
ZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0
cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9
IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlv
dXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxp
bmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZl
VG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0
YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9
OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5l
KHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNj
cmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
ckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
dmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
NV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRl
eHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3Jp
cHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hh
aW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAx
fTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0
dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAi
c3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFj
aG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRv
cik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0s
IFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewor
ICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAg
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
fSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376681</attachid>
            <date>2019-08-19 04:28:05 -0700</date>
            <delta_ts>2019-08-20 20:02:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195446-20190819042804.patch</filename>
            <type>text/plain</type>
            <size>254136</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmOTFkYzVmYTQzOTFh
NGRmNWNkOWRkMDQ1Yjk5MmIwMTdkYWJhYS4uOWY3MmQ0NDZlYzE2ZDYzNmM3YjkxMmFiNzBlOGUz
NTk4YWRmOGNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2OCBAQAorMjAxOS0wOC0xOSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0g
VmVydGV4IHNoYWRlciBhbmQgZnJhZ21lbnQgc2hhZGVyIG5lZWQgdG8gYmUgYWJsZSB0byBjb21l
IGZyb20gdHdvIGRpZmZlcmVudCBwcm9ncmFtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2hlbiBhbiBhdXRob3IgY29uZmlndXJlcyBXZWJHUFUgdG8g
cmVuZGVyIHRoaW5ncywgdGhlIGF1dGhvciBwcm92aWRlcyBhIHZlcnRleCBzaGFkZXIgYW5kIGEg
ZnJhZ21lbnQKKyAgICAgICAgc2hhZGVyLCBhbmQgdGhleSBib3RoIGV4ZWN1dGUgd2l0aGluIHRo
ZSBzYW1lIGRyYXcgY2FsbC4gSXQncyBjb21tb24gZm9yIGF1dGhvcnMgY29taW5nIGZyb20gV2Vi
R0wgdG8KKyAgICAgICAgcHV0IHRoZSB0d28gc2hhZGVycyBpbiBkaXN0aW5jdCBmaWxlcy4gVW50
aWwgdGhpcyBwYXRjaCwgV0hMU0wgd2FzIHVuYWJsZSB0byBwcm9jZXNzIHR3byBzaGFkZXJzIGZy
b20KKyAgICAgICAgZGlmZmVyZW50IHNvdXJjZXMgd2hpY2ggd2VyZSBtZWFudCB0byBiZSBob29r
ZWQgdG9nZXRoZXIuCisKKyAgICAgICAgVGhlIGZpcnN0IHRoaW5nIHRoaXMgcGF0Y2ggZG9lcyBp
cyBhZGQgdGhlIG5vdGlvbiBvZiBhICJzaGFkZXIgbW9kdWxlIiB0byB0aGUgV0hMU0wgY29tcGls
ZXIuIFRoaXMKKyAgICAgICAgcmVwcmVzZW50cyB0aGUgc291cmNlIGNvZGUgY29udGFpbmluZyBv
bmUgb3IgbW9yZSBzaGFkZXJzLiBXaGVuIHRoZSBhdXRob3Igd2FudHMgdG8gYWN0dWFsbHkgY29t
cGlsZQorICAgICAgICB0aGVpciBzb3VyY2UsIHRoZXkgc3VwcGx5IG9uZSBvciBtb3JlIHNoYWRl
ciBtb2R1bGVzIHRvIHRoZSBjb21waWxlci4gVGhlIGNvbXBpbGVyIHRoZW4gbG9va3MgaW4gdGhl
CisgICAgICAgIGZpcnN0IG1vZHVsZSBmb3IgdGhlIHZlcnRleCBzaGFkZXIgYW5kIHRoZSBzZWNv
bmQgbW9kdWxlIGZvciB0aGUgZnJhZ21lbnQgc2hhZGVyLiBUaGUgdHdvIG1vZHVsZXMgYXJlCisg
ICAgICAgIHBhc3NlZCBieSByZWZlcmVuY2UsIHNvIHRoZXkgbWF5IHJlZmVyIHRvIHRoZSBzYW1l
IHVuZGVybHlpbmcgb2JqZWN0LCB3aGljaCBpcyBzdXBwb3J0ZWQuCisKKyAgICAgICAgU2hhZGVy
IG1vZHVsZXMgaGF2ZSB0aGlzIGludGVyZXN0aW5nIGJlaGF2aW9yIHdoZXJlLCB3aXRoaW4gYSBz
aGFkZXIgbW9kdWxlLCBmdW50aW9uIC8gdHlwZSBuYW1lcyBtYXkKKyAgICAgICAgcmVmZXIgdG8g
ZWFjaCBvdGhlciwgYnV0IG1heSBub3QgcmVmZXIgdG8gYW55IG90aGVyIG5hbWUgd2l0aGluIGFu
eSBvdGhlciBzaGFkZXIgbW9kdWxlLiBUaGV5IGJlaGF2ZQorICAgICAgICBhcyBpZiBhbGwgdGhl
IG5hbWVzIGluc2lkZSB0aGUgbW9kdWxlIGFyZSBub3QgZXhwb3J0ZWQuIFNvLCBpdCB3b3VsZCBz
ZWVtIHRoYXQgdGhlIG1vc3QgbmF0dXJhbCB3YXkgdG8KKyAgICAgICAgc3VwcG9ydCB0aGlzIHdv
dWxkIGJlIHRvIHJ1biB0aGUgV0hMU0wgY29tcGlsZXIgYW5kIHRoZSBNU0wgY29tcGlsZXIgdHdp
Y2UgaW5kZXBlbmRlbnRseSwgb25jZSBmb3IgZWFjaAorICAgICAgICBtb2R1bGUuIEhvd2V2ZXIs
IHRoaXMgbWVhbnMgdGhhdCBvdXIgY29tcGlsZSB0aW1lcyB3b3VsZCBkb3VibGUsIHdoaWNoIHdv
dWxkIGJlIHVuZm9ydHVuYXRlLiBJbnN0ZWFkLAorICAgICAgICBhIG1vcmUgcGVyZm9ybWFudCBv
cHRpb24gd291bGQgYmUgdG8gbWFrZSB0aGUgV0hMU0wgY29tcGlsZXIgc21hcnQgZW5vdWdoIHRv
IGhhbmRsZSBtdWx0aXBsZSBzaGFkZXIKKyAgICAgICAgbW9kdWxlcyBhdCBvbmNlLCBhbmQgdG8g
cHJvZHVjZSBhIHNpbmdsZSBtZXJnZWQgb3V0cHV0IHByb2dyYW0gdGhhdCBjb250YWlucyBldmVy
eXRoaW5nLiBJdCBkb2VzIHRoaXMKKyAgICAgICAgYnkgcGFyc2luZyBhbGwgdGhlIHNoYWRlciBt
b2R1bGVzIGludG8gYSBzaW5nbGUgUHJvZ3JhbSBvYmplY3QsIGJ1dCByZW1lbWJlcmluZyB3aGlj
aCBpdGVtcyBpbiB0aGUgCisgICAgICAgIFByb2dyYW0gY2FtZSBmcm9tIHdoaWNoIHBsYWNlcy4K
KworICAgICAgICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IHRlYWNoaW5nIHRoZSBXSExTTCBjb21w
aWxlciBhYm91dCAibmFtZXNwYWNlcy4iIFRoZXJlIGFyZSB0aHJlZSBuYW1lc3BhY2VzOiBvbmUK
KyAgICAgICAgZm9yIGVhY2ggc2hhZGVyIG1vZHVsZSwgYW5kIGFuIGFkZGl0aW9uYWwgb25lIGZv
ciB0aGUgc3RhbmRhcmQgbGlicmFyeS4gRXZlcnkgZ2xvYmFsIG9iamVjdCAoZS5nLgorICAgICAg
ICBuYW1lZCB0eXBlcyBhbmQgZnVuY3Rpb25zKSBrbm93cyB3aGljaCBuYW1lc3BhY2UgaXQgbGl2
ZXMgaW5zaWRlLiBUaGUgTmFtZVJlc29sdmVyIGhhcyBiZWVuIGVkdWNhdGVkCisgICAgICAgIHRv
IHVuZGVyc3RhbmQgbmFtZXNwYWNlcywgc28gd2hlbiB5b3UgYXNrIGl0IGZvciBhIG5hbWUgaW4g
YSBwYXJ0aWN1bGFyIG5hbWVzcGFjZSwgaXQgd2lsbCBsb29rIHVwCisgICAgICAgIGFsbCB0aGUg
bmFtZXMgYm90aCBpbiB0aGF0IG5hbWVzcGFjZSBhbmQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkn
cyBuYW1lc3BhY2UsIGFuZCBpdCB3aWxsIHVuaW9uIHRoZQorICAgICAgICByZXN1bHRzIHRvZ2V0
aGVyLgorCisgICAgICAgIEZ1bmN0aW9uIG92ZXJsb2FkIHJlc29sdXRpb24gZG9lc24ndCBhY3R1
YWxseSBnbyB0aHJvdWdoIHRoZSBuYW1lIHJlc29sdmVyOyBpbnN0ZWFkLCBpdCdzIGhhbmRsZWQg
YnkKKyAgICAgICAgc29ydGluZyBhbGwgZnVuY3Rpb25zIGludG8gYnVja2V0cyBzdWNoIHRoYXQg
YW55IENhbGxFeHByZXNzaW9uIG9ubHkgaGFzIHRvIGxvb2sgaW4gYSBzaW5nbGUgYnVja2V0Cisg
ICAgICAgIHRvIGZpbmQgYWxsIGl0J3MgcG90ZW50aWFsIG92ZXJsb2Fkcy4gVGhlc2UgYnVja2V0
cyBjYW4ndCBiZSBlZHVjYXRlZCBhYm91dCBuYW1lc3BhY2VzIChjb25zaWRlciBhCisgICAgICAg
IGZ1bmN0aW9uIHdoaWNoIGhhcyBvdmVybG9hZHMgaW4gYWxsIDMgbmFtZXNwYWNlcyB0aGF0IGlz
IGNhbGxlZCBmcm9tIGJvdGggc2hhZGVyIG1vZHVsZXMgLSBhbGwgdGhlCisgICAgICAgIG92ZXJs
b2FkcyBtdXN0IGVuZCB1cCBpbiB0aGUgc2FtZSBidWNrZXQpLiBUaGVyZWZvcmUsIHRoaXMgbG9n
aWMgaXMgbW92ZWQgaW50bworICAgICAgICByZXNvbHZlRnVuY3Rpb25PdmVybG9hZCgpLCB3aGlj
aCB3aWxsIG5vdyBkaXNyZWdhcmQgY2FuZGlkYXRlIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZSBpbiBh
biBpbmFjY2Vzc2libGUgCisgICAgICAgIG5hbWVzcGFjZS4KKworICAgICAgICBUZXN0czogd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTEwLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMS5odG1sCisgICAgICAgICAgICAgICB3ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MTIuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEzLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0x
NC5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTUuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE2
Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNy5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTgu
aHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE5Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yLmh0
bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEuaHRt
bAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTIyLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMy5odG1s
CisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMjQuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI1Lmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0yNi5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjcuaHRtbAor
ICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTMuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTQuaHRtbAorICAg
ICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTUuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTYuaHRtbAorICAgICAg
ICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTcuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTguaHRtbAorICAgICAgICAg
ICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTkuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLmh0bWwKKworICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb246Om5hbWVTcGFjZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
OjpzZXROYW1lU3BhY2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TE5hbWVTcGFjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5oLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6TmFtZWRUeXBlOjpuYW1lU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6TmFtZWRUeXBlOjpzZXROYW1lU3BhY2UpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjplbWl0TWV0YWxGdW5jdGlvbnMpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkR1cGxpY2F0ZUZ1bmN0aW9uS2V5OjpvcGVyYXRvcj09IGNvbnN0
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkZ1bmN0aW9uS2V5OjpvcGVyYXRvcj09IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVja09wZXJhdG9yT3ZlcmxvYWQpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmNoZWNrU2hhZGVyVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6Q2hlY2tlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNo
ZWNrZXI6OnJlc29sdmVGdW5jdGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xMZXhlci5jcHA6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6OmFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6OmdldFR5cGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6Z2V0RnVuY3Rpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6c2VhcmNoVHlwZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjpzZWFyY2hGdW5jdGlvbnMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjpnbG9iYWxFeGlzdHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0Ojpsb2NhbEV4aXN0cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6OmV4aXN0cyk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjpzZXRDdXJyZW50TmFtZVNwYWNl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6dmlzaXQpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OnJlc29sdmVOYW1lc0luVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OnJlc29sdmVUeXBlTmFtZXNJbkZ1bmN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpOYW1lUmVzb2x2ZXI6OnNldEN1cnJlbnROYW1lU3BhY2UpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQ
YXJzZXI6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmZhaWwpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6Y29uc3VtZUludGVncmFsTGl0ZXJhbCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpjb25zdW1lTm9uTmVnYXRpdmVJbnRl
Z3JhbExpdGVyYWwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VDb25z
dGFudEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VU
eXBlU3VmZml4QWJicmV2aWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6
cGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6cGFyc2VCdWlsdEluU2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6cGFyc2VSZXNvdXJjZVNlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpQYXJzZXI6OnBhcnNlU3RhZ2VJbk91dFNlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25NZW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VWZXJ0ZXhPckZyYWdtZW50RnVu
Y3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJz
ZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQ
YXJzZXI6OnBhcnNlU3dpdGNoQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2Vy
OjpwYXJzZUZvckxvb3ApOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpj
b21wbGV0ZUFzc2lnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFy
c2VQb3NzaWJsZVRlcm5hcnlDb25kaXRpb25hbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UGFyc2VyOjpwYXJzZVRlcm0pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9kdWxlOjpTaGFk
ZXJNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNyZWF0ZVNoYWRlck1vZHVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9kdWxlRGVsZXRlcjo6b3BlcmF0b3Io
KSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cHJlcGFyZVNoYXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6cHJlcGFyZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9n
cmFtLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJvZ3JhbTo6YXBwZW5kKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjptYXRjaFNlbWFudGljcyk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6ZmluZEVudHJ5UG9pbnQpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OmluY2x1ZGVTdGFuZGFyZExpYnJhcnkpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0aWVzLmg6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9HUFVTaGFkZXJNb2R1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdQVVNoYWRl
ck1vZHVsZTo6cGxhdGZvcm1TaGFkZXJNb2R1bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R1BVU2hhZGVyTW9kdWxlOjp3aGxzbE1vZHVsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
UFVTaGFkZXJNb2R1bGU6OndobHNsU291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW06Cisg
ICAgICAgIChXZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dmVydENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6dHJ5U2V0TWV0YWxGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6dHJ5U2V0RnVuY3Rp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRSZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVTaGFkZXJNb2R1bGVN
ZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVNoYWRlck1vZHVsZTo6dHJ5Q3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKToKKwog
MjAxOS0wOC0xNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjI0ODc3Mi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0
aW9uRGVjbGFyYXRpb24uaAppbmRleCA2ODA1ZDY2NjRmOTA3YzgzY2Q1YjdhZjhkYTRiZGZhNDZk
ZTJiMmJkLi5iNzI1NmQ1MDU0OGZlOTkwOGE0MjdiZjhmNWIwMWQ3ZDliZTMxNWRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlv
bkRlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJXSExTTEVudHJ5UG9pbnRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMTmFt
ZVNwYWNlLmgiCiAjaW5jbHVkZSAiV0hMU0xQYXJzaW5nTW9kZS5oIgogI2luY2x1ZGUgIldITFNM
U2VtYW50aWMuaCIKICNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCkBAIC04Myw2ICs4NCw5
IEBAIHB1YmxpYzoKIAogICAgIFBhcnNpbmdNb2RlIHBhcnNpbmdNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJzaW5nTW9kZTsgfQogCisgICAgTmFtZVNwYWNlIG5hbWVTcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZVNwYWNlOyB9CisgICAgdm9pZCBzZXROYW1lU3BhY2UoTmFtZVNwYWNlIG5h
bWVTcGFjZSkgeyBtX25hbWVTcGFjZSA9IG5hbWVTcGFjZTsgfQorCiBwcml2YXRlOgogICAgIENv
ZGVMb2NhdGlvbiBtX2NvZGVMb2NhdGlvbjsKICAgICBBdHRyaWJ1dGVCbG9jayBtX2F0dHJpYnV0
ZUJsb2NrOwpAQCAtOTMsNiArOTcsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX25hbWU7CiAg
ICAgVmFyaWFibGVEZWNsYXJhdGlvbnMgbV9wYXJhbWV0ZXJzOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxTZW1hbnRpYz4gbV9zZW1hbnRpYzsKKyAgICBOYW1lU3BhY2UgbV9uYW1lU3BhY2UgeyBOYW1l
U3BhY2U6OlN0YW5kYXJkTGlicmFyeSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1l
U3BhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5h
bWVTcGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkNmZkZWYxNWZiNzE3NjhiZTA1MTlhMGVhMTNmNTJlMjQ5
NmU4YTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xOYW1lU3BhY2UuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCisvLyBEaWZmZXJlbnQg
c2hhZGVyIG1vZHVsZXMgb3BlcmF0ZSBpbiBkaWZmZXJlbnQgbmFtZXNwYWNlcy4KKy8vIFRoaXMg
bWVhbnMgaXQncyBwb3NzaWJsZSB0byBoYXZlIHR3byBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBz
aWduYXR1cmVzLCBhcyBsb25nIGFzIHRoZXkgYXJlIGluIGRpZmZlcmVudCBtb2R1bGVzLgorZW51
bSBjbGFzcyBOYW1lU3BhY2UgOiB1aW50OF90IHsKKyAgICBTdGFuZGFyZExpYnJhcnkgPSAwLAor
ICAgIE5hbWVTcGFjZTEgPSAxLAorICAgIE5hbWVTcGFjZTIgPSAyCit9OworCit9CisKK30KKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKaW5kZXggNDViODAx
MGNkMjhlYmRkNTBmODcwMTdlYmU3YWNiMzQyZTRjZjdhZS4uNTk5YzQ2YzU4NTM4NWIwMTg3YzAy
ZWJjOWQyYzMwNDNjY2IzYjg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xDb2RlTG9jYXRpb24uaCIKKyNp
bmNsdWRlICJXSExTTE5hbWVTcGFjZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZS5oIgogI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBA
IC02MCwxMiArNjEsMTUgQEAgcHVibGljOgogCiAgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4g
bV9uYW1lOyB9CiAKKyAgICBOYW1lU3BhY2UgbmFtZVNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lU3BhY2U7IH0KKyAgICB2b2lkIHNldE5hbWVTcGFjZShOYW1lU3BhY2UgbmFtZVNwYWNlKSB7
IG1fbmFtZVNwYWNlID0gbmFtZVNwYWNlOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IFR5cGU7CiAgICAgVHlwZSYgdW5pZnlOb2RlSW1wbCgpIHsgcmV0dXJuICp0aGlzOyB9CiAgICAg
Q29kZUxvY2F0aW9uIG1fY29kZUxvY2F0aW9uOwogICAgIFN0cmluZyBtX25hbWU7CisgICAgTmFt
ZVNwYWNlIG1fbmFtZVNwYWNlIHsgTmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkgfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAppbmRl
eCBlNTAwZjYxMTVmYTA4YWY0ZTRkMzdjNmVkZjM0YzEyNGQ5ZDJkMGNjLi4xZTUzMWIwMjdmYmNi
M2FkMGQ3ZjQ0ZjZkM2IyN2E4ZTYwNmQyODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3Jp
dGVyLmNwcApAQCAtODI3LDExICs4MjcsMTIgQEAgcHJpdmF0ZToKIFJlbmRlck1ldGFsRnVuY3Rp
b25FbnRyeVBvaW50cyBlbWl0TWV0YWxGdW5jdGlvbnMoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVp
bGRlciwgUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIE1hdGNoZWRSZW5k
ZXJTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQmIGxheW91dCkKIHsKICAgICBh
dXRvJiB2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50ID0gKm1hdGNoZWRTZW1hbnRpY3MudmVydGV4U2hh
ZGVyOwotICAgIGF1dG8mIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCA9ICptYXRjaGVkU2VtYW50
aWNzLmZyYWdtZW50U2hhZGVyOworICAgIGF1dG8qIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCA9
IG1hdGNoZWRTZW1hbnRpY3MuZnJhZ21lbnRTaGFkZXI7CiAKICAgICBSZWFjaGFibGVGdW5jdGlv
bnNHYXRoZXJlciByZWFjaGFibGVGdW5jdGlvbnNHYXRoZXJlcjsKICAgICByZWFjaGFibGVGdW5j
dGlvbnNHYXRoZXJlci5WaXNpdG9yOjp2aXNpdCh2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50KTsKLSAg
ICByZWFjaGFibGVGdW5jdGlvbnNHYXRoZXJlci5WaXNpdG9yOjp2aXNpdChmcmFnbWVudFNoYWRl
ckVudHJ5UG9pbnQpOworICAgIGlmIChmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQpCisgICAgICAg
IHJlYWNoYWJsZUZ1bmN0aW9uc0dhdGhlcmVyLlZpc2l0b3I6OnZpc2l0KCpmcmFnbWVudFNoYWRl
ckVudHJ5UG9pbnQpOwogICAgIGF1dG8gcmVhY2hhYmxlRnVuY3Rpb25zID0gcmVhY2hhYmxlRnVu
Y3Rpb25zR2F0aGVyZXIudGFrZVJlYWNoYWJsZUZ1bmN0aW9ucygpOwogCiAgICAgYXV0byBmdW5j
dGlvbk1hcHBpbmcgPSBnZW5lcmF0ZU1ldGFsRnVuY3Rpb25zTWFwcGluZyhwcm9ncmFtKTsKQEAg
LTg0NCw3ICs4NDUsNyBAQCBSZW5kZXJNZXRhbEZ1bmN0aW9uRW50cnlQb2ludHMgZW1pdE1ldGFs
RnVuY3Rpb25zKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsCiAgICAgICAgICAgICBmdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKICAgICB9CiAK
LSAgICByZXR1cm4geyBmdW5jdGlvbk1hcHBpbmcuZ2V0KCZ2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50
KSwgZnVuY3Rpb25NYXBwaW5nLmdldCgmZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50KSB9OworICAg
IHJldHVybiB7IGZ1bmN0aW9uTWFwcGluZy5nZXQoJnZlcnRleFNoYWRlckVudHJ5UG9pbnQpLCBm
cmFnbWVudFNoYWRlckVudHJ5UG9pbnQgPyBmdW5jdGlvbk1hcHBpbmcuZ2V0KGZyYWdtZW50U2hh
ZGVyRW50cnlQb2ludCkgOiBNYW5nbGVkRnVuY3Rpb25OYW1lIHsgMCB9IH07CiB9CiAKIENvbXB1
dGVNZXRhbEZ1bmN0aW9uRW50cnlQb2ludHMgZW1pdE1ldGFsRnVuY3Rpb25zKFN0cmluZ0J1aWxk
ZXImIHN0cmluZ0J1aWxkZXIsIFByb2dyYW0mIHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5hbWVy
LCBNYXRjaGVkQ29tcHV0ZVNlbWFudGljcyYmIG1hdGNoZWRTZW1hbnRpY3MsIExheW91dCYgbGF5
b3V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAppbmRleCBmOGE3YTNl
OTFkZDEyNzE3YWZjZDdmNmM0ZTMzNTcwZjYxZjNjMGFkLi45ZmVmM2ExZGIyOTRjOWRiZmUyMGRj
ZDFkOWUzYzI4YWJmZGMwYjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25z
LmNwcApAQCAtNzUsNiArNzUsMTEgQEAgcHVibGljOgogICAgICAgICBpZiAobV9mdW5jdGlvbi0+
bmFtZSgpICE9IG90aGVyLm1fZnVuY3Rpb24tPm5hbWUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgICAgICBpZiAobV9mdW5jdGlvbi0+bmFtZVNwYWNlKCkgIT0gQVNUOjpOYW1l
U3BhY2U6OlN0YW5kYXJkTGlicmFyeQorICAgICAgICAgICAgJiYgb3RoZXIubV9mdW5jdGlvbi0+
bmFtZVNwYWNlKCkgIT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeQorICAgICAgICAg
ICAgJiYgbV9mdW5jdGlvbi0+bmFtZVNwYWNlKCkgIT0gb3RoZXIubV9mdW5jdGlvbi0+bmFtZVNw
YWNlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgQVNTRVJUKG1fZnVu
Y3Rpb24tPmlzQ2FzdCgpID09IG90aGVyLm1fZnVuY3Rpb24tPmlzQ2FzdCgpKTsKIAogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb24tPnBhcmFtZXRlcnMoKS5zaXplKCk7
ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMQ2hlY2tlci5jcHAKaW5kZXggNjMyNTVkNDY0YWViNTAzZmY5MDA2NGVmNGRiMzQ1YzI4OGFk
ZTMzNy4uMDc2Y2JjYzgyMWQyNDgyOGFiYWIxODEyOGQyMDhmMzExNzA4MjJkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3Bw
CkBAIC0xNjEsNyArMTYxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghIW1fY2FzdFJldHVyblR5cGUgIT0gISFvdGhl
ci5tX2Nhc3RSZXR1cm5UeXBlKQorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Ym9vbD4obV9jYXN0
UmV0dXJuVHlwZSkgIT0gc3RhdGljX2Nhc3Q8Ym9vbD4ob3RoZXIubV9jYXN0UmV0dXJuVHlwZSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKCFtX2Nhc3RSZXR1cm5U
eXBlKQpAQCAtNDI3LDcgKzQyNyw3IEBAIHN0YXRpYyBib29sIGNoZWNrU2VtYW50aWNzKFZlY3Rv
cjxFbnRyeVBvaW50SXRlbT4mIGlucHV0SXRlbXMsIFZlY3RvcjxFbnRyeVBvaW50CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uLCBOYW1lQ29udGV4dCYg
bmFtZUNvbnRleHQpCitzdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNU
OjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgTmFtZUNvbnRleHQmIG5h
bWVDb250ZXh0LCBBU1Q6Ok5hbWVTcGFjZSBjdXJyZW50TmFtZVNwYWNlKQogewogICAgIGVudW0g
Y2xhc3MgQ2hlY2tLaW5kIHsKICAgICAgICAgSW5kZXgsCkBAIC00ODMsMTYgKzQ4MywxNCBAQCBz
dGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mIGZ1bmN0aW9uRGVmaW5pdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtudW1F
eHBlY3RlZFBhcmFtZXRlcnMgLSAxXS0+dHlwZSgpOwogICAgICAgICBhdXRvIGdldHRlck5hbWUg
PSBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLnN1YnN0cmluZygwLCBmdW5jdGlvbkRlZmluaXRp
b24ubmFtZSgpLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgIGF1dG8qIGdldHRlckZ1bmNzID0gbmFt
ZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGdldHRlck5hbWUpOwotICAgICAgICBpZiAoIWdldHRlckZ1
bmNzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIGdldHRlckZ1bmNz
ID0gbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGdldHRlck5hbWUsIGN1cnJlbnROYW1lU3BhY2Up
OwogICAgICAgICBWZWN0b3I8UmVzb2x2aW5nVHlwZT4gYXJndW1lbnRUeXBlczsKICAgICAgICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFyZ3VtZW50VHlw
ZVJlZmVyZW5jZXM7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRXhwZWN0ZWRQ
YXJhbWV0ZXJzIC0gMTsgKytpKQogICAgICAgICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQoKmZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSk7CiAgICAgICAgIGZvciAo
YXV0byYgYXJndW1lbnRUeXBlIDogYXJndW1lbnRUeXBlcykKICAgICAgICAgICAgIGFyZ3VtZW50
VHlwZVJlZmVyZW5jZXMuYXBwZW5kKGFyZ3VtZW50VHlwZSk7Ci0gICAgICAgIGF1dG8qIG92ZXJs
b2FkID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoKmdldHRlckZ1bmNzLCBhcmd1bWVudFR5cGVS
ZWZlcmVuY2VzKTsKKyAgICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVy
bG9hZChnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcywgY3VycmVudE5hbWVTcGFj
ZSk7CiAgICAgICAgIGlmICghb3ZlcmxvYWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGF1dG8mIHJlc3VsdFR5cGUgPSBvdmVybG9hZC0+dHlwZSgpOwpAQCAtNjcyLDE0ICs2
NzAsMTUgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8QVNUOjpUeXBlUmVmZXJlbmNlPiBtX3dyYXBw
ZWRGbG9hdFR5cGU7CiAgICAgUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1fZ2VuZXJpY1BvaW50
ZXJUeXBlOwogICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgc3RkOjp1bmlxdWVfcHRyPFJl
c29sdmluZ1R5cGU+PiBtX3R5cGVNYXA7Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fdmVydGV4RW50
cnlQb2ludHM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fZnJhZ21lbnRFbnRyeVBvaW50czsKLSAg
ICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50cnlQb2ludHM7CisgICAgSGFzaFNldDxTdHJp
bmc+IG1fdmVydGV4RW50cnlQb2ludHNbM107CisgICAgSGFzaFNldDxTdHJpbmc+IG1fZnJhZ21l
bnRFbnRyeVBvaW50c1szXTsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50cnlQb2lu
dHNbM107CiAgICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOwogICAgIFByb2dyYW0m
IG1fcHJvZ3JhbTsKICAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rp
b24geyBudWxscHRyIH07CiAgICAgSGFzaE1hcDxGdW5jdGlvbktleSwgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4sIEZ1bmN0aW9uS2V5
OjpIYXNoLCBGdW5jdGlvbktleTo6VHJhaXRzPiBtX2Z1bmN0aW9uczsKICAgICBIYXNoTWFwPEFu
ZE92ZXJsb2FkVHlwZUtleSwgUmVmUHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBBbmRPdmVybG9hZFR5
cGVLZXk6Okhhc2gsIEFuZE92ZXJsb2FkVHlwZUtleTo6VHJhaXRzPiBtX2FuZE92ZXJsb2FkVHlw
ZU1hcDsKKyAgICBBU1Q6Ok5hbWVTcGFjZSBtX2N1cnJlbnROYW1lU3BhY2UgeyBBU1Q6Ok5hbWVT
cGFjZTo6U3RhbmRhcmRMaWJyYXJ5IH07CiB9OwogCiB2b2lkIENoZWNrZXI6OnZpc2l0KFByb2dy
YW0mIHByb2dyYW0pCkBAIC03MjMsMTggKzcyMiwyMCBAQCBFeHBlY3RlZDx2b2lkLCBFcnJvcj4g
Q2hlY2tlcjo6YXNzaWduVHlwZXMoKQogCiBib29sIENoZWNrZXI6OmNoZWNrU2hhZGVyVHlwZShj
b25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQogeworICAg
IGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFtZVNwYWNlKTsK
ICAgICBzd2l0Y2ggKCpmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgewogICAg
IGNhc2UgQVNUOjpFbnRyeVBvaW50VHlwZTo6VmVydGV4OgotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV92ZXJ0ZXhFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5h
bWUoKSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV92ZXJ0ZXhFbnRyeVBv
aW50c1tpbmRleF0uYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKTsKICAgICBjYXNlIEFT
VDo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50OgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Ym9vbD4obV9mcmFnbWVudEVudHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgp
KSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2ZyYWdtZW50RW50cnlQb2lu
dHNbaW5kZXhdLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSk7CiAgICAgY2FzZSBBU1Q6
OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9v
bD4obV9jb21wdXRlRW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fY29tcHV0ZUVudHJ5UG9pbnRzW2lu
ZGV4XS5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkpOwogICAgIH0KIH0KIAogdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9u
KQogeworICAgIG1fY3VycmVudE5hbWVTcGFjZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lU3Bh
Y2UoKTsKICAgICBtX2N1cnJlbnRGdW5jdGlvbiA9ICZmdW5jdGlvbkRlZmluaXRpb247CiAgICAg
aWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CiAgICAgICAgIGlmICgh
Y2hlY2tTaGFkZXJUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKQEAgLTc1MSw3ICs3NTIsNyBA
QCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRl
ZmluaXRpb24pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYg
KCFjaGVja09wZXJhdG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uLCBtX3Byb2dyYW0ubmFt
ZUNvbnRleHQoKSkpIHsKKyAgICBpZiAoIWNoZWNrT3BlcmF0b3JPdmVybG9hZChmdW5jdGlvbkRl
ZmluaXRpb24sIG1fcHJvZ3JhbS5uYW1lQ29udGV4dCgpLCBtX2N1cnJlbnROYW1lU3BhY2UpKSB7
CiAgICAgICAgIHNldEVycm9yKEVycm9yKCJPcGVyYXRvciBkb2VzIG5vdCBtYXRjaCBleHBlY3Rl
ZCBzaWduYXR1cmUuIiwgZnVuY3Rpb25EZWZpbml0aW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC04MzQsNyArODM1LDcgQEAgQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiBDaGVja2VyOjpyZXNvbHZlRnVuY3Rpb24oVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXIKICAgICB7CiAgICAgICAgIGF1dG8gaXRlciA9IG1fZnVuY3Rpb25zLmZpbmQoRnVuY3Rp
b25LZXkgeyBuYW1lLCBXVEZNb3ZlKHVubmFtZWRUeXBlcyksIGNhc3RSZXR1cm5UeXBlIH0pOwog
ICAgICAgICBpZiAoaXRlciAhPSBtX2Z1bmN0aW9ucy5lbmQoKSkgewotICAgICAgICAgICAgaWYg
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVy
bG9hZChpdGVyLT52YWx1ZSwgdHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKKyAgICAgICAgICAgIGlm
IChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWQoaXRlci0+dmFsdWUsIHR5cGVzLCBjYXN0UmV0dXJuVHlwZSwgbV9jdXJyZW50TmFtZVNw
YWNlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247CiAgICAgICAgIH0KICAgICB9
CkBAIC0xNjUyLDE1ICsxNjUzLDE0IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxsRXhw
cmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCiAKICAgICBpZiAoIWZ1bmN0aW9uKSB7CiAgICAgICAg
IE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCA9IG1fcHJvZ3JhbS5uYW1lQ29udGV4dCgpOwotICAg
ICAgICBpZiAoYXV0byogY2FzdFR5cGVzID0gbmFtZUNvbnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJl
c3Npb24ubmFtZSgpKSkgewotICAgICAgICAgICAgaWYgKGNhc3RUeXBlcy0+c2l6ZSgpID09IDEp
IHsKLSAgICAgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgY2FzdFR5cGUgPSAoKmNhc3RUeXBl
cylbMF0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb24o
dHlwZXMsICJvcGVyYXRvciBjYXN0Il9zdHIsIGNhbGxFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigp
LCAmY2FzdFR5cGUpOwotICAgICAgICAgICAgICAgIGlmIChoYXNFcnJvcigpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uKQotICAgICAg
ICAgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi5zZXRDYXN0RGF0YShjYXN0VHlwZSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgIGF1dG8gY2FzdFR5cGVzID0gbmFtZUNvbnRleHQuZ2V0VHlwZXMo
Y2FsbEV4cHJlc3Npb24ubmFtZSgpLCBtX2N1cnJlbnROYW1lU3BhY2UpOworICAgICAgICBpZiAo
Y2FzdFR5cGVzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgY2Fz
dFR5cGUgPSBjYXN0VHlwZXNbMF0uZ2V0KCk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IHJlc29s
dmVGdW5jdGlvbih0eXBlcywgIm9wZXJhdG9yIGNhc3QiX3N0ciwgY2FsbEV4cHJlc3Npb24uY29k
ZUxvY2F0aW9uKCksICZjYXN0VHlwZSk7CisgICAgICAgICAgICBpZiAoaGFzRXJyb3IoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24pCisgICAgICAg
ICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoY2FzdFR5cGUpOwogICAgICAgICB9
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENvZGVMb2NhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDb2RlTG9jYXRpb24uaAppbmRleCA5ZTMxNzNiYTE5OTE5ZGI3OTNmMTc3OTFhZmJk
OGM2NzEyYWU4M2VlLi4zNThlMmE0NmI4ZmFmYzIwMmI0ZGZjZGM0ZmYxZTMxMTA2NzFkZmFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvZGVM
b2NhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q29kZUxvY2F0aW9uLmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAK
KyNpbmNsdWRlICJXSExTTE5hbWVTcGFjZS5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5h
bWVzcGFjZSBXSExTTCB7CkBAIC0zNiwxOCArMzgsMzMgQEAgc3RydWN0IFRva2VuOwogY2xhc3Mg
Q29kZUxvY2F0aW9uIHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb24oKSA9IGRlZmF1bHQ7Ci0g
ICAgQ29kZUxvY2F0aW9uKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQp
Ci0gICAgICAgIDogbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKLSAgICAgICAgLCBtX2VuZE9m
ZnNldChlbmRPZmZzZXQpCi0gICAgeyB9CisgICAgQ29kZUxvY2F0aW9uKHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkKKyAg
ICAgICAgOiBtX3N0YXJ0T2Zmc2V0KChzdGFydE9mZnNldCAmIDB4N0ZGRkZGRkYpIHwgKChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obmFtZVNwYWNlKSAmIDEpIDw8IDMxKSkKKyAgICAgICAgLCBtX2Vu
ZE9mZnNldCgoZW5kT2Zmc2V0ICYgMHg3RkZGRkZGRikgfCAoKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihuYW1lU3BhY2UpICYgMikgPDwgMzApKQorICAgIHsKKyAgICB9CiAgICAgQ29kZUxvY2F0aW9u
KGNvbnN0IFRva2VuJik7CiAgICAgQ29kZUxvY2F0aW9uKGNvbnN0IENvZGVMb2NhdGlvbiYgbG9j
YXRpb24xLCBjb25zdCBDb2RlTG9jYXRpb24mIGxvY2F0aW9uMikKLSAgICAgICAgOiBtX3N0YXJ0
T2Zmc2V0KGxvY2F0aW9uMS5zdGFydE9mZnNldCgpKQotICAgICAgICAsIG1fZW5kT2Zmc2V0KGxv
Y2F0aW9uMi5lbmRPZmZzZXQoKSkKLSAgICB7IH0KKyAgICAgICAgOiBtX3N0YXJ0T2Zmc2V0KGxv
Y2F0aW9uMS5tX3N0YXJ0T2Zmc2V0KQorICAgICAgICAsIG1fZW5kT2Zmc2V0KGxvY2F0aW9uMi5t
X2VuZE9mZnNldCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsb2NhdGlvbjEubmFtZVNwYWNlKCkg
PT0gbG9jYXRpb24yLm5hbWVTcGFjZSgpKTsKKyAgICB9CiAKLSAgICB1bnNpZ25lZCBzdGFydE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KLSAgICB1bnNpZ25lZCBlbmRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9mZnNldDsgfQorICAgIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXJ0T2Zmc2V0ICYgMHg3
RkZGRkZGRjsKKyAgICB9CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2VuZE9mZnNldCAmIDB4N0ZGRkZGRkY7CisgICAgfQorICAgIEFTVDo6
TmFtZVNwYWNlIG5hbWVTcGFjZSgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1
bHQgPSAobV9zdGFydE9mZnNldCAmIDB4ODAwMDAwMDApID4+IDMxOworICAgICAgICByZXN1bHQg
fD0gKG1fZW5kT2Zmc2V0ICYgMHg4MDAwMDAwMCkgPj4gMzA7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxBU1Q6Ok5hbWVTcGFjZT4ocmVzdWx0KTsKKyAgICB9CiAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ29kZUxvY2F0aW9uJiBvdGhlcikgY29uc3QgCiAgICAgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAppbmRleCAx
YWE1ZGZhMzI0NWEwZTg1NWNkNzM0YWViN2NiODVmMzk0NzYzYjQ4Li5hZTVmNWUyYTk5NDZhYzli
MWE4YzZkMzk1ZWQxY2Q4NTg4ODdmYTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcApAQCAtMzE2LDcgKzMxNiw3IEBAIGF1dG8g
TGV4ZXI6OmNvbnN1bWVUb2tlbkZyb21TdHJlYW0oKSAtPiBUb2tlbgogICAgICAgICBhdXRvIG9s
ZE9mZnNldCA9IG1fb2Zmc2V0OwogICAgICAgICBtX29mZnNldCA9IG9mZnNldDsKICAgICAgICAg
c2tpcFdoaXRlc3BhY2VBbmRDb21tZW50cygpOwotICAgICAgICByZXR1cm4geyB7IG9sZE9mZnNl
dCwgb2Zmc2V0IH0sIHR5cGUgfTsKKyAgICAgICAgcmV0dXJuIHsgeyBvbGRPZmZzZXQsIG9mZnNl
dCwgbV9uYW1lU3BhY2UgfSwgdHlwZSB9OwogICAgIH07CiAKICAgICBzd2l0Y2ggKHNoaWZ0KCkp
IHsKQEAgLTE3MDIsNyArMTcwMiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc05ld2xpbmUoVUNo
YXIgY29kZVVuaXQpCiAgICAgfQogfQogCi0KIGF1dG8gTGV4ZXI6OmxpbmVBbmRDb2x1bW5OdW1i
ZXJGcm9tT2Zmc2V0KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIHVuc2lnbmVkIHRhcmdl
dE9mZnNldCkgLT4gTGluZUFuZENvbHVtbgogewogICAgIC8vIENvdW50aW5nIGZyb20gMSB0byBt
YXRjaCBtb3N0IHRleHQgZWRpdG9ycy4KQEAgLTE3MTgsMTEgKzE3MTcsMjYgQEAgYXV0byBMZXhl
cjo6bGluZUFuZENvbHVtbk51bWJlckZyb21PZmZzZXQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5n
VmlldywgdW5zaWduZWQKICAgICByZXR1cm4geyBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIgfTsK
IH0KIAotU3RyaW5nIExleGVyOjplcnJvclN0cmluZyhjb25zdCBTdHJpbmdWaWV3JiBzb3VyY2Us
IEVycm9yIGVycm9yKQorc3RhdGljIE9wdGlvbmFsPFN0cmluZ1ZpZXc+IHNvdXJjZUZyb21OYW1l
U3BhY2UoQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlLCBjb25zdCBTdHJpbmcmIHNvdXJjZTEsIGNv
bnN0IFN0cmluZyogc291cmNlMikKK3sKKyAgICBzd2l0Y2ggKG5hbWVTcGFjZSkgeworICAgIGNh
c2UgQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeToKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBjYXNlIEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UxOgorICAgICAgICBy
ZXR1cm4gU3RyaW5nVmlldyhzb3VyY2UxKTsKKyAgICBjYXNlIEFTVDo6TmFtZVNwYWNlOjpOYW1l
U3BhY2UyOgorICAgICAgICBBU1NFUlQoc291cmNlMik7CisgICAgICAgIHJldHVybiBTdHJpbmdW
aWV3KCpzb3VyY2UyKTsKKyAgICB9Cit9CisKK1N0cmluZyBMZXhlcjo6ZXJyb3JTdHJpbmcoRXJy
b3IgZXJyb3IsIGNvbnN0IFN0cmluZyYgc291cmNlMSwgY29uc3QgU3RyaW5nKiBzb3VyY2UyKQog
ewotICAgIGlmIChlcnJvci5jb2RlTG9jYXRpb24oKSkgewotICAgICAgICBhdXRvIGxpbmVBbmRD
b2x1bW4gPSBsaW5lQW5kQ29sdW1uTnVtYmVyRnJvbU9mZnNldChzb3VyY2UsIGVycm9yLmNvZGVM
b2NhdGlvbigpLnN0YXJ0T2Zmc2V0KCkpOwotICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhsaW5l
QW5kQ29sdW1uLmxpbmUsICc6JywgbGluZUFuZENvbHVtbi5jb2x1bW4sICI6ICIsIGVycm9yLm1l
c3NhZ2UoKSk7CisgICAgaWYgKGF1dG8gY29kZUxvY2F0aW9uID0gZXJyb3IuY29kZUxvY2F0aW9u
KCkpIHsKKyAgICAgICAgaWYgKGF1dG8gc291cmNlID0gc291cmNlRnJvbU5hbWVTcGFjZShjb2Rl
TG9jYXRpb24ubmFtZVNwYWNlKCksIHNvdXJjZTEsIHNvdXJjZTIpKSB7CisgICAgICAgICAgICBh
dXRvIGxpbmVBbmRDb2x1bW4gPSBsaW5lQW5kQ29sdW1uTnVtYmVyRnJvbU9mZnNldCgqc291cmNl
LCBlcnJvci5jb2RlTG9jYXRpb24oKS5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBtYWtlU3RyaW5nKGxpbmVBbmRDb2x1bW4ubGluZSwgJzonLCBsaW5lQW5kQ29sdW1uLmNvbHVt
biwgIjogIiwgZXJyb3IubWVzc2FnZSgpKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4g
ZXJyb3IubWVzc2FnZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xMZXhlci5oCmluZGV4IGRlMmU3NjEzZjY2NGVjNWNiYjVmZmNlMjJjMmYxMjRi
MTE2OTdjMTIuLmExMzdjODRmN2RmYmFjOTAwMDIzZjJmYTYyYjNkMTA4NTdhNWZkOTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmgKQEAg
LTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVk
ZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgIldITFNMTmFtZVNwYWNlLmgiCiAjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CkBAIC0xNjUsMTYgKzE2NiwxNyBAQCBzdHJ1Y3QgVG9r
ZW4gewogfTsKIAogaW5saW5lIENvZGVMb2NhdGlvbjo6Q29kZUxvY2F0aW9uKGNvbnN0IFRva2Vu
JiB0b2tlbikKLSAgICA6IG1fc3RhcnRPZmZzZXQodG9rZW4uY29kZUxvY2F0aW9uLnN0YXJ0T2Zm
c2V0KCkpCi0gICAgLCBtX2VuZE9mZnNldCh0b2tlbi5jb2RlTG9jYXRpb24uZW5kT2Zmc2V0KCkp
CisgICAgOiBtX3N0YXJ0T2Zmc2V0KHRva2VuLmNvZGVMb2NhdGlvbi5tX3N0YXJ0T2Zmc2V0KQor
ICAgICwgbV9lbmRPZmZzZXQodG9rZW4uY29kZUxvY2F0aW9uLm1fZW5kT2Zmc2V0KQogeyB9CiAK
IGNsYXNzIExleGVyIHsKIHB1YmxpYzoKICAgICBMZXhlcigpID0gZGVmYXVsdDsKIAotICAgIExl
eGVyKFN0cmluZ1ZpZXcgc3RyaW5nVmlldykKKyAgICBMZXhlcihTdHJpbmdWaWV3IHN0cmluZ1Zp
ZXcsIEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkKICAgICAgICAgOiBtX3N0cmluZ1ZpZXcoc3Ry
aW5nVmlldykKKyAgICAgICAgLCBtX25hbWVTcGFjZShuYW1lU3BhY2UpCiAgICAgewogICAgICAg
ICBza2lwV2hpdGVzcGFjZUFuZENvbW1lbnRzKCk7CiAgICAgICAgIG1fcmluZ0J1ZmZlclswXSA9
IGNvbnN1bWVUb2tlbkZyb21TdHJlYW0oKTsKQEAgLTI1MSw3ICsyNTMsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJQYXJzZSBlcnJvciBhdCBsaW5lICIsIGxpbmVBbmRD
b2x1bW5OdW1iZXJGcm9tT2Zmc2V0KG1fc3RyaW5nVmlldywgdG9rZW4uc3RhcnRPZmZzZXQoKSku
bGluZSwgIjogIiwgbWVzc2FnZSk7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cmluZyBlcnJvclN0
cmluZyhjb25zdCBTdHJpbmdWaWV3JiBzb3VyY2UsIEVycm9yKTsKKyAgICBzdGF0aWMgU3RyaW5n
IGVycm9yU3RyaW5nKEVycm9yLCBjb25zdCBTdHJpbmcmIHNvdXJjZTEsIGNvbnN0IFN0cmluZyog
c291cmNlMiA9IG51bGxwdHIpOworCisgICAgQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lU3BhY2U7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgc3RydWN0
IFRva2VuOwpAQCAtMjY5LDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgVG9rZW4gbV9yaW5nQnVm
ZmVyWzJdOwogICAgIHVuc2lnbmVkIG1fcmluZ0J1ZmZlckluZGV4IHsgMCB9OwogICAgIHVuc2ln
bmVkIG1fb2Zmc2V0IHsgMCB9OworICAgIEFTVDo6TmFtZVNwYWNlIG1fbmFtZVNwYWNlIHsgQVNU
OjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSB9OwogfTsKIAogU3RyaW5nVmlldyBUb2tlbjo6
c3RyaW5nVmlldyhjb25zdCBMZXhlciYgbGV4ZXIpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCmluZGV4
IDE5OTAyMTNhM2I3MjZhMzAzM2QwMTdhNjEzMWFmNGE2ZGI2NjVhZmUuLmU0NDIyMTNiNTIxNGJh
ZTliOWMzNDAxMjRhN2U4OWIzZTQ3MTNhYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCkBAIC00NSw5OSAr
NDUsMTM4IEBAIE5hbWVDb250ZXh0OjpOYW1lQ29udGV4dChOYW1lQ29udGV4dCogcGFyZW50KQog
ewogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURl
ZmluaXRpb24pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlR5
cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKIHsKLSAgICBpZiAoZXhpc3RzKHR5cGVEZWZp
bml0aW9uLm5hbWUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9
IG1fdHlwZXMuYWRkKHR5cGVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGF1dG8gZXhpc3RpbmcgPSBnbG9i
YWxFeGlzdHModHlwZURlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEVycm9yKCJEdXBsaWNhdGUgbmFtZSBpbiBwcm9ncmFtIiwgKmV4aXN0aW5nKSk7Cisg
ICAgdHlwZURlZmluaXRpb24uc2V0TmFtZVNwYWNlKG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAg
YXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2N1cnJlbnROYW1lU3BhY2UpOwor
ICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlc1tpbmRleF0uYWRkKHR5cGVEZWZpbml0aW9uLm5hbWUo
KSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsK
KyAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKHR5cGVEZWZpbml0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
eyB9OwogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
JiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IE5hbWVDb250ZXh0
OjphZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQogewot
ICAgIGlmIChleGlzdHMoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChzdHJ1Y3R1cmVEZWZpbml0
aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+
LCAxPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGF1dG8gZXhpc3RpbmcgPSBnbG9iYWxFeGlzdHMoc3RydWN0dXJlRGVmaW5p
dGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkR1cGxp
Y2F0ZSBuYW1lIGluIHByb2dyYW0uIiwgKmV4aXN0aW5nKSk7CisgICAgc3RydWN0dXJlRGVmaW5p
dGlvbi5zZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byByZXN1
bHQgPSBtX3R5cGVzW2luZGV4XS5hZGQoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgQVNT
RVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9
OwogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24m
IGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBOYW1lQ29udGV4
dDo6YWRkKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24p
CiB7Ci0gICAgaWYgKGV4aXN0cyhlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoZW51bWVyYXRp
b25EZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpO
YW1lZFR5cGU+LCAxPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGF1dG8gZXhpc3RpbmcgPSBnbG9iYWxFeGlzdHMoZW51bWVy
YXRpb25EZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChF
cnJvcigiRHVwbGljYXRlIG5hbWUgaW4gcHJvZ3JhbS4iLCAqZXhpc3RpbmcpKTsKKyAgICBlbnVt
ZXJhdGlvbkRlZmluaXRpb24uc2V0TmFtZVNwYWNlKG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAg
YXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2N1cnJlbnROYW1lU3BhY2UpOwor
ICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlc1tpbmRleF0uYWRkKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwg
MT4oKSk7CisgICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+
IE5hbWVDb250ZXh0OjphZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5p
dGlvbikKIHsKLSAgICBpZiAobV90eXBlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkp
ICE9IG1fdHlwZXMuZW5kKCkKLSAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+KCkpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBpZiAoYXV0byogdHlwZSA9IHNlYXJjaFR5cGVzKGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
RXJyb3IoIkR1cGxpY2F0ZSBuYW1lIGluIHByb2dyYW0uIiwgdHlwZS0+Y29kZUxvY2F0aW9uKCkp
KTsKKyAgICBmdW5jdGlvbkRlZmluaXRpb24uc2V0TmFtZVNwYWNlKG1fY3VycmVudE5hbWVTcGFj
ZSk7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9uc1tpbmRleF0uYWRkKGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+KCkpOwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5k
KGZ1bmN0aW9uRGVmaW5pdGlvbik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgfTsK
IH0KIAotYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBOYW1l
Q29udGV4dDo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbikKIHsKLSAgICBpZiAobV90eXBlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCi0gICAgICAgIHx8IG1fdmFyaWFibGVz
LmZpbmQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVu
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9u
cy5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOworICAgIGF1dG8g
aW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBp
ZiAoYXV0byogdHlwZSA9IHNlYXJjaFR5cGVzKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJEdXBsaWNhdGUgbmFt
ZSBpbiBwcm9ncmFtLiIsIHR5cGUtPmNvZGVMb2NhdGlvbigpKSk7CisgICAgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5zZXROYW1lU3BhY2UobV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRv
IHJlc3VsdCA9IG1fZnVuY3Rpb25zW2luZGV4XS5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+KCkpOwogICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IH07
CiB9CiAKLWJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IE5hbWVDb250ZXh0
OjphZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikK
IHsKLSAgICBpZiAobV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
KSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQotICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChuYXRpdmVUeXBlRGVj
bGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVk
VHlwZT4sIDE+KCkpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9j
dXJyZW50TmFtZVNwYWNlKTsKKyAgICBpZiAoYXV0byogZnVuY3Rpb24gPSBzZWFyY2hGdW5jdGlv
bnMobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChFcnJvcigiRHVwbGljYXRlIG5hbWUgaW4gcHJvZ3JhbS4iLCBmdW5jdGlvbi0+Y29k
ZUxvY2F0aW9uKCkpKTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0TmFtZVNwYWNlKG1f
Y3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzW2luZGV4XS5hZGQo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFw
cGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB7IH07CiB9CiAKLWJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gTmFtZUNvbnRl
eHQ6OmFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiB7
CiAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBpZiAoZXhpc3RzKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4geyB9OworICAgIGlmIChhdXRv
KiBkZWNsYXJhdGlvbiA9IGxvY2FsRXhpc3RzKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJEdXBsaWNhdGUgbmFtZSBpbiBw
cm9ncmFtLiIsIGRlY2xhcmF0aW9uLT5jb2RlTG9jYXRpb24oKSkpOwogICAgIGF1dG8gcmVzdWx0
ID0gbV92YXJpYWJsZXMuYWRkKFN0cmluZyh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSksICZ2
YXJpYWJsZURlY2xhcmF0aW9uKTsKLSAgICByZXR1cm4gcmVzdWx0LmlzTmV3RW50cnk7CisgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICByZXR1cm4geyB9
OwogfQogCi1WZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+
KiBOYW1lQ29udGV4dDo6Z2V0VHlwZXMoY29uc3QgU3RyaW5nJiBuYW1lKQorVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiBOYW1lQ29udGV4dDo6Z2V0VHlw
ZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBBU1Q6Ok5hbWVTcGFjZSBmcm9tTmFtZXNwYWNlKQogewot
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVzLmZpbmQobmFtZSk7Ci0gICAgaWYgKGl0ZXJhdG9y
ID09IG1fdHlwZXMuZW5kKCkpIHsKLSAgICAgICAgaWYgKG1fcGFyZW50KQotICAgICAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5nZXRUeXBlcyhuYW1lKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgLy8gTmFtZWQgdHlwZXMgY2FuIG9ubHkgYmUgZGVjbGFyZWQgaW4gdGhlIGdsb2JhbCBu
YW1lIGNvbnRleHQuCisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICByZXR1cm4gbV9wYXJlbnQt
PmdldFR5cGVzKG5hbWUsIGZyb21OYW1lc3BhY2UpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiByZXN1bHQ7CisKKyAgICB1bnNpZ25lZCBp
bmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tTmFtZXNwYWNlKTsKKyAgICBhdXRvIGl0
ZXJhdG9yID0gbV90eXBlc1tpbmRleF0uZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0g
bV90eXBlc1tpbmRleF0uZW5kKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHR5cGUgOiBpdGVyYXRv
ci0+dmFsdWUpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHR5cGUpOwogICAgIH0KLSAgICBy
ZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGlmIChmcm9tTmFtZXNwYWNlICE9IEFTVDo6
TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpIHsKKyAgICAgICAgaW5kZXggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSk7CisgICAgICAgIGl0
ZXJhdG9yID0gbV90eXBlc1tpbmRleF0uZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9y
ICE9IG1fdHlwZXNbaW5kZXhdLmVuZCgpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gdHlwZSA6
IGl0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHR5cGUpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIE5hbWVDb250
ZXh0OjpnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJiBuYW1lKQorVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gTmFtZUNvbnRleHQ6Omdl
dEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUsIEFTVDo6TmFtZVNwYWNlIGZyb21OYW1lc3Bh
Y2UpCiB7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25zLmZpbmQobmFtZSk7Ci0gICAg
aWYgKGl0ZXJhdG9yID09IG1fZnVuY3Rpb25zLmVuZCgpKSB7Ci0gICAgICAgIGlmIChtX3BhcmVu
dCkKLSAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0RnVuY3Rpb25zKG5hbWUpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBGdW5jdGlvbnMgY2FuIG9ubHkgYmUgZGVjbGFy
ZWQgaW4gdGhlIGdsb2JhbCBuYW1lIGNvbnRleHQuCisgICAgaWYgKG1fcGFyZW50KQorICAgICAg
ICByZXR1cm4gbV9wYXJlbnQtPmdldEZ1bmN0aW9ucyhuYW1lLCBmcm9tTmFtZXNwYWNlKTsKKwor
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+IHJlc3VsdDsKKworICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGZyb21OYW1lc3BhY2UpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uc1tpbmRl
eF0uZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbnNbaW5kZXhdLmVu
ZCgpKSB7CisgICAgICAgIGZvciAoYXV0byB0eXBlIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCh0eXBlKTsKKyAgICB9CisKKyAgICBpZiAoZnJvbU5hbWVzcGFj
ZSAhPSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KSB7CisgICAgICAgIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOwor
ICAgICAgICBpdGVyYXRvciA9IG1fZnVuY3Rpb25zW2luZGV4XS5maW5kKG5hbWUpOworICAgICAg
ICBpZiAoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbnNbaW5kZXhdLmVuZCgpKSB7CisgICAgICAgICAg
ICBmb3IgKGF1dG8gdHlwZSA6IGl0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHR5cGUpOworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAmaXRlcmF0b3It
PnZhbHVlOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uKiBOYW1lQ29udGV4dDo6Z2V0VmFyaWFibGUoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMTUx
LDExICsxOTAsNzIgQEAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiBOYW1lQ29udGV4dDo6Z2V0
VmFyaWFibGUoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7
CiB9CiAKLWJvb2wgTmFtZUNvbnRleHQ6OmV4aXN0cyhTdHJpbmcmIG5hbWUpCitBU1Q6Ok5hbWVk
VHlwZSogTmFtZUNvbnRleHQ6OnNlYXJjaFR5cGVzKFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoIW1fcGFyZW50KTsKKyAgICBpZiAobV9jdXJyZW50TmFtZVNwYWNlID09IEFTVDo6
TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpIHsKKyAgICAgICAgZm9yIChhdXRvJiB0eXBlcyA6
IG1fdHlwZXMpIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHR5cGVzLmZpbmQobmFtZSk7Cisg
ICAgICAgICAgICBpZiAoaXRlciAhPSB0eXBlcy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gJml0ZXItPnZhbHVlWzBdLmdldCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9j
dXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIGl0ZXIgPSBtX3R5cGVzW2luZGV4XS5maW5kKG5h
bWUpOworICAgIGlmIChpdGVyICE9IG1fdHlwZXNbaW5kZXhdLmVuZCgpKQorICAgICAgICByZXR1
cm4gJml0ZXItPnZhbHVlWzBdLmdldCgpOworCisgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSk7CisgICAgaXRlciA9IG1fdHlw
ZXNbaW5kZXhdLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXIgIT0gbV90eXBlc1tpbmRleF0uZW5k
KCkpCisgICAgICAgIHJldHVybiAmaXRlci0+dmFsdWVbMF0uZ2V0KCk7CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBOYW1lQ29udGV4dDo6c2Vh
cmNoRnVuY3Rpb25zKFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fcGFyZW50
KTsKKyAgICBpZiAobV9jdXJyZW50TmFtZVNwYWNlID09IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFy
ZExpYnJhcnkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbnMgOiBtX2Z1bmN0aW9ucykg
eworICAgICAgICAgICAgYXV0byBpdGVyID0gZnVuY3Rpb25zLmZpbmQobmFtZSk7CisgICAgICAg
ICAgICBpZiAoaXRlciAhPSBmdW5jdGlvbnMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
ICZpdGVyLT52YWx1ZVswXS5nZXQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3Vy
cmVudE5hbWVTcGFjZSk7CisgICAgYXV0byBpdGVyID0gbV9mdW5jdGlvbnNbaW5kZXhdLmZpbmQo
bmFtZSk7CisgICAgaWYgKGl0ZXIgIT0gbV9mdW5jdGlvbnNbaW5kZXhdLmVuZCgpKQorICAgICAg
ICByZXR1cm4gJml0ZXItPnZhbHVlWzBdLmdldCgpOworCisgICAgaW5kZXggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSk7CisgICAgaXRlciA9
IG1fZnVuY3Rpb25zW2luZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChpdGVyICE9IG1fZnVuY3Rp
b25zW2luZGV4XS5lbmQoKSkKKyAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZVswXS5nZXQoKTsK
KworICAgIHJldHVybiBudWxscHRyOworfQorCitPcHRpb25hbDxDb2RlTG9jYXRpb24+IE5hbWVD
b250ZXh0OjpnbG9iYWxFeGlzdHMoU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGlmIChhdXRv
KiB0eXBlID0gc2VhcmNoVHlwZXMobmFtZSkpCisgICAgICAgIHJldHVybiB0eXBlLT5jb2RlTG9j
YXRpb24oKTsKKyAgICBpZiAoYXV0byogZnVuY3Rpb24gPSBzZWFyY2hGdW5jdGlvbnMobmFtZSkp
CisgICAgICAgIHJldHVybiBmdW5jdGlvbi0+Y29kZUxvY2F0aW9uKCk7CisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiBOYW1lQ29udGV4dDo6
bG9jYWxFeGlzdHMoU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIHJldHVybiBtX3R5cGVzLmZp
bmQobmFtZSkgIT0gbV90eXBlcy5lbmQoKQotICAgICAgICB8fCBtX2Z1bmN0aW9ucy5maW5kKG5h
bWUpICE9IG1fZnVuY3Rpb25zLmVuZCgpCi0gICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmFt
ZSkgIT0gbV92YXJpYWJsZXMuZW5kKCk7CisgICAgQVNTRVJUKG1fcGFyZW50KTsKKyAgICBhdXRv
IGl0ZXIgPSBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpOworICAgIGlmIChpdGVyICE9IG1fdmFyaWFi
bGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKaW5kZXggYTA0ODc4YWU3
ZTlmMWQ4M2U1ZDU5MmMyZmQ3NTJiZWRjOTBmYTljYi4uMzg5Y2QwNTg3MWU4MmQ2NzE3YzNiNzk0
NDU4MDQ3NzcxNmEwZmQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaApAQCAtMjcsNiArMjcsOSBAQAogCiAjaWYg
RU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlICJXSExT
TE5hbWVTcGFjZS5oIgorCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTU0LDI1ICs1NywzNSBAQCBjbGFz
cyBOYW1lQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBh
cmVudCA9IG51bGxwdHIpOwogCi0gICAgYm9vbCBhZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpOwot
ICAgIGJvb2wgYWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpOwotICAgIGJvb2wgYWRkKEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uJik7Ci0gICAgYm9vbCBhZGQoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mKTsKLSAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
KTsKLSAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOwotICAgIGJvb2wg
YWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOwotCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogZ2V0VHlwZXMoY29uc3QgU3RyaW5nJik7
Ci0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldEN1cnJl
bnROYW1lU3BhY2UoQVNUOjpOYW1lU3BhY2UgY3VycmVudE5hbWVTcGFjZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9wYXJlbnQpOworICAgICAgICBtX2N1cnJlbnROYW1lU3BhY2UgPSBjdXJy
ZW50TmFtZVNwYWNlOworICAgIH0KKworICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBhZGQoQVNU
OjpUeXBlRGVmaW5pdGlvbiYpOworICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBhZGQoQVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGFkZChBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBhZGQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gYWRk
KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIEV4cGVjdGVkPHZvaWQsIEVy
cm9yPiBhZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBFeHBlY3RlZDx2b2lk
LCBFcnJvcj4gYWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOworCisgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiBnZXRUeXBlcyhjb25zdCBT
dHJpbmcmLCBBU1Q6Ok5hbWVTcGFjZSBmcm9tTmFtZXNwYWNlKTsKKyAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBnZXRGdW5jdGlv
bnMoY29uc3QgU3RyaW5nJiwgQVNUOjpOYW1lU3BhY2UgZnJvbU5hbWVzcGFjZSk7CiAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uKiBnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmKTsKIAogcHJp
dmF0ZToKLSAgICBib29sIGV4aXN0cyhTdHJpbmcmKTsKKyAgICBBU1Q6Ok5hbWVkVHlwZSogc2Vh
cmNoVHlwZXMoU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIHNlYXJjaEZ1bmN0aW9ucyhTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIE9wdGlvbmFsPENv
ZGVMb2NhdGlvbj4gZ2xvYmFsRXhpc3RzKFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uKiBsb2NhbEV4aXN0cyhTdHJpbmcmIG5hbWUpIGNvbnN0OwogCi0g
ICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFt
ZWRUeXBlPiwgMT4+IG1fdHlwZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+PiBtX2Z1bmN0aW9u
czsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpOYW1lZFR5cGU+LCAxPj4gbV90eXBlc1szXTsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+IG1f
ZnVuY3Rpb25zWzNdOwogICAgIEhhc2hNYXA8U3RyaW5nLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24qPiBtX3ZhcmlhYmxlczsKICAgICBOYW1lQ29udGV4dCogbV9wYXJlbnQ7CisgICAgQVNUOjpO
YW1lU3BhY2UgbV9jdXJyZW50TmFtZVNwYWNlIHsgQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGli
cmFyeSB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDY3YjFjOWI2ZDg2MDUyNDdm
YzEyYzRiMWU1M2YzMjk1YmZiOTQ0NzMuLjI3MWViZDEyNmEzMTA3ODliNGM4Y2Y3MGRmODQ1Nzlm
YTFmODI0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTU3LDYgKzU3LDcgQEAgTmFtZVJlc29s
dmVyOjpOYW1lUmVzb2x2ZXIoTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQogTmFtZVJlc29sdmVy
OjpOYW1lUmVzb2x2ZXIoTmFtZVJlc29sdmVyJiBwYXJlbnRSZXNvbHZlciwgTmFtZUNvbnRleHQm
IG5hbWVDb250ZXh0KQogICAgIDogbV9uYW1lQ29udGV4dChuYW1lQ29udGV4dCkKICAgICAsIG1f
cGFyZW50TmFtZVJlc29sdmVyKCZwYXJlbnRSZXNvbHZlcikKKyAgICAsIG1fY3VycmVudE5hbWVT
cGFjZShwYXJlbnRSZXNvbHZlci5tX2N1cnJlbnROYW1lU3BhY2UpCiB7CiB9CiAKQEAgLTgwLDE0
ICs4MSwxMCBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0
eXBlUmVmZXJlbmNlKQogICAgIGlmICh0eXBlUmVmZXJlbmNlLm1heWJlUmVzb2x2ZWRUeXBlKCkp
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYx
IFNob3VsZG4ndCB3ZSBrbm93IGJ5IG5vdyB3aGV0aGVyIHRoZSB0eXBlIGhhcyBiZWVuIHJlc29s
dmVkIG9yIG5vdD8KICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogY2FuZGlkYXRlcyA9IG1f
bmFtZUNvbnRleHQuZ2V0VHlwZXModHlwZVJlZmVyZW5jZS5uYW1lKCkpOwotICAgIGlmIChjYW5k
aWRhdGVzID09IG51bGxwdHIpIHsKLSAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCBmaW5k
IHR5cGUgcmVmZXJlbmNlLiIsIHR5cGVSZWZlcmVuY2UuY29kZUxvY2F0aW9uKCkpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6ICpjYW5kaWRhdGVz
KQorICAgIGF1dG8gY2FuZGlkYXRlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXModHlwZVJlZmVy
ZW5jZS5uYW1lKCksIG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgZm9yIChhdXRvJiBjYW5kaWRh
dGUgOiBjYW5kaWRhdGVzKQogICAgICAgICBWaXNpdG9yOjp2aXNpdChjYW5kaWRhdGUpOwotICAg
IGlmIChhdXRvIHJlc3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0
eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkpCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gcmVz
b2x2ZVR5cGVPdmVybG9hZEltcGwoY2FuZGlkYXRlcywgdHlwZVJlZmVyZW5jZS50eXBlQXJndW1l
bnRzKCkpKQogICAgICAgICB0eXBlUmVmZXJlbmNlLnNldFJlc29sdmVkVHlwZSgqcmVzdWx0KTsK
ICAgICBlbHNlIHsKICAgICAgICAgc2V0RXJyb3IoRXJyb3IoIkNhbm5vdCByZXNvbHZlIHR5cGUg
YXJndW1lbnRzLiIsIHR5cGVSZWZlcmVuY2UuY29kZUxvY2F0aW9uKCkpKTsKQEAgLTE5Miw5ICsx
ODksOSBAQCB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RF
eHByZXNzaW9uKQogICAgICAgICBhdXRvJiB2YXJpYWJsZVJlZmVyZW5jZSA9IGRvd25jYXN0PEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Npb24uYmFzZSgpKTsKICAgICAgICAgaWYg
KCFtX25hbWVDb250ZXh0LmdldFZhcmlhYmxlKHZhcmlhYmxlUmVmZXJlbmNlLm5hbWUoKSkpIHsK
ICAgICAgICAgICAgIGF1dG8gYmFzZU5hbWUgPSB2YXJpYWJsZVJlZmVyZW5jZS5uYW1lKCk7Ci0g
ICAgICAgICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRU
eXBlcyhiYXNlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBl
cy0+c2l6ZSgpID09IDEpOwotICAgICAgICAgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0g
KCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgICAgIGF1dG8gZW51bWVyYXRpb25UeXBl
cyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoYmFzZU5hbWUsIG1fY3VycmVudE5hbWVTcGFjZSk7
CisgICAgICAgICAgICBpZiAoZW51bWVyYXRpb25UeXBlcy5zaXplKCkgPT0gMSkgeworICAgICAg
ICAgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gZW51bWVyYXRpb25UeXBlc1swXTsKICAg
ICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpKSB7
CiAgICAgICAgICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJh
dGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlw
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWVtYmVyTmFtZSA9IGRvdEV4cHJlc3Npb24u
ZmllbGROYW1lKCk7CkBAIC0yMDYsNyArMjAzLDggQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0
KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICAgICAg
c2V0RXJyb3IoRXJyb3IoIk5vIGVudW0gbWVtYmVyIG1hdGNoZXMgdGhlIHVzZWQgbmFtZS4iLCBk
b3RFeHByZXNzaW9uLmNvZGVMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy5pc0VtcHR5KCkpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0yMTgsOSArMjE2LDEwIEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2
aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsCiAgICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9u
YW1lQ29udGV4dC5nZXRUeXBlcyhlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwubGVmdCgpKSkgewot
ICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+c2l6ZSgpID09IDEpOwotICAgICAgICBB
U1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRpb25UeXBlcylbMF07CisgICAgYXV0byBl
bnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhlbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwubGVmdCgpLCBtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGlmIChlbnVtZXJhdGlv
blR5cGVzLnNpemUoKSA9PSAxKSB7CisgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MzM1IFRoaXMgbmVlZHMgdG8gd29yayB3aXRoIHR5
cGVkZWYnZWQgZW51bXMuCisgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gZW51bWVyYXRp
b25UeXBlc1swXTsKICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih0
eXBlKSkgewogICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0
aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih0eXBl
KTsKICAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24u
bWVtYmVyQnlOYW1lKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5yaWdodCgpKSkgewpAQCAtMjI5
LDcgKzIyOCw3IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgCisKICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHJlc29sdmUg
ZW51bWVyYXRpb24gbWVtYmVyIGxpdGVyYWwuIiwgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmNv
ZGVMb2NhdGlvbigpKSk7CiB9CiAKQEAgLTI0NSwyMSArMjQ0LDI1IEBAIHZvaWQgTmFtZVJlc29s
dmVyOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpCiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9n
cmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKIHsKICAgICBmb3IgKGF1
dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkgeworICAgICAg
ICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudE5hbWVTcGFjZSh0eXBlRGVmaW5pdGlvbi5nZXQoKS5u
YW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQodHlw
ZURlZmluaXRpb24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAgICAg
ICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwogICAgIH0KICAgICBmb3IgKGF1
dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkp
IHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnROYW1lU3BhY2Uoc3RydWN0dXJlRGVm
aW5pdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vy
cm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CiAgICAgICAgIGlmIChuYW1lUmVzb2x2
ZXIuaGFzRXJyb3IoKSkKICAgICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2ZXIucmVzdWx0KCk7
CiAgICAgfQogICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5l
bnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJl
bnROYW1lU3BhY2UoZW51bWVyYXRpb25EZWZpbml0aW9uLmdldCgpLm5hbWVTcGFjZSgpKTsKICAg
ICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbkRlZmluaXRp
b24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwogICAgIH0KICAgICBmb3IgKGF1dG8mIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKSB7Cisg
ICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50TmFtZVNwYWNlKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9y
QW5kVmlzaXQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgaWYgKG5hbWVSZXNvbHZl
ci5oYXNFcnJvcigpKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5yZXN1bHQoKTsK
QEAgLTI3MCwxMSArMjczLDEzIEBAIEV4cGVjdGVkPHZvaWQsIEVycm9yPiByZXNvbHZlTmFtZXNJ
blR5cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlCiBFeHBlY3RlZDx2
b2lkLCBFcnJvcj4gcmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0s
IE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQogewogICAgIGZvciAoYXV0byYgZnVuY3Rpb25E
ZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFt
ZVJlc29sdmVyLnNldEN1cnJlbnROYW1lU3BhY2UoZnVuY3Rpb25EZWZpbml0aW9uLmdldCgpLm5h
bWVTcGFjZSgpKTsKICAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5j
dGlvbkRlZmluaXRpb24pOwogICAgICAgICBpZiAobmFtZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAg
ICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJlc3VsdCgpOwogICAgIH0KICAgICBmb3Ig
KGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnROYW1lU3Bh
Y2UobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5nZXQoKS5uYW1lU3BhY2UoKSk7CiAgICAgICAg
IG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bik7CiAgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKICAgICAgICAgICAgIHJl
dHVybiBuYW1lUmVzb2x2ZXIucmVzdWx0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAppbmRleCA2NThjMzVmY2Ri
NTcyZTI0ZDU4MjE3MWYxMWU4YzZhMmJhMDMyZTczLi5hNzkyNGUwNWZmNmFhMGFkZjY5YmQzYzY4
MjJhM2NiZWZkN2MzMTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKQEAgLTQ2LDYgKzQ2LDggQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB+TmFtZVJlc29sdmVyKCk7CiAKKyAgICB2b2lkIHNldEN1cnJlbnRO
YW1lU3BhY2UoQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlKSB7IG1fY3VycmVudE5hbWVTcGFjZSA9
IG5hbWVTcGFjZTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYpIG92ZXJyaWRlOwpAQCAtNjMsNiArNjUsNyBAQCBwcml2YXRlOgogICAgIE5h
bWVDb250ZXh0JiBtX25hbWVDb250ZXh0OwogICAgIEhhc2hTZXQ8QVNUOjpUeXBlUmVmZXJlbmNl
Kj4gbV90eXBlUmVmZXJlbmNlczsKICAgICBOYW1lUmVzb2x2ZXIqIG1fcGFyZW50TmFtZVJlc29s
dmVyIHsgbnVsbHB0ciB9OworICAgIEFTVDo6TmFtZVNwYWNlIG1fY3VycmVudE5hbWVTcGFjZSB7
IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkgfTsKIH07CiAKIEV4cGVjdGVkPHZvaWQs
IEVycm9yPiByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNw
cAppbmRleCAwMTYxMTRhNjEwZTExMDBlZmU2OTcyY2EyYTIzNTMyN2MxNTJlN2FiLi45ZjZmMGRh
NTdkNzFhNGUyN2JhMjdhZjNhYTYxZjkzOWU1OTQ1NjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJXSExTTEFkZHJlc3NTcGFjZS5oIgogI2luY2x1ZGUgIldITFNMRW50
cnlQb2ludFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKICNpbmNsdWRlIDx3dGYv
ZHRvYS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgpAQCAtNDEsMjcgKzQyLDI2IEBAIG5hbWVzcGFj
ZSBXSExTTCB7CiAjZGVmaW5lIFBBUlNFKG5hbWUsIGVsZW1lbnQsIC4uLikgXAogICAgIGF1dG8g
bmFtZSA9IHBhcnNlIyNlbGVtZW50KF9fVkFfQVJHU19fKTsgXAogICAgIGlmICghbmFtZSkgXAot
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsgXAorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsgXAogCiAjZGVmaW5lIENPTlNV
TUVfVFlQRShuYW1lLCB0eXBlKSBcCiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5cGUoVG9rZW46
OlR5cGU6OnR5cGUpOyBcCiAgICAgaWYgKCFuYW1lKSBcCi0gICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
bmFtZS5lcnJvcigpKTsKIAogI2RlZmluZSBQRUVLKG5hbWUpIFwKICAgICBhdXRvIG5hbWUgPSBw
ZWVrKCk7IFwKICAgICBpZiAoIW5hbWUpIFwKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KG5hbWUuZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChuYW1lLmVy
cm9yKCkpOwogCiAjZGVmaW5lIFBFRUtfRlVSVEhFUihuYW1lKSBcCiAgICAgYXV0byBuYW1lID0g
cGVla0Z1cnRoZXIoKTsgXAogICAgIGlmICghbmFtZSkgXAotICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KG5hbWUuZXJyb3IoKSk7CiAKLS8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk1NjgyIFJldHVybiBhIGJldHRlciBlcnJvciBjb2RlIGZyb20gdGhpcywg
YW5kIHJlcG9ydCBpdCB0byBKYXZhU2NyaXB0LgotYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0m
IHByb2dyYW0sIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgUGFyc2luZ01vZGUgbW9kZSkgLT4gRXhw
ZWN0ZWQ8dm9pZCwgRXJyb3I+CithdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwg
U3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQYXJzaW5nTW9kZSBtb2RlLCBBU1Q6Ok5hbWVTcGFjZSBu
YW1lU3BhY2UpIC0+IEV4cGVjdGVkPHZvaWQsIEVycm9yPgogewotICAgIG1fbGV4ZXIgPSBMZXhl
cihzdHJpbmdWaWV3KTsKKyAgICBtX2xleGVyID0gTGV4ZXIoc3RyaW5nVmlldywgbmFtZVNwYWNl
KTsKICAgICBtX21vZGUgPSBtb2RlOwogCiAgICAgd2hpbGUgKCFtX2xleGVyLmlzRnVsbHlDb25z
dW1lZCgpKSB7CkBAIC03NiwyNSArNzYsMzIgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0m
IHByb2dyYW0sIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgUGFyc2luZ01vZGUgbW9kZSkgLT4KICAg
ICAgICAgICAgIGF1dG8gdHlwZURlZmluaXRpb24gPSBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAg
ICAgICAgICAgICBpZiAoIXR5cGVEZWZpbml0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCh0eXBlRGVmaW5pdGlvbi5lcnJvcigpKTsKLSAgICAgICAgICAgIHByb2dy
YW0uYXBwZW5kKFdURk1vdmUoKnR5cGVEZWZpbml0aW9uKSk7CisgICAgICAgICAgICBhdXRvIGFw
cGVuZFJlc3VsdCA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnR5cGVEZWZpbml0aW9uKSk7Cisg
ICAgICAgICAgICBpZiAoIWFwcGVuZFJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoYXBwZW5kUmVzdWx0LmVycm9yKCkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U3RydWN0OiB7CiAgICAgICAg
ICAgICBhdXRvIHN0cnVjdHVyZURlZmluaXRpb24gPSBwYXJzZVN0cnVjdHVyZURlZmluaXRpb24o
KTsKICAgICAgICAgICAgIGlmICghc3RydWN0dXJlRGVmaW5pdGlvbikKICAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoc3RydWN0dXJlRGVmaW5pdGlvbi5lcnJvcigpKTsKLSAg
ICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnN0cnVjdHVyZURlZmluaXRpb24pKTsK
KyAgICAgICAgICAgIGF1dG8gYXBwZW5kUmVzdWx0ID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgq
c3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgaWYgKCFhcHBlbmRSZXN1bHQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFwcGVuZFJlc3VsdC5lcnJvcigp
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVG9rZW46
OlR5cGU6OkVudW06IHsKICAgICAgICAgICAgIGF1dG8gZW51bWVyYXRpb25EZWZpbml0aW9uID0g
cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKICAgICAgICAgICAgIGlmICghZW51bWVyYXRp
b25EZWZpbml0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlbnVt
ZXJhdGlvbkRlZmluaXRpb24uZXJyb3IoKSk7Ci0gICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKCplbnVtZXJhdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgIGF1dG8gYXBwZW5k
UmVzdWx0ID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZpbml0aW9uKSk7
CisgICAgICAgICAgICBpZiAoIWFwcGVuZFJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoYXBwZW5kUmVzdWx0LmVycm9yKCkpOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUb2tlbjo6VHlwZTo6TmF0aXZlOiB7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9tb2RlID09IFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpOwor
ICAgICAgICAgICAgaWYgKG1fbW9kZSAhPSBQYXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKG1ha2VTdHJpbmcoIiduYXRpdmUnIGNhbid0IGV4
aXN0IG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuIikpOwogICAgICAgICAgICAgYXV0
byBmdXJ0aGVyVG9rZW4gPSBwZWVrRnVydGhlcigpOwogICAgICAgICAgICAgaWYgKCFmdXJ0aGVy
VG9rZW4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTEwMiwyMCArMTA5LDI2IEBA
IGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1Zp
ZXcsIFBhcnNpbmdNb2RlIG1vZGUpIC0+CiAgICAgICAgICAgICAgICAgYXV0byBuYXRpdmVUeXBl
RGVjbGFyYXRpb24gPSBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpOwogICAgICAgICAgICAg
ICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQobmF0aXZlVHlwZURlY2xhcmF0aW9uLmVycm9yKCkpOwotICAgICAg
ICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbikp
OworICAgICAgICAgICAgICAgIGF1dG8gYXBwZW5kUmVzdWx0ID0gcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZSgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFhcHBl
bmRSZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChhcHBl
bmRSZXN1bHQuZXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gPSBwYXJzZU5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKICAgICAgICAgICAgIGlmICghbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5lcnJvcigpKTsKLSAgICAgICAgICAgIHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIGF1
dG8gYXBwZW5kUmVzdWx0ID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbikpOworICAgICAgICAgICAgaWYgKCFhcHBlbmRSZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFwcGVuZFJlc3VsdC5lcnJvcigpKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAg
ICAgIGF1dG8gZnVuY3Rpb25EZWZpbml0aW9uID0gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oKTsK
ICAgICAgICAgICAgIGlmICghZnVuY3Rpb25EZWZpbml0aW9uKQogICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChmdW5jdGlvbkRlZmluaXRpb24uZXJyb3IoKSk7Ci0gICAgICAg
ICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAg
ICAgICAgIGF1dG8gYXBwZW5kUmVzdWx0ID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqZnVuY3Rp
b25EZWZpbml0aW9uKSk7CisgICAgICAgICAgICBpZiAoIWFwcGVuZFJlc3VsdCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoYXBwZW5kUmVzdWx0LmVycm9yKCkpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTI4LDkgKzE0MSw5
IEBAIGF1dG8gUGFyc2VyOjpmYWlsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgVHJ5VG9QZWVrIHRy
eVRvUGVlaykgLT4gVW5leHBlY3RlZDxFcnJvCiB7CiAgICAgaWYgKHRyeVRvUGVlayA9PSBUcnlU
b1BlZWs6OlllcykgewogICAgICAgICBpZiAoYXV0byBuZXh0VG9rZW4gPSBwZWVrKCkpCi0gICAg
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJyb3IobV9sZXhlci5lcnJvclN0cmlu
ZygqbmV4dFRva2VuLCBtZXNzYWdlKSkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKEVycm9yKG1fbGV4ZXIuZXJyb3JTdHJpbmcoKm5leHRUb2tlbiwgbWVzc2FnZSkpKTsKICAg
ICB9Ci0gICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VTdHJpbmcoIkNhbm5v
dCBsZXg6ICIsIG1lc3NhZ2UpKSk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKG1h
a2VTdHJpbmcoIkNhbm5vdCBsZXg6ICIsIG1lc3NhZ2UpKSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpw
ZWVrKCkgLT4gRXhwZWN0ZWQ8VG9rZW4sIEVycm9yPgpAQCAtMzA2LDIxICszMTksMjEgQEAgYXV0
byBQYXJzZXI6OmNvbnN1bWVJbnRlZ3JhbExpdGVyYWwoKSAtPiBFeHBlY3RlZDxWYXJpYW50PGlu
dCwgdW5zaWduZWQ+LCBFcnJvcj4KIHsKICAgICBhdXRvIGludGVncmFsTGl0ZXJhbFRva2VuID0g
Y29uc3VtZVR5cGVzPFRva2VuOjpUeXBlOjpJbnRMaXRlcmFsLCBUb2tlbjo6VHlwZTo6VWludExp
dGVyYWw+KCk7CiAgICAgaWYgKCFpbnRlZ3JhbExpdGVyYWxUb2tlbikKLSAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KGludGVncmFsTGl0ZXJhbFRva2VuLmVycm9yKCkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoaW50ZWdyYWxMaXRlcmFsVG9rZW4uZXJyb3IoKSk7CiAK
ICAgICBzd2l0Y2ggKGludGVncmFsTGl0ZXJhbFRva2VuLT50eXBlKSB7CiAgICAgY2FzZSBUb2tl
bjo6VHlwZTo6SW50TGl0ZXJhbDogewogICAgICAgICBhdXRvIHJlc3VsdCA9IGludExpdGVyYWxU
b0ludChpbnRlZ3JhbExpdGVyYWxUb2tlbi0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAg
IGlmIChyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4ge3sgKnJlc3VsdCB9fTsKLSAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKHJlc3VsdC5lcnJvcigpKTsKICAgICB9CiAgICAgZGVmYXVsdDogewog
ICAgICAgICBBU1NFUlQoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnR5cGUgPT0gVG9rZW46OlR5cGU6
OlVpbnRMaXRlcmFsKTsKICAgICAgICAgYXV0byByZXN1bHQgPSB1aW50TGl0ZXJhbFRvVWludChp
bnRlZ3JhbExpdGVyYWxUb2tlbi0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmIChy
ZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4ge3sgKnJlc3VsdCB9fTsKLSAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKHJlc3VsdC5lcnJvcigpKTsKICAgICB9CiAgICAgfQogfQpAQCAtMzI5LDcgKzM0
Miw3IEBAIGF1dG8gUGFyc2VyOjpjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbExpdGVyYWwoKSAt
PiBFeHBlY3RlZDx1bnNpZ25lZCwgRXJyb3I+CiB7CiAgICAgYXV0byBpbnRlZ3JhbExpdGVyYWwg
PSBjb25zdW1lSW50ZWdyYWxMaXRlcmFsKCk7CiAgICAgaWYgKCFpbnRlZ3JhbExpdGVyYWwpCi0g
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihpbnRlZ3JhbExpdGVyYWwuZXJyb3IoKSk7
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChpbnRlZ3JhbExpdGVyYWwuZXJyb3IoKSk7
CiAgICAgYXV0byByZXN1bHQgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oaW50IHgp
IC0+IE9wdGlvbmFsPHVuc2lnbmVkPiB7CiAgICAgICAgIGlmICh4IDwgMCkKICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0zNjksMjUgKzM4MiwyNSBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VDb25zdGFudEV4cHJlc3Npb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkNvbnN0YW50RXhwcmVz
c2lvbiwgRXJybwogICAgICAgICBUb2tlbjo6VHlwZTo6RmFsc2UsCiAgICAgICAgIFRva2VuOjpU
eXBlOjpJZGVudGlmaWVyPigpOwogICAgIGlmICghdHlwZSkKLSAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCh0eXBlLmVycm9yKCkpOwogCiAgICAgc3dpdGNoICh0eXBlLT50eXBlKSB7CiAgICAgY2FzZSBU
b2tlbjo6VHlwZTo6SW50TGl0ZXJhbDogewogICAgICAgICBhdXRvIHZhbHVlID0gaW50TGl0ZXJh
bFRvSW50KHR5cGUtPnN0cmluZ1ZpZXcobV9sZXhlcikpOwogICAgICAgICBpZiAoIXZhbHVlKQot
ICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHZhbHVlLmVycm9yKCkpOwogICAgICAgICBy
ZXR1cm4ge3sgQVNUOjpJbnRlZ2VyTGl0ZXJhbCh7ICp0eXBlIH0sICp2YWx1ZSkgfX07CiAgICAg
fQogICAgIGNhc2UgVG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsOiB7CiAgICAgICAgIGF1dG8gdmFs
dWUgPSB1aW50TGl0ZXJhbFRvVWludCh0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAg
ICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1
ZS5lcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh2YWx1ZS5lcnJv
cigpKTsKICAgICAgICAgcmV0dXJuIHt7IEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCh7ICp0
eXBlIH0sICp2YWx1ZSkgfX07CiAgICAgfQogICAgIGNhc2UgVG9rZW46OlR5cGU6OkZsb2F0TGl0
ZXJhbDogewogICAgICAgICBhdXRvIHZhbHVlID0gZmxvYXRMaXRlcmFsVG9GbG9hdCh0eXBlLT5z
dHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCh2YWx1ZS5lcnJvcigpKTsKICAgICAgICAgcmV0dXJuIHt7IEFTVDo6
RmxvYXRMaXRlcmFsKHsgKnR5cGUgfSwgKnZhbHVlKSB9fTsKICAgICB9CiAgICAgY2FzZSBUb2tl
bjo6VHlwZTo6TnVsbDoKQEAgLTQ1MiwxMSArNDY1LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5
cGVTdWZmaXhBYmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwg
RXJyCiAgICAgICAgIFRva2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0UGFpciwKICAgICAgICAgVG9r
ZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0PigpOwogICAgIGlmICghdG9rZW4pCi0gICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0b2tlbi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKHRva2VuLmVycm9yKCkpOwogICAgIGlmICh0b2tlbi0+dHlwZSA9PSBU
b2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQpIHsKICAgICAgICAgYXV0byBudW1FbGVtZW50
cyA9IGNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTGl0ZXJhbCgpOwogICAgICAgICBpZiAoIW51
bUVsZW1lbnRzKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG51bUVsZW1l
bnRzLmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG51bUVsZW1l
bnRzLmVycm9yKCkpOwogICAgICAgICBDT05TVU1FX1RZUEUocmlnaHRTcXVhcmVCcmFja2V0LCBS
aWdodFNxdWFyZUJyYWNrZXQpOwogICAgICAgICByZXR1cm4ge3sgeyAqdG9rZW4sICpyaWdodFNx
dWFyZUJyYWNrZXQgfSwgKnRva2VuLCAqbnVtRWxlbWVudHMgfX07CiAgICAgfQpAQCAtNDcwLDEx
ICs0ODMsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCkg
LT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGUKICAgICAgICAgVG9rZW46OlR5cGU6
OlNxdWFyZUJyYWNrZXRQYWlyLAogICAgICAgICBUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNr
ZXQ+KCk7CiAgICAgaWYgKCF0b2tlbikKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KHRva2VuLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodG9rZW4uZXJy
b3IoKSk7CiAgICAgaWYgKHRva2VuLT50eXBlID09IFRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJh
Y2tldCkgewogICAgICAgICBhdXRvIG51bUVsZW1lbnRzID0gY29uc3VtZU5vbk5lZ2F0aXZlSW50
ZWdyYWxMaXRlcmFsKCk7CiAgICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obnVtRWxlbWVudHMuZXJyb3IoKSk7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobnVtRWxlbWVudHMuZXJyb3IoKSk7CiAgICAgICAgIENP
TlNVTUVfVFlQRShyaWdodFNxdWFyZUJyYWNrZXQsIFJpZ2h0U3F1YXJlQnJhY2tldCk7CiAgICAg
ICAgIHJldHVybiB7eyB7ICp0b2tlbiwgKnJpZ2h0U3F1YXJlQnJhY2tldCB9LCAqdG9rZW4sIFdU
Rjo6bnVsbG9wdCwgKm51bUVsZW1lbnRzIH19OwogICAgIH0KQEAgLTQ4NCw3ICs0OTcsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKSAtPiBFeHBlY3RlZDxU
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZQogICAgICAgICBUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAs
CiAgICAgICAgIFRva2VuOjpUeXBlOjpUaHJlYWQ+KCk7CiAgICAgaWYgKCFhZGRyZXNzU3BhY2VU
b2tlbikKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZVRva2Vu
LmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoYWRkcmVzc1NwYWNlVG9r
ZW4uZXJyb3IoKSk7CiAgICAgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlOwogICAgIHN3
aXRjaCAoYWRkcmVzc1NwYWNlVG9rZW4tPnR5cGUpIHsKICAgICBjYXNlIFRva2VuOjpUeXBlOjpD
b25zdGFudDoKQEAgLTYxOSw3ICs2MzIsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VCdWlsdEluU2Vt
YW50aWMoKSAtPiBFeHBlY3RlZDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYywgRXJyb3I+CiAgICAgICAg
IFRva2VuOjpUeXBlOjpTVkdyb3VwSW5kZXgsCiAgICAgICAgIFRva2VuOjpUeXBlOjpTVkdyb3Vw
VGhyZWFkSUQ+KCk7CiAgICAgaWYgKCFvcmlnaW4pCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChv
cmlnaW4uZXJyb3IoKSk7CiAKICAgICBzd2l0Y2ggKG9yaWdpbi0+dHlwZSkgewogICAgIGNhc2Ug
VG9rZW46OlR5cGU6OlNWSW5zdGFuY2VJRDoKQEAgLTYzOSw3ICs2NTIsNyBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VCdWlsdEluU2VtYW50aWMoKSAtPiBFeHBlY3RlZDxBU1Q6OkJ1aWx0SW5TZW1hbnRp
YywgRXJyb3I+CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6U1ZUYXJnZXQ6IHsKICAgICAgICAgYXV0
byB0YXJnZXQgPSBjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbExpdGVyYWwoKTsgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU4MDcgTWFrZSB0aGlz
IHdvcmsgd2l0aCBzdHJpbmdzIGxpa2UgIlNWX1RhcmdldDAiLgogICAgICAgICBpZiAoIXRhcmdl
dCkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0YXJnZXQuZXJyb3IoKSk7
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodGFyZ2V0LmVycm9yKCkpOwogICAg
ICAgICByZXR1cm4gQVNUOjpCdWlsdEluU2VtYW50aWMoeyAqb3JpZ2luIH0sIEFTVDo6QnVpbHRJ
blNlbWFudGljOjpWYXJpYWJsZTo6U1ZUYXJnZXQsICp0YXJnZXQpOwogICAgIH0KICAgICBjYXNl
IFRva2VuOjpUeXBlOjpTVkRlcHRoOgpAQCAtNjY5LDcgKzY4Miw3IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZVJlc291cmNlU2VtYW50aWMoKSAtPiBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2VtYW50aWMs
IEVycm9yPgogICAgICAgICAmJiBpbmZvU3RyaW5nVmlld1swXSAhPSAndCcKICAgICAgICAgJiYg
aW5mb1N0cmluZ1ZpZXdbMF0gIT0gJ2InCiAgICAgICAgICYmIGluZm9TdHJpbmdWaWV3WzBdICE9
ICdzJykpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihtYWtlU3RyaW5n
KGluZm9TdHJpbmdWaWV3LnN1YnN0cmluZygwLCAxKSwgIiBpcyBub3QgYSBrbm93biByZXNvdXJj
ZSB0eXBlICgndScsICd0JywgJ2InLCBvciAncycpIikpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEVycm9yKG1ha2VTdHJpbmcoaW5mb1N0cmluZ1ZpZXcuc3Vic3RyaW5nKDAsIDEp
LCAiIGlzIG5vdCBhIGtub3duIHJlc291cmNlIHR5cGUgKCd1JywgJ3QnLCAnYicsIG9yICdzJyki
KSkpOwogCiAgICAgQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlIG1vZGU7CiAgICAgc3dpdGNo
IChpbmZvU3RyaW5nVmlld1swXSkgewpAQCAtNjg5LDcgKzcwMiw3IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZVJlc291cmNlU2VtYW50aWMoKSAtPiBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2VtYW50aWMs
IEVycm9yPgogCiAgICAgYXV0byBpbmRleCA9IHJlY29nbml6ZVNpbXBsZVVuc2lnbmVkSW50ZWdl
cihpbmZvU3RyaW5nVmlldy5zdWJzdHJpbmcoMSkpOwogICAgIGlmICghaW5kZXgpCi0gICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihpbmRleC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGluZGV4LmVycm9yKCkpOwogCiAgICAgdW5zaWduZWQgc3BhY2UgPSAw
OwogICAgIGlmICh0cnlUeXBlKFRva2VuOjpUeXBlOjpDb21tYSkpIHsKQEAgLTY5NywxMiArNzEw
LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVJlc291cmNlU2VtYW50aWMoKSAtPiBFeHBlY3RlZDxB
U1Q6OlJlc291cmNlU2VtYW50aWMsIEVycm9yPgogICAgICAgICBhdXRvIHNwYWNlVG9rZW5TdHJp
bmdWaWV3ID0gc3BhY2VUb2tlbi0+c3RyaW5nVmlldyhtX2xleGVyKTsKICAgICAgICAgU3RyaW5n
VmlldyBwcmVmaXggeyAic3BhY2UiIH07CiAgICAgICAgIGlmICghc3BhY2VUb2tlblN0cmluZ1Zp
ZXcuc3RhcnRzV2l0aChwcmVmaXgpKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KEVycm9yKG1ha2VTdHJpbmcoIlNlY29uZCBhcmd1bWVudCB0byByZXNvdXJjZSBzZW1hbnRp
YyAiLCBzcGFjZVRva2VuU3RyaW5nVmlldywgIiBuZWVkcyBiZSBvZiB0aGUgZm9ybSAnc3BhY2Uw
JyIpKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmlu
ZygiU2Vjb25kIGFyZ3VtZW50IHRvIHJlc291cmNlIHNlbWFudGljICIsIHNwYWNlVG9rZW5TdHJp
bmdWaWV3LCAiIG5lZWRzIGJlIG9mIHRoZSBmb3JtICdzcGFjZTAnIikpKTsKICAgICAgICAgaWYg
KHNwYWNlVG9rZW5TdHJpbmdWaWV3Lmxlbmd0aCgpIDw9IHByZWZpeC5sZW5ndGgoKSkKLSAgICAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihtYWtlU3RyaW5nKCJTZWNvbmQg
YXJndW1lbnQgdG8gcmVzb3VyY2Ugc2VtYW50aWMgIiwgc3BhY2VUb2tlblN0cmluZ1ZpZXcsICIg
bmVlZHMgYmUgb2YgdGhlIGZvcm0gJ3NwYWNlMCciKSkpOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKEVycm9yKG1ha2VTdHJpbmcoIlNlY29uZCBhcmd1bWVudCB0byByZXNvdXJj
ZSBzZW1hbnRpYyAiLCBzcGFjZVRva2VuU3RyaW5nVmlldywgIiBuZWVkcyBiZSBvZiB0aGUgZm9y
bSAnc3BhY2UwJyIpKSk7CiAgICAgICAgIGF1dG8gc3BhY2VWYWx1ZSA9IHJlY29nbml6ZVNpbXBs
ZVVuc2lnbmVkSW50ZWdlcihzcGFjZVRva2VuU3RyaW5nVmlldy5zdWJzdHJpbmcocHJlZml4Lmxl
bmd0aCgpKSk7CiAgICAgICAgIGlmICghc3BhY2VWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihzcGFjZVZhbHVlLmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKHNwYWNlVmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHNwYWNlID0gKnNw
YWNlVmFsdWU7CiAgICAgfQogCkBAIC03MjQsNyArNzM3LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNl
U3RhZ2VJbk91dFNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpTdGFnZUluT3V0U2VtYW50aWMs
IEVycm8KIAogICAgIGF1dG8gaW5kZXggPSBjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbExpdGVy
YWwoKTsKICAgICBpZiAoIWluZGV4KQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
aW5kZXguZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChpbmRleC5lcnJv
cigpKTsKIAogICAgIENPTlNVTUVfVFlQRShyaWdodFBhcmVudGhlc2lzLCBSaWdodFBhcmVudGhl
c2lzKTsKIApAQCAtODIxLDcgKzgzNCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9u
RGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uCiAgICAg
ICAgIHJldHVybiB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6Y3JlYXRlKCpvcmlnaW4sICJpbnQiX3N0
ciwgQVNUOjpUeXBlQXJndW1lbnRzKCkpIH07CiAgICAgfSkoKTsKICAgICBpZiAoIXR5cGUpCi0g
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQodHlwZS5lcnJvcigpKTsKIAogICAgIENPTlNVTUVfVFlQRShs
ZWZ0Q3VybHlCcmFja2V0LCBMZWZ0Q3VybHlCcmFja2V0KTsKIApAQCAtODY4LDcgKzg4MSw3IEBA
IGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uTWVtYmVyKGludDY0X3QgZGVmYXVsdFZhbHVl
KSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lCiAgICAgICAgIH0pKTsKIAogICAgICAgICBpZiAoIXZh
bHVlKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KCJlbnVtIGluaXRpYWxp
emF0aW9uIHZhbHVlcyBjYW4gb25seSBiZSBhbiBpbnQgb3IgdWludCBjb25zdGFudC4iKTsKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcigiZW51bSBpbml0aWFsaXphdGlv
biB2YWx1ZXMgY2FuIG9ubHkgYmUgYW4gaW50IG9yIHVpbnQgY29uc3RhbnQuIikpOwogICAgICAg
ICByZXR1cm4gQVNUOjpFbnVtZXJhdGlvbk1lbWJlcigqaWRlbnRpZmllciwgV1RGTW92ZShuYW1l
KSwgKnZhbHVlKTsKICAgICB9CiAgICAgcmV0dXJuIEFTVDo6RW51bWVyYXRpb25NZW1iZXIoKmlk
ZW50aWZpZXIsIFdURk1vdmUobmFtZSksIGRlZmF1bHRWYWx1ZSk7CkBAIC04OTIsMTkgKzkwNSwx
OSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUoKSAtPiBF
eHBlY3RlZDxBU1Q6Ok51bVRocmVhZHNGdW5jdAogCiAgICAgYXV0byB3aWR0aCA9IGNvbnN1bWVO
b25OZWdhdGl2ZUludGVncmFsTGl0ZXJhbCgpOwogICAgIGlmICghd2lkdGgpCi0gICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPih3aWR0aC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKHdpZHRoLmVycm9yKCkpOwogCiAgICAgQ09OU1VNRV9UWVBFKGNvbW1hLCBD
b21tYSk7CiAKICAgICBhdXRvIGhlaWdodCA9IGNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTGl0
ZXJhbCgpOwogICAgIGlmICghaGVpZ2h0KQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oaGVpZ2h0LmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoaGVpZ2h0
LmVycm9yKCkpOwogCiAgICAgQ09OU1VNRV9UWVBFKHNlY29uZENvbW1hLCBDb21tYSk7CiAKICAg
ICBhdXRvIGRlcHRoID0gY29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFsKCk7CiAgICAg
aWYgKCFkZXB0aCkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGRlcHRoLmVycm9y
KCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZGVwdGguZXJyb3IoKSk7CiAKICAg
ICBDT05TVU1FX1RZUEUocmlnaHRQYXJlbnRoZXNpcywgUmlnaHRQYXJlbnRoZXNpcyk7CiAKQEAg
LTk0MCw3ICs5NTMsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3Rl
ZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPgogCiAgICAgYXV0byBlbmRPZmZzZXQg
PSBtX2xleGVyLnBlZWsoKS5zdGFydE9mZnNldCgpOwogCi0gICAgcmV0dXJuIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbih7IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgfSwgV1RGTW92ZShxdWFsaWZp
ZXJzKSwgeyBXVEZNb3ZlKCp0eXBlKSB9LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRp
YyksIG51bGxwdHIpOworICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oeyBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0LCBtX2xleGVyLm5hbWVTcGFjZSgpIH0sIFdURk1vdmUocXVhbGlm
aWVycyksIHsgV1RGTW92ZSgqdHlwZSkgfSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSgqc2VtYW50
aWMpLCBudWxscHRyKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVycygpIC0+IEV4
cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPgpAQCAtOTg2LDE0ICs5OTks
MTQgQEAgYXV0byBQYXJzZXI6OnBhcnNlQ29tcHV0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBF
eHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXQKICAgICBhdXRvIGVuZE9mZnNldCA9IG1fbGV4
ZXIucGVlaygpLnN0YXJ0T2Zmc2V0KCk7CiAKICAgICBib29sIGlzT3BlcmF0b3IgPSBmYWxzZTsK
LSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKHsgb3JpZ2luLT5zdGFydE9mZnNl
dCgpLCBlbmRPZmZzZXQgfSwgV1RGTW92ZSgqYXR0cmlidXRlQmxvY2spLCBBU1Q6OkVudHJ5UG9p
bnRUeXBlOjpDb21wdXRlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVy
KS50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBp
c09wZXJhdG9yLCBtX21vZGUpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
eyBvcmlnaW4tPnN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCwgbV9sZXhlci5uYW1lU3BhY2UoKSB9
LCBXVEZNb3ZlKCphdHRyaWJ1dGVCbG9jayksIEFTVDo6RW50cnlQb2ludFR5cGU6OkNvbXB1dGUs
IFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdU
Rk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IsIG1fbW9k
ZSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVZlcnRleE9yRnJhZ21lbnRGdW5jdGlvbkRlY2xh
cmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4KIHsK
ICAgICBhdXRvIGVudHJ5UG9pbnQgPSBjb25zdW1lVHlwZXM8VG9rZW46OlR5cGU6OlZlcnRleCwg
VG9rZW46OlR5cGU6OkZyYWdtZW50PigpOwogICAgIGlmICghZW50cnlQb2ludCkKLSAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGVudHJ5UG9pbnQuZXJyb3IoKSk7CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlbnRyeVBvaW50LmVycm9yKCkpOwogICAgIGF1dG8gZW50cnlQ
b2ludFR5cGUgPSAoZW50cnlQb2ludC0+dHlwZSA9PSBUb2tlbjo6VHlwZTo6VmVydGV4KSA/IEFT
VDo6RW50cnlQb2ludFR5cGU6OlZlcnRleCA6IEFTVDo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50
OwogCiAgICAgUEFSU0UodHlwZSwgVHlwZSk7CkBAIC0xMDA0LDcgKzEwMTcsNyBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VWZXJ0ZXhPckZyYWdtZW50RnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVj
dGVkPEFTVDo6RnVuY3RpbwogICAgIGF1dG8gZW5kT2Zmc2V0ID0gbV9sZXhlci5wZWVrKCkuc3Rh
cnRPZmZzZXQoKTsKIAogICAgIGJvb2wgaXNPcGVyYXRvciA9IGZhbHNlOwotICAgIHJldHVybiBB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oeyBlbnRyeVBvaW50LT5zdGFydE9mZnNldCgpLCBlbmRP
ZmZzZXQgfSwgeyB9LCBlbnRyeVBvaW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmlu
Z1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUo
KnNlbWFudGljKSwgaXNPcGVyYXRvciwgbV9tb2RlKTsKKyAgICByZXR1cm4gQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKHsgZW50cnlQb2ludC0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0LCBtX2xl
eGVyLm5hbWVTcGFjZSgpIH0sIHsgfSwgZW50cnlQb2ludFR5cGUsIFdURk1vdmUoKnR5cGUpLCBu
YW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMp
LCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IsIG1fbW9kZSk7CiB9CiAKIGF1dG8gUGFy
c2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4KQEAgLTEwMTUsNyArMTAyOCw3IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0CiAKICAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZXM8VG9rZW46OlR5
cGU6OklkZW50aWZpZXIsIFRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWU+KCk7CiAgICAgaWYgKCFu
YW1lKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG5hbWUuZXJyb3IoKSk7CiAgICAgYXV0byBpc09w
ZXJhdG9yID0gbmFtZS0+dHlwZSA9PSBUb2tlbjo6VHlwZTo6T3BlcmF0b3JOYW1lOwogCiAgICAg
UEFSU0UocGFyYW1ldGVycywgUGFyYW1ldGVycyk7CkBAIC0xMDIzLDcgKzEwMzYsNyBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFT
VDo6RnVuY3Rpb25EZWNsYXJhdAogCiAgICAgYXV0byBlbmRPZmZzZXQgPSBtX2xleGVyLnBlZWso
KS5zdGFydE9mZnNldCgpOwogCi0gICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbih7
IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0IH0sIHsgfSwgV1RGOjpudWxsb3B0LCBX
VEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZN
b3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJhdG9yLCBtX21vZGUp
OworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oeyBvcmlnaW4tPnN0YXJ0T2Zm
c2V0KCksIGVuZE9mZnNldCwgbV9sZXhlci5uYW1lU3BhY2UoKSB9LCB7IH0sIFdURjo6bnVsbG9w
dCwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwg
V1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvciwgbV9t
b2RlKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9u
KCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4KQEAgLTEwMzYs
NyArMTA0OSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlv
bigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhCiAgICAgYXV0byBlbmRPZmZzZXQg
PSBtX2xleGVyLnBlZWsoKS5zdGFydE9mZnNldCgpOwogCiAgICAgYm9vbCBpc09wZXJhdG9yID0g
dHJ1ZTsKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKHsgb3JpZ2luLT5zdGFy
dE9mZnNldCgpLCBlbmRPZmZzZXQgfSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUp
LCAib3BlcmF0b3IgY2FzdCJfc3RyLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2Vt
YW50aWMpLCBpc09wZXJhdG9yLCBtX21vZGUpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24oeyBvcmlnaW4tPnN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCwgbV9sZXhlci5uYW1l
U3BhY2UoKSB9LCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksICJvcGVyYXRvciBj
YXN0Il9zdHIsIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3Bl
cmF0b3IsIG1fbW9kZSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRp
b24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPgpAQCAtMTA4
NSw3ICsxMDk4LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlQmxvY2tCb2R5KCkgLT4gRXhwZWN0ZWQ8
QVNUOjpCbG9jaywgRXJyb3I+CiAKICAgICBhdXRvIGVuZE9mZnNldCA9IG1fbGV4ZXIucGVlaygp
LnN0YXJ0T2Zmc2V0KCk7CiAKLSAgICByZXR1cm4gQVNUOjpCbG9jayh7IHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXR9LCBXVEZNb3ZlKHN0YXRlbWVudHMpKTsKKyAgICByZXR1cm4gQVNUOjpCbG9jayh7
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIG1fbGV4ZXIubmFtZVNwYWNlKCkgfSwgV1RGTW92ZShz
dGF0ZW1lbnRzKSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUlmU3RhdGVtZW50KCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpJZlN0YXRlbWVudCwgRXJyb3I+CkBAIC0xMTA3LDcgKzExMjAsNyBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VJZlN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPEFTVDo6SWZTdGF0ZW1lbnQs
IEVycm9yPgogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2FzdEFyZ3Vt
ZW50czsKICAgICBjYXN0QXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpjb25kaXRpb25hbCkpOwog
ICAgIGF1dG8gYm9vbENhc3QgPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KFRv
a2VuKCpvcmlnaW4pLCAiYm9vbCJfc3RyLCBXVEZNb3ZlKGNhc3RBcmd1bWVudHMpKTsKLSAgICBy
ZXR1cm4gQVNUOjpJZlN0YXRlbWVudCh7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0
IH0sIFdURk1vdmUoYm9vbENhc3QpLCBXVEZNb3ZlKCpib2R5KSwgV1RGTW92ZShlbHNlQm9keSkp
OworICAgIHJldHVybiBBU1Q6OklmU3RhdGVtZW50KHsgb3JpZ2luLT5zdGFydE9mZnNldCgpLCBl
bmRPZmZzZXQsIG1fbGV4ZXIubmFtZVNwYWNlKCkgfSwgV1RGTW92ZShib29sQ2FzdCksIFdURk1v
dmUoKmJvZHkpLCBXVEZNb3ZlKGVsc2VCb2R5KSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVN3
aXRjaFN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPEFTVDo6U3dpdGNoU3RhdGVtZW50LCBFcnJvcj4K
QEAgLTExMzYsNyArMTE0OSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVN3aXRjaENhc2UoKSAtPiBF
eHBlY3RlZDxBU1Q6OlN3aXRjaENhc2UsIEVycm9yPgogewogICAgIGF1dG8gb3JpZ2luID0gY29u
c3VtZVR5cGVzPFRva2VuOjpUeXBlOjpDYXNlLCBUb2tlbjo6VHlwZTo6RGVmYXVsdD4oKTsKICAg
ICBpZiAoIW9yaWdpbikKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5l
cnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG9yaWdpbi5lcnJvcigpKTsK
IAogICAgIHN3aXRjaCAob3JpZ2luLT50eXBlKSB7CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6Q2Fz
ZTogewpAQCAtMTE3MSw3ICsxMTg0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRm9yTG9vcCgpIC0+
IEV4cGVjdGVkPEFTVDo6Rm9yTG9vcCwgRXJyb3I+CiAgICAgICAgICAgICBpZiAoYXV0byBleHBy
ZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCkpCiAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0g
KCpleHByZXNzaW9uKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXhwcmVzc2lvbi5lcnJvcigp
KTsKICAgICAgICAgICAgIENPTlNVTUVfVFlQRShzZWNvbmRTZW1pY29sb24sIFNlbWljb2xvbik7
CiAgICAgICAgIH0KIApAQCAtMTE4MCwxMiArMTE5MywxMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VG
b3JMb29wKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGb3JMb29wLCBFcnJvcj4KICAgICAgICAgICAgIGlm
IChhdXRvIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKSkKICAgICAgICAgICAgICAgICBp
bmNyZW1lbnQgPSAoKmV4cHJlc3Npb24pLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihleHByZXNzaW9u
LmVycm9yKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChleHByZXNz
aW9uLmVycm9yKCkpOwogICAgICAgICAgICAgQ09OU1VNRV9UWVBFKHJpZ2h0UGFyZW50aGVzaXMs
IFJpZ2h0UGFyZW50aGVzaXMpOwogICAgICAgICB9CiAKICAgICAgICAgUEFSU0UoYm9keSwgU3Rh
dGVtZW50KTsKLSAgICAgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKG9yaWdpbi0+Y29kZUxvY2F0
aW9uLCAgKCpib2R5KS0+Y29kZUxvY2F0aW9uKCkpOworICAgICAgICBDb2RlTG9jYXRpb24gbG9j
YXRpb24ob3JpZ2luLT5jb2RlTG9jYXRpb24sICgqYm9keSktPmNvZGVMb2NhdGlvbigpKTsKICAg
ICAgICAgcmV0dXJuIEFTVDo6Rm9yTG9vcChsb2NhdGlvbiwgV1RGTW92ZShpbml0aWFsaXphdGlv
biksIFdURk1vdmUoY29uZGl0aW9uKSwgV1RGTW92ZShpbmNyZW1lbnQpLCBXVEZNb3ZlKCpib2R5
KSk7CiAgICAgfTsKIApAQCAtMTI0Myw3ICsxMjU2LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmFy
aWFibGVEZWNsYXJhdGlvbihSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlKSAtPiBFeHBlY3Rl
ZDwKICAgICB9CiAKICAgICBhdXRvIGVuZE9mZnNldCA9IG1fbGV4ZXIucGVlaygpLnN0YXJ0T2Zm
c2V0KCk7Ci0gICAgcmV0dXJuIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbih7IG9yaWdpbi0+c3Rh
cnRPZmZzZXQoKSwgZW5kT2Zmc2V0IH0sIFdURk1vdmUocXVhbGlmaWVycyksIHsgV1RGTW92ZSh0
eXBlKSB9LCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnNl
bWFudGljKSwgV1RGTW92ZShpbml0aWFsaXplcikpOworICAgIHJldHVybiBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24oeyBvcmlnaW4tPnN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCwgbV9sZXhlci5u
YW1lU3BhY2UoKSB9LCBXVEZNb3ZlKHF1YWxpZmllcnMpLCB7IFdURk1vdmUodHlwZSkgfSwgbmFt
ZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIFdU
Rk1vdmUoaW5pdGlhbGl6ZXIpKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNs
YXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
LCBFcnJvcj4KQEAgLTEyNTQsNyArMTI2Nyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxl
RGVjbGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAK
ICAgICBhdXRvIGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJh
dGlvbih0eXBlLT5jb3B5UmVmKCkpOwogICAgIGlmICghZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9u
KQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZmlyc3RWYXJpYWJsZURlY2xhcmF0
aW9uLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZmlyc3RWYXJpYWJs
ZURlY2xhcmF0aW9uLmVycm9yKCkpOwogCiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+PiByZXN1bHQ7CiAgICAgcmVzdWx0LmFwcGVuZChtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqZmlyc3RWYXJpYWJsZURlY2xhcmF0
aW9uKSkpOwpAQCAtMTI2MiwxMiArMTI3NSwxMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdAog
ICAgIHdoaWxlICh0cnlUeXBlKFRva2VuOjpUeXBlOjpDb21tYSkpIHsKICAgICAgICAgYXV0byB2
YXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHR5cGUtPmNvcHlS
ZWYoKSk7CiAgICAgICAgIGlmICghdmFyaWFibGVEZWNsYXJhdGlvbikKLSAgICAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPih2YXJpYWJsZURlY2xhcmF0aW9uLmVycm9yKCkpOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3Io
KSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KFdURk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb24pKSk7CiAgICAgfQogCiAgICAg
YXV0byBlbmRPZmZzZXQgPSBtX2xleGVyLnBlZWsoKS5zdGFydE9mZnNldCgpOwotICAgIHJldHVy
biBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KHsgb3JpZ2luLT5zdGFydE9mZnNl
dCgpLCBlbmRPZmZzZXQgfSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICByZXR1cm4gQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCh7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zm
c2V0LCBtX2xleGVyLm5hbWVTcGFjZSgpIH0sIFdURk1vdmUocmVzdWx0KSk7CiB9CiAKIGF1dG8g
UGFyc2VyOjpwYXJzZVN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlN0YXRl
bWVudD4sIEVycm9yPgpAQCAtMTM4OCw3ICsxNDAxLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRWZm
ZWN0ZnVsRXhwcmVzc2lvbigpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4s
IEUKICAgICBpZiAoZXhwcmVzc2lvbnMuc2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybiB7IG1h
a2VVbmlxdWVSZWY8QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihXVEZNb3ZlKGV4
cHJlc3Npb25zWzBdKSkgfTsKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBtX2xleGVyLnBlZWso
KS5zdGFydE9mZnNldCgpOwotICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihvcmlnaW4tPnN0YXJ0
T2Zmc2V0KCksIGVuZE9mZnNldCk7CisgICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKG9yaWdpbi0+
c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0LCBtX2xleGVyLm5hbWVTcGFjZSgpKTsKICAgICBhdXRv
IGNvbW1hRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDb21tYUV4cHJlc3Npb24+KGxv
Y2F0aW9uLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSk7CiAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KFdURk1vdmUoY29tbWFFeHByZXNz
aW9uKSkgfTsKIH0KQEAgLTE1MzAsNyArMTU0Myw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUV4cHJl
c3Npb24oKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+CiAg
ICAgaWYgKGV4cHJlc3Npb25zLnNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4gV1RGTW92ZShl
eHByZXNzaW9uc1swXSk7CiAgICAgYXV0byBlbmRPZmZzZXQgPSBtX2xleGVyLnBlZWsoKS5zdGFy
dE9mZnNldCgpOwotICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KTsKKyAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwg
bV9sZXhlci5uYW1lU3BhY2UoKSk7CiAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkNv
bW1hRXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoZXhwcmVzc2lvbnMpKSB9OwogfQogCkBA
IC0xNTY0LDcgKzE1NzcsNyBAQCBhdXRvIFBhcnNlcjo6Y29tcGxldGVBc3NpZ25tZW50KFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgbGVmdCkgLT4gRXhwZWN0ZWQ8VQogICAgICAgICBUb2tl
bjo6VHlwZTo6UmlnaHRTaGlmdEVxdWFscywKICAgICAgICAgVG9rZW46OlR5cGU6OkxlZnRTaGlm
dEVxdWFscz4oKTsKICAgICBpZiAoIWFzc2lnbm1lbnRPcGVyYXRvcikKLSAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KGFzc2lnbm1lbnRPcGVyYXRvci5lcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGFzc2lnbm1lbnRPcGVyYXRvci5lcnJvcigpKTsKIAogICAg
IFBBUlNFKHJpZ2h0LCBQb3NzaWJsZVRlcm5hcnlDb25kaXRpb25hbCk7CiAgICAgQ29kZUxvY2F0
aW9uIGxvY2F0aW9uID0geyBsZWZ0LT5jb2RlTG9jYXRpb24oKSwgKCpyaWdodCktPmNvZGVMb2Nh
dGlvbigpIH07CkBAIC0xNjM2LDIzICsxNjQ5LDIzIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3Np
YmxlVGVybmFyeUNvbmRpdGlvbmFsKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
CiAKICAgICBleHByZXNzaW9uID0gY29tcGxldGVQb3NzaWJsZVNoaWZ0KFdURk1vdmUoKmV4cHJl
c3Npb24pKTsKICAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihleHByZXNzaW9uLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXhwcmVzc2lvbi5lcnJvcigpKTsKIAogICAgIGV4cHJlc3Npb24gPSBjb21wbGV0ZVBvc3Np
YmxlTXVsdGlwbHkoV1RGTW92ZSgqZXhwcmVzc2lvbikpOwogICAgIGlmICghZXhwcmVzc2lvbikK
LSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGV4cHJlc3Npb24uZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChleHByZXNzaW9uLmVycm9yKCkpOwogCiAgICAg
ZXhwcmVzc2lvbiA9IGNvbXBsZXRlUG9zc2libGVBZGQoV1RGTW92ZSgqZXhwcmVzc2lvbikpOwog
ICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGV4
cHJlc3Npb24uZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChleHByZXNz
aW9uLmVycm9yKCkpOwogCiAgICAgZXhwcmVzc2lvbiA9IGNvbXBsZXRlUG9zc2libGVSZWxhdGlv
bmFsQmluYXJ5T3BlcmF0aW9uKFdURk1vdmUoKmV4cHJlc3Npb24pKTsKICAgICBpZiAoIWV4cHJl
c3Npb24pCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihleHByZXNzaW9uLmVycm9y
KCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXhwcmVzc2lvbi5lcnJvcigpKTsK
IAogICAgIGV4cHJlc3Npb24gPSBjb21wbGV0ZVBvc3NpYmxlTG9naWNhbEJpbmFyeU9wZXJhdGlv
bihXVEZNb3ZlKCpleHByZXNzaW9uKSk7CiAgICAgaWYgKCFleHByZXNzaW9uKQotICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGV4cHJlc3Npb24uZXJyb3IoKSk7CiAKICAgICBQRUVLKG5leHRU
b2tlbik7CiAgICAgaWYgKG5leHRUb2tlbi0+dHlwZSA9PSBUb2tlbjo6VHlwZTo6UXVlc3Rpb25N
YXJrKQpAQCAtMjAyOCwyNSArMjA0MSwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUZXJtKCkgLT4g
RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogICAgICAgICBUb2tl
bjo6VHlwZTo6SWRlbnRpZmllciwKICAgICAgICAgVG9rZW46OlR5cGU6OkxlZnRQYXJlbnRoZXNp
cz4oKTsKICAgICBpZiAoIXR5cGUpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0
eXBlLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodHlwZS5lcnJvcigp
KTsKIAogICAgIHN3aXRjaCAodHlwZS0+dHlwZSkgewogICAgIGNhc2UgVG9rZW46OlR5cGU6Oklu
dExpdGVyYWw6IHsKICAgICAgICAgYXV0byB2YWx1ZSA9IGludExpdGVyYWxUb0ludCh0eXBlLT5z
dHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCh2YWx1ZS5lcnJvcigpKTsKICAgICAgICAgcmV0dXJuIHsgbWFrZVVu
aXF1ZVJlZjxBU1Q6OkludGVnZXJMaXRlcmFsPigqdHlwZSwgKnZhbHVlKSB9OwogICAgIH0KICAg
ICBjYXNlIFRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbDogewogICAgICAgICBhdXRvIHZhbHVlID0g
dWludExpdGVyYWxUb1VpbnQodHlwZS0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlm
ICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJy
b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodmFsdWUuZXJyb3IoKSk7
CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsPigqdHlwZSwgKnZhbHVlKSB9OwogICAgIH0KICAgICBjYXNlIFRva2VuOjpUeXBlOjpGbG9h
dExpdGVyYWw6IHsKICAgICAgICAgYXV0byB2YWx1ZSA9IGZsb2F0TGl0ZXJhbFRvRmxvYXQodHlw
ZS0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQodmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7IG1h
a2VVbmlxdWVSZWY8QVNUOjpGbG9hdExpdGVyYWw+KCp0eXBlLCAqdmFsdWUpIH07CiAgICAgfQog
ICAgIGNhc2UgVG9rZW46OlR5cGU6Ok51bGw6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAppbmRleCBiZTA1MzJkZWJkMWU1OWU4MzZjMDU3
MTI0ZWY0YjcwNDI4MjhlNTQxLi4xMTcxZWY3Y2I4ZGY1NWFiNTI1ZGQ3N2U1OWY3MTQ3YzdkMmFj
NjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UGFyc2VyLmgKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJXSExTTEVycm9yLmgiCiAjaW5j
bHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMUGFyc2luZ01vZGUuaCIKLSNpbmNs
dWRlICJXSExTTFByb2dyYW0uaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTQwLDkg
KzM5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAorY2xh
c3MgUHJvZ3JhbTsKKwogY2xhc3MgUGFyc2VyIHsKIHB1YmxpYzoKLSAgICBFeHBlY3RlZDx2b2lk
LCBFcnJvcj4gcGFyc2UoUHJvZ3JhbSYsIFN0cmluZ1ZpZXcsIFBhcnNpbmdNb2RlKTsKKyAgICBF
eHBlY3RlZDx2b2lkLCBFcnJvcj4gcGFyc2UoUHJvZ3JhbSYsIFN0cmluZ1ZpZXcsIFBhcnNpbmdN
b2RlLCBBU1Q6Ok5hbWVTcGFjZSA9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOwog
CiBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhpcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAK
aW5kZXggNzNmNDgzMjAzYTA0YTQ4MzNjMTU0NTM4MGRiMWU4NWRjMmIyYTQ4MC4uMDRjNDljYjRk
YWExYTVkOWQ2OThkNGE0ODZjMWI1Zjg4YjQxN2E1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSAiV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExT
TE1ldGFsQ29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCisj
aW5jbHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIKICNpbmNsdWRlICJXSExTTFBhcnNlci5oIgogI2lu
Y2x1ZGUgIldITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5oIgogI2luY2x1ZGUgIldITFNM
UHJvZ3JhbS5oIgpAQCAtMTI0LDEzICsxMjUsMzMgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
fQogCi0KIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fcGhhc2VOYW1lOwogICAgIFBoYXNlVGltZXMm
IG1fcGhhc2VUaW1lczsKICAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnQ7CiB9OwogCitzdHJ1Y3Qg
U2hhZGVyTW9kdWxlIHsKKyAgICBTaGFkZXJNb2R1bGUoY29uc3QgU3RyaW5nJiB3aGxzbFNvdXJj
ZSkKKyAgICAgICAgOiB3aGxzbFNvdXJjZSh3aGxzbFNvdXJjZSkKKyAgICB7CisgICAgfQorCisg
ICAgU3RyaW5nIHdobHNsU291cmNlOworfTsKKworT3duZWRTaGFkZXJNb2R1bGUgY3JlYXRlU2hh
ZGVyTW9kdWxlKGNvbnN0IFN0cmluZyYgd2hsc2xTb3VyY2UpCit7CisgICAgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4NzIgV2Ugc2hvdWxkIGNv
bnNpZGVyIG1vdmluZyBhcyBtdWNoIHdvcmsgZnJvbSBwcmVwYXJlKCkgaW50byBoZXJlIGFzIHBv
c3NpYmxlLgorICAgIHJldHVybiBPd25lZFNoYWRlck1vZHVsZShuZXcgU2hhZGVyTW9kdWxlKHdo
bHNsU291cmNlKSk7Cit9CisKK3ZvaWQgU2hhZGVyTW9kdWxlRGVsZXRlcjo6b3BlcmF0b3IoKShT
aGFkZXJNb2R1bGUqIG1vZHVsZSkKK3sKKyAgICBkZWxldGUgbW9kdWxlOworfQorCisvLyBGSVhN
RTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yU3RyaW5nKCkKICNkZWZpbmUgQ0hFQ0tfUEFT
UyhwYXNzLCAuLi4pIFwKICAgICBkbyB7IFwKICAgICAgICAgZHVtcEFTVEJldHdlZW5FYWNoUGFz
c0lmTmVlZGVkKHByb2dyYW0sICJBU1QgYmVmb3JlICIgIyBwYXNzKTsgXApAQCAtMTM4LDggKzE1
OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcGFzcyhfX1ZBX0FSR1NfXyk7
IFwKICAgICAgICAgaWYgKCFyZXN1bHQpIHsgXAogICAgICAgICAgICAgaWYgKGR1bXBQYXNzRmFp
bHVyZSkgXAotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHBhc3M6ICIgIyBwYXNz
LCBMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIHJlc3VsdC5lcnJvcigpKSk7IFwKLSAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xT
b3VyY2UsIHJlc3VsdC5lcnJvcigpKSk7IFwKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oImZh
aWxlZCBwYXNzOiAiICMgcGFzcywgTGV4ZXI6OmVycm9yU3RyaW5nKHJlc3VsdC5lcnJvcigpLCB3
aGxzbFNvdXJjZTEsIHdobHNsU291cmNlMikpOyBcCisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHJlc3VsdC5lcnJvcigpLCB3aGxzbFNvdXJjZTEs
IHdobHNsU291cmNlMikpOyBcCiAgICAgICAgIH0gXAogICAgIH0gd2hpbGUgKDApCiAKQEAgLTE1
MCwxOSArMTcxLDM3IEBAIHByaXZhdGU6CiAgICAgICAgIHBhc3MoX19WQV9BUkdTX18pOyBcCiAg
ICAgfSB3aGlsZSAoMCkKIAotc3RhdGljIEV4cGVjdGVkPFByb2dyYW0sIFN0cmluZz4gcHJlcGFy
ZVNoYXJlZChQaGFzZVRpbWVzJiBwaGFzZVRpbWVzLCBTdHJpbmcmIHdobHNsU291cmNlKQorc3Rh
dGljIEV4cGVjdGVkPFByb2dyYW0sIFN0cmluZz4gcHJlcGFyZVNoYXJlZChQaGFzZVRpbWVzJiBw
aGFzZVRpbWVzLCBjb25zdCBTdHJpbmcmIHdobHNsU291cmNlMSwgY29uc3QgU3RyaW5nKiB3aGxz
bFNvdXJjZTIgPSBudWxscHRyKQogewogICAgIFByb2dyYW0gcHJvZ3JhbTsKICAgICBQYXJzZXIg
cGFyc2VyOwogCiAgICAgeworICAgICAgICBwcm9ncmFtLm5hbWVDb250ZXh0KCkuc2V0Q3VycmVu
dE5hbWVTcGFjZShBU1Q6Ok5hbWVTcGFjZTo6TmFtZVNwYWNlMSk7CisKICAgICAgICAgUGhhc2VU
aW1lciBwaGFzZVRpbWVyKCJwYXJzZSIsIHBoYXNlVGltZXMpOwotICAgICAgICBhdXRvIHBhcnNl
UmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNlLCBQYXJzaW5nTW9kZTo6
VXNlcik7CisgICAgICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwg
d2hsc2xTb3VyY2UxLCBQYXJzaW5nTW9kZTo6VXNlciwgQVNUOjpOYW1lU3BhY2U6Ok5hbWVTcGFj
ZTEpOwogICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAoZHVtcFBh
c3NGYWlsdXJlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRo
ZSBwcm9ncmFtOiAiLCBMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIHBhcnNlUmVzdWx0
LmVycm9yKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJy
b3JTdHJpbmcod2hsc2xTb3VyY2UsIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKKyAgICAgICAgICAg
IGlmIChkdW1wUGFzc0ZhaWx1cmUpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGZp
cnN0IGFyZ3VtZW50IHRvIGVycm9yU3RyaW5nKCkKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
ImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwgTGV4ZXI6OmVycm9yU3RyaW5nKHBhcnNl
UmVzdWx0LmVycm9yKCksIHdobHNsU291cmNlMSwgd2hsc2xTb3VyY2UyKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yU3Ry
aW5nKCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJp
bmcocGFyc2VSZXN1bHQuZXJyb3IoKSwgd2hsc2xTb3VyY2UxLCB3aGxzbFNvdXJjZTIpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAod2hsc2xTb3VyY2UyKSB7CisgICAgICAgICAgICBwcm9ncmFt
Lm5hbWVDb250ZXh0KCkuc2V0Q3VycmVudE5hbWVTcGFjZShBU1Q6Ok5hbWVTcGFjZTo6TmFtZVNw
YWNlMik7CisgICAgICAgICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dy
YW0sICp3aGxzbFNvdXJjZTIsIFBhcnNpbmdNb2RlOjpVc2VyLCBBU1Q6Ok5hbWVTcGFjZTo6TmFt
ZVNwYWNlMik7CisgICAgICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGR1bXBQYXNzRmFpbHVyZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhlIGZpcnN0IGFyZ3VtZW50IHRvIGVycm9yU3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJmYWlsZWQgdG8gcGFyc2UgdGhlIHByb2dyYW06ICIsIExleGVyOjplcnJvclN0
cmluZyhwYXJzZVJlc3VsdC5lcnJvcigpLCB3aGxzbFNvdXJjZTEsIHdobHNsU291cmNlMikpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGZpcnN0IGFy
Z3VtZW50IHRvIGVycm9yU3RyaW5nKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHBhcnNlUmVzdWx0LmVycm9yKCksIHdobHNsU291cmNl
MSwgd2hsc2xTb3VyY2UyKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgcHJv
Z3JhbS5uYW1lQ29udGV4dCgpLnNldEN1cnJlbnROYW1lU3BhY2UoQVNUOjpOYW1lU3BhY2U6OlN0
YW5kYXJkTGlicmFyeSk7CiAgICAgfQogCiAgICAgewpAQCAtMjAwLDIzICsyMzksMjkgQEAgc3Rh
dGljIEV4cGVjdGVkPFByb2dyYW0sIFN0cmluZz4gcHJlcGFyZVNoYXJlZChQaGFzZVRpbWVzJiBw
aGFzZVRpbWVzLCBTdHJpbmcmIHcKICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KIAotRXhwZWN0ZWQ8
UmVuZGVyUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2Us
IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKQorRXhw
ZWN0ZWQ8UmVuZGVyUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKGNvbnN0IFNoYWRlck1v
ZHVsZSYgdmVydGV4U2hhZGVyTW9kdWxlLCBjb25zdCBTaGFkZXJNb2R1bGUqIGZyYWdtZW50U2hh
ZGVyTW9kdWxlLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvcikKIHsKICAgICBQaGFzZVRpbWVzIHBoYXNlVGltZXM7CiAgICAgTWV0YWw6OlJlbmRlck1l
dGFsQ29kZSBnZW5lcmF0ZWRDb2RlOwogCiAgICAgewogICAgICAgICBQaGFzZVRpbWVyIHBoYXNl
VGltZXIoInByZXBhcmUgdG90YWwiLCBwaGFzZVRpbWVzKTsKLSAgICAgICAgYXV0byBwcm9ncmFt
ID0gcHJlcGFyZVNoYXJlZChwaGFzZVRpbWVzLCB3aGxzbFNvdXJjZSk7CisgICAgICAgIGNvbnN0
IFN0cmluZyogc2Vjb25kU2hhZGVyID0gbnVsbHB0cjsKKyAgICAgICAgYm9vbCBkaXN0aW5jdEZy
YWdtZW50U2hhZGVyID0gZmFsc2U7CisgICAgICAgIGlmIChmcmFnbWVudFNoYWRlck1vZHVsZSAm
JiBmcmFnbWVudFNoYWRlck1vZHVsZSAhPSAmdmVydGV4U2hhZGVyTW9kdWxlKSB7CisgICAgICAg
ICAgICBzZWNvbmRTaGFkZXIgPSAmZnJhZ21lbnRTaGFkZXJNb2R1bGUtPndobHNsU291cmNlOwor
ICAgICAgICAgICAgZGlzdGluY3RGcmFnbWVudFNoYWRlciA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgYXV0byBwcm9ncmFtID0gcHJlcGFyZVNoYXJlZChwaGFzZVRpbWVzLCB2ZXJ0ZXhTaGFk
ZXJNb2R1bGUud2hsc2xTb3VyY2UsIHNlY29uZFNoYWRlcik7CiAgICAgICAgIGlmICghcHJvZ3Jh
bSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChwcm9ncmFtLmVycm9yKCkpOwog
CiAgICAgICAgIE9wdGlvbmFsPE1hdGNoZWRSZW5kZXJTZW1hbnRpY3M+IG1hdGNoZWRTZW1hbnRp
Y3M7CiAgICAgICAgIHsKICAgICAgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigibWF0Y2hT
ZW1hbnRpY3MiLCBwaGFzZVRpbWVzKTsKLSAgICAgICAgICAgIG1hdGNoZWRTZW1hbnRpY3MgPSBt
YXRjaFNlbWFudGljcygqcHJvZ3JhbSwgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICAg
ICAgICAgIG1hdGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3JhbSwgcmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yLCBkaXN0aW5jdEZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRl
ck1vZHVsZSk7CiAgICAgICAgICAgICBpZiAoIW1hdGNoZWRTZW1hbnRpY3MpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyh3aGxzbFNvdXJj
ZSwgRXJyb3IoIkNvdWxkIG5vdCBtYXRjaCBzZW1hbnRpY3MiX3N0cikpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKEVycm9yKCJDb3Vs
ZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9zdHIpLCB2ZXJ0ZXhTaGFkZXJNb2R1bGUud2hsc2xTb3Vy
Y2UsIHNlY29uZFNoYWRlcikpOwogICAgICAgICB9CiAKICAgICAgICAgewpAQCAtMjM0LDcgKzI3
OSw3IEBAIEV4cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJp
bmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBlbGluCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
RXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdo
bHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxpbmVEZXNj
cmlwdG9yKQorRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShj
b25zdCBTaGFkZXJNb2R1bGUmIHNoYWRlck1vZHVsZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
ciYgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcikKIHsKICAgICBQaGFzZVRpbWVzIHBoYXNlVGlt
ZXM7CiAgICAgTWV0YWw6OkNvbXB1dGVNZXRhbENvZGUgZ2VuZXJhdGVkQ29kZTsKQEAgLTI0Miw3
ICsyODcsNyBAQCBFeHBlY3RlZDxDb21wdXRlUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJl
KFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQaXBlbAogCiAgICAgewogICAgICAgICBQaGFz
ZVRpbWVyIHBoYXNlVGltZXIoInByZXBhcmUgdG90YWwiLCBwaGFzZVRpbWVzKTsKLSAgICAgICAg
YXV0byBwcm9ncmFtID0gcHJlcGFyZVNoYXJlZChwaGFzZVRpbWVzLCB3aGxzbFNvdXJjZSk7Cisg
ICAgICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQocGhhc2VUaW1lcywgc2hhZGVyTW9k
dWxlLndobHNsU291cmNlKTsKICAgICAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKHByb2dyYW0uZXJyb3IoKSk7CiAKQEAgLTI1MSwxNCArMjk2LDE0
IEBAIEV4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5n
JiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsCiAgICAgICAgICAgICBQaGFzZVRpbWVyIHBoYXNl
VGltZXIoIm1hdGNoU2VtYW50aWNzIiwgcGhhc2VUaW1lcyk7CiAgICAgICAgICAgICBtYXRjaGVk
U2VtYW50aWNzID0gbWF0Y2hTZW1hbnRpY3MoKnByb2dyYW0sIGNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3IpOwogICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2VtYW50aWNzKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2Us
IEVycm9yKCJDb3VsZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9zdHIpKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyhFcnJvcigiQ291bGQg
bm90IG1hdGNoIHNlbWFudGljcyJfc3RyKSwgc2hhZGVyTW9kdWxlLndobHNsU291cmNlKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICB7CiAgICAgICAgICAgICBQaGFzZVRpbWVyIHBoYXNlVGltZXIo
ImNvbXB1dGVEaW1lbnNpb25zIiwgcGhhc2VUaW1lcyk7CiAgICAgICAgICAgICBjb21wdXRlRGlt
ZW5zaW9ucyA9IFdITFNMOjpjb21wdXRlRGltZW5zaW9ucygqcHJvZ3JhbSwgKm1hdGNoZWRTZW1h
bnRpY3MtPnNoYWRlcik7CiAgICAgICAgICAgICBpZiAoIWNvbXB1dGVEaW1lbnNpb25zKQotICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hs
c2xTb3VyY2UsIEVycm9yKCJDb3VsZCBub3QgbWF0Y2ggY29tcHV0ZSBkaW1lbnNpb25zIl9zdHIp
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0
cmluZyhFcnJvcigiQ291bGQgbm90IG1hdGNoIGNvbXB1dGUgZGltZW5zaW9ucyJfc3RyKSwgc2hh
ZGVyTW9kdWxlLndobHNsU291cmNlKSk7CiAgICAgICAgIH0KIAogICAgICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oCmluZGV4
IDVkYTc3ZjVmMmVkZGI5NTA5NzQ4MzQ3ZTk0Y2E3YjU5Y2ViNGE1YjQuLmVmZDY1YTcwNTc1ZjU5
YWM2NGRiMjVhNGYyNzY2ZDM3YzQxMmFiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oCkBAIC0zOSwxMiArMzksMjAgQEAgbmFt
ZXNwYWNlIFdITFNMIHsKIAogY29uc3RleHByIGJvb2wgZHVtcE1ldGFsQ29tcGlsZVRpbWVzID0g
ZmFsc2U7CiAKKy8vIEhpZGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBTaGFkZXJNb2R1bGUuIENsaWVu
dHMgb2YgdGhlIGNvbXBpbGVyIHNob3VsZG4ndCBjYXJlIHdoYXQncyBpbnNpZGUgaXQuCitzdHJ1
Y3QgU2hhZGVyTW9kdWxlOworc3RydWN0IFNoYWRlck1vZHVsZURlbGV0ZXIgeworICAgIHZvaWQg
b3BlcmF0b3IoKShTaGFkZXJNb2R1bGUqKTsKK307Cit1c2luZyBPd25lZFNoYWRlck1vZHVsZSA9
IHN0ZDo6dW5pcXVlX3B0cjxTaGFkZXJNb2R1bGUsIFNoYWRlck1vZHVsZURlbGV0ZXI+OworT3du
ZWRTaGFkZXJNb2R1bGUgY3JlYXRlU2hhZGVyTW9kdWxlKGNvbnN0IFN0cmluZyYgd2hsc2xTb3Vy
Y2UpOworCiBzdHJ1Y3QgUmVuZGVyUHJlcGFyZVJlc3VsdCB7CiAgICAgU3RyaW5nQnVpbGRlciBt
ZXRhbFNvdXJjZTsKICAgICBNZXRhbDo6TWFuZ2xlZEZ1bmN0aW9uTmFtZSBtYW5nbGVkVmVydGV4
RW50cnlQb2ludE5hbWU7CiAgICAgTWV0YWw6Ok1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZEZy
YWdtZW50RW50cnlQb2ludE5hbWU7CiB9OwotRXhwZWN0ZWQ8UmVuZGVyUHJlcGFyZVJlc3VsdCwg
U3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciYpOworRXhwZWN0ZWQ8UmVuZGVyUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKGNv
bnN0IFNoYWRlck1vZHVsZSYgdmVydGV4U2hhZGVyTW9kdWxlLCBjb25zdCBTaGFkZXJNb2R1bGUq
IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImKTsKIAogc3Ry
dWN0IENvbXB1dGVEaW1lbnNpb25zIHsKICAgICB1bnNpZ25lZCB3aWR0aDsKQEAgLTU3LDcgKzY1
LDcgQEAgc3RydWN0IENvbXB1dGVQcmVwYXJlUmVzdWx0IHsKICAgICBNZXRhbDo6TWFuZ2xlZEZ1
bmN0aW9uTmFtZSBtYW5nbGVkRW50cnlQb2ludE5hbWU7CiAgICAgQ29tcHV0ZURpbWVuc2lvbnMg
Y29tcHV0ZURpbWVuc2lvbnM7CiB9OwotRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0
cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yJik7CitFeHBlY3RlZDxDb21wdXRlUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKGNv
bnN0IFNoYWRlck1vZHVsZSYsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImKTsKIAogfSAvLyBu
YW1lc3BhY2UgV0hMU0wKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9ncmFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByb2dyYW0uaAppbmRleCA0MGJhZjA5NDJlYWY2YWZmZTQxYjYyNTQ0Njg5MGUz
MmFjYzFhMGI1Li45MDg2MWVjMmFhNGNjNDhlMjE0YWQxODMxODlmMWU0MDU2Yzk5MzA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0u
aApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExT
TEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKICNpbmNs
dWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldITFNMSW50cmluc2lj
cy5oIgogI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKQEAgLTQ2LDM4ICs0NywzOCBAQCBw
dWJsaWM6CiAgICAgUHJvZ3JhbSgpID0gZGVmYXVsdDsKICAgICBQcm9ncmFtKFByb2dyYW0mJikg
PSBkZWZhdWx0OwogCi0gICAgYm9vbCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYmIHR5cGVE
ZWZpbml0aW9uKQorICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBhcHBlbmQoQVNUOjpUeXBlRGVm
aW5pdGlvbiYmIHR5cGVEZWZpbml0aW9uKQogICAgIHsKICAgICAgICAgbV90eXBlRGVmaW5pdGlv
bnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBlRGVmaW5pdGlvbj4oV1RGTW92ZSh0eXBl
RGVmaW5pdGlvbikpKTsKICAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKG1fdHlwZURl
ZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAgYm9vbCBhcHBlbmQoQVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikKKyAgICBFeHBlY3RlZDx2b2lkLCBF
cnJvcj4gYXBwZW5kKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYmIHN0cnVjdHVyZURlZmluaXRp
b24pCiAgICAgewogICAgICAgICBtX3N0cnVjdHVyZURlZmluaXRpb25zLmFwcGVuZChtYWtlVW5p
cXVlUmVmPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4oV1RGTW92ZShzdHJ1Y3R1cmVEZWZpbml0
aW9uKSkpOwogICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQobV9zdHJ1Y3R1cmVEZWZp
bml0aW9ucy5sYXN0KCkpOwogICAgIH0KIAotICAgIGJvb2wgYXBwZW5kKEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uJiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQorICAgIEV4cGVjdGVkPHZvaWQs
IEVycm9yPiBhcHBlbmQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRl
ZmluaXRpb24pCiAgICAgewogICAgICAgICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMuYXBwZW5k
KG1ha2VVbmlxdWVSZWY8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KFdURk1vdmUoZW51bWVy
YXRpb25EZWZpbml0aW9uKSkpOwogICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQobV9l
bnVtZXJhdGlvbkRlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAgYm9vbCBhcHBlbmQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCisgICAgRXhwZWN0
ZWQ8dm9pZCwgRXJyb3I+IGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0aW9u
RGVmaW5pdGlvbikKICAgICB7CiAgICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQo
bWFrZVVuaXF1ZVJlZjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShmdW5jdGlvbkRl
ZmluaXRpb24pKSk7CiAgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChtX2Z1bmN0aW9u
RGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9CiAKLSAgICBib29sIGFwcGVuZChBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24mJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIEV4
cGVjdGVkPHZvaWQsIEVycm9yPiBhcHBlbmQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
JiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKICAgICB7CiAgICAgICAgIG1fbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSk7CiAgICAg
ICAgIG1faW50cmluc2ljcy5hZGQobV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5sYXN0KCkp
OwogICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQobV9uYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9ucy5sYXN0KCkpOwogICAgIH0KIAotICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorICAgIEV4cGVjdGVkPHZvaWQs
IEVycm9yPiBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCiAgICAgewogICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5k
KG1ha2VVbmlxdWVSZWY8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZl
VHlwZURlY2xhcmF0aW9uKSkpOwogICAgICAgICBtX2ludHJpbnNpY3MuYWRkKG1fbmF0aXZlVHlw
ZURlY2xhcmF0aW9ucy5sYXN0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKaW5k
ZXggNDI0ZTc5NTE1ZTc5MzFhZmU4NDYzNGVjNGI2ZWM2YzM5NzczODZmOC4uN2M2NTY5Nzg4NDlk
ZmIwYjlmNWYxMTBmZGVkNGNkZWMxODJmZGE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZElt
cGwuY3BwCkBAIC01MiwxMiArNTIsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgY2FuZGlkYXRlLCBjb25zdCBWZWN0b3IKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVLaW5kPgotQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBy
ZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIFR5
cGVLaW5kKiBjYXN0UmV0dXJuVHlwZSkKK3N0YXRpYyBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24q
IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywg
VHlwZUtpbmQqIGNhc3RSZXR1cm5UeXBlLCBBU1Q6Ok5hbWVTcGFjZSBuYW1lU3BhY2UpCiB7CiAg
ICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4gY2FuZGlkYXRlczsKICAgICBmb3IgKGF1dG8mIHBvc3NpYmxlRnVuY3Rpb24gOiBwb3Nz
aWJsZUZ1bmN0aW9ucykgewogICAgICAgICBpZiAocG9zc2libGVGdW5jdGlvbi5nZXQoKS5lbnRy
eVBvaW50VHlwZSgpKQogICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChuYW1lU3Bh
Y2UgPT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSkgeworICAgICAgICAgICAgaWYg
KHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkubmFtZVNwYWNlKCkgIT0gQVNUOjpOYW1lU3BhY2U6OlN0
YW5kYXJkTGlicmFyeSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLm5hbWVTcGFjZSgpICE9
IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkgJiYgcG9zc2libGVGdW5jdGlvbi5nZXQo
KS5uYW1lU3BhY2UoKSAhPSBuYW1lU3BhY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KICAgICAgICAgaWYgKGluZmVyVHlwZXNGb3JDYWxsKHBvc3NpYmxlRnVuY3Rpb24u
Z2V0KCksIGFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKICAgICAgICAgICAgIGNhbmRp
ZGF0ZXMuYXBwZW5kKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkpOwogICAgIH0KQEAgLTc3LDE5ICs4
NCwxOSBAQCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2Fk
SW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcAogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBw
b3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5n
VHlwZT4+JiBhcmd1bWVudFR5cGVzKQorQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZl
RnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpOYW1lU3Bh
Y2UgbmFtZVNwYWNlKQogewotICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwo
cG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIHN0YXRpY19jYXN0PEFTVDo6TmFtZWRU
eXBlKj4obnVsbHB0cikpOworICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwo
cG9zc2libGVGdW5jdGlvbnMsIGFyZ3VtZW50VHlwZXMsIHN0YXRpY19jYXN0PEFTVDo6TmFtZWRU
eXBlKj4obnVsbHB0ciksIG5hbWVTcGFjZSk7CiB9CiAKLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFT
VDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSkKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiog
cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6
TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSwgQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlKQogewot
ICAgIHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocG9zc2libGVGdW5jdGlvbnMs
IGFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0
dXJuVHlwZSwgbmFtZVNwYWNlKTsKIH0KIAotQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNv
bHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpVbm5h
bWVkVHlwZSogY2FzdFJldHVyblR5cGUpCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6OlVubmFt
ZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSwgQVNUOjpOYW1lU3BhY2UgbmFtZVNwYWNlKQogewotICAg
IHJldHVybiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocG9zc2libGVGdW5jdGlvbnMsIGFy
Z3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJu
VHlwZSwgbmFtZVNwYWNlKTsKIH0KIAogQVNUOjpOYW1lZFR5cGUqIHJlc29sdmVUeXBlT3Zlcmxv
YWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4m
IHBvc3NpYmxlVHlwZXMsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmgKaW5kZXggM2QzNGFiNmYzOGQ0OTljOWQzNTg2Y2QxMzBhNzNh
MjkxZTdkMGQxMi4uM2IxOTVhMjFjNTcyZTBmNzIwZmFkYWRmZGExYTE3ZGE0NjA0MTJjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZl
T3ZlcmxvYWRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKQEAgLTQzLDkgKzQzLDkgQEAgY2xhc3MgTmFtZWRU
eXBlOwogCiB9CiAKLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMpOwotQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywg
QVNUOjpOYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKLUFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFT
VDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKTsKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFT
VDo6TmFtZVNwYWNlKTsKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBjYXN0
UmV0dXJuVHlwZSwgQVNUOjpOYW1lU3BhY2UpOworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBy
ZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgQVNUOjpV
bm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUsIEFTVDo6TmFtZVNwYWNlKTsKIEFTVDo6TmFtZWRU
eXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiwgQVNUOjpUeXBlQXJndW1lbnRzJik7CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNN
YXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2Vt
YW50aWNNYXRjaGVyLmNwcAppbmRleCAxNTdhNGJmYzkyMzMxZDdlN2NkNWJjZTMyMGQ0MTE4ZGMw
MDg3MDJiLi4yY2M3ZDdkYmI1NDM1OWExODRlZTdmOWI1MTk0ZGI3YWNkOWFmMDI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0
Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
ZW1hbnRpY01hdGNoZXIuY3BwCkBAIC00NSwxNiArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLXN0YXRpYyBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiog
ZmluZEVudHJ5UG9pbnQoVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+
JiBmdW5jdGlvbkRlZmluaXRpb25zLCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgYXV0byBpdGVyYXRv
ciA9IHN0ZDo6ZmluZF9pZihmdW5jdGlvbkRlZmluaXRpb25zLmJlZ2luKCksIGZ1bmN0aW9uRGVm
aW5pdGlvbnMuZW5kKCksIFsmXShBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZp
bml0aW9uKSB7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5
cGUoKSAmJiBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09IG5hbWU7Ci0gICAgfSk7Ci0gICAg
aWYgKGl0ZXJhdG9yID09IGZ1bmN0aW9uRGVmaW5pdGlvbnMuZW5kKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIHJldHVybiAmKml0ZXJhdG9yOwotfTsKLQogc3RhdGljIGJvb2wgbWF0
Y2hNb2RlKEJpbmRpbmc6OkJpbmRpbmdEZXRhaWxzIGJpbmRpbmdUeXBlLCBBU1Q6OlJlc291cmNl
U2VtYW50aWM6Ok1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShVbmlmb3JtQnVmZmVyQmluZGluZykgLT4gYm9vbCB7CkBAIC0yOTAsNDYgKzI4
MCw1OSBAQCBzdGF0aWMgYm9vbCBtYXRjaERlcHRoQXR0YWNobWVudChWZWN0b3I8RW50cnlQb2lu
dEl0ZW0+JiBmcmFnbWVudE91dHB1dHMsIE9wdGlvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
T3B0aW9uYWw8TWF0Y2hlZFJlbmRlclNlbWFudGljcz4gbWF0Y2hTZW1hbnRpY3MoUHJvZ3JhbSYg
cHJvZ3JhbSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IpCitPcHRpb25hbDxNYXRjaGVkUmVuZGVyU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQcm9n
cmFtJiBwcm9ncmFtLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciwgYm9vbCBkaXN0aW5jdEZyYWdtZW50U2hhZGVyLCBib29sIGZyYWdtZW50U2hhZGVy
RXhpc3RzKQogewotICAgIGF1dG8gdmVydGV4U2hhZGVyRW50cnlQb2ludCA9IGZpbmRFbnRyeVBv
aW50KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLCByZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IudmVydGV4RW50cnlQb2ludE5hbWUpOwotICAgIGF1dG8gZnJhZ21lbnRTaGFkZXJFbnRyeVBv
aW50ID0gZmluZEVudHJ5UG9pbnQocHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCksIHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvci5mcmFnbWVudEVudHJ5UG9pbnROYW1lKTsKLSAgICBpZiAoIXZl
cnRleFNoYWRlckVudHJ5UG9pbnQgfHwgIWZyYWdtZW50U2hhZGVyRW50cnlQb2ludCkKKyAgICBh
dXRvIHZlcnRleEZ1bmN0aW9ucyA9IHByb2dyYW0ubmFtZUNvbnRleHQoKS5nZXRGdW5jdGlvbnMo
cmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLnZlcnRleEVudHJ5UG9pbnROYW1lLCBBU1Q6Ok5hbWVT
cGFjZTo6TmFtZVNwYWNlMSk7CisgICAgaWYgKHZlcnRleEZ1bmN0aW9ucy5zaXplKCkgIT0gMSB8
fCAhdmVydGV4RnVuY3Rpb25zWzBdLmdldCgpLmVudHJ5UG9pbnRUeXBlKCkgfHwgIWlzPEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uPih2ZXJ0ZXhGdW5jdGlvbnNbMF0uZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gdmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1z
ID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCAqdmVydGV4U2hh
ZGVyRW50cnlQb2ludCk7Ci0gICAgYXV0byBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcyA9
IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgKmZyYWdtZW50U2hh
ZGVyRW50cnlQb2ludCk7Ci0gICAgaWYgKCF2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMgfHwg
IWZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zKQorICAgIGF1dG8mIHZlcnRleFNoYWRlckVu
dHJ5UG9pbnQgPSBkb3duY2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4odmVydGV4RnVuY3Rp
b25zWzBdLmdldCgpKTsKKyAgICBhdXRvIHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcyA9IGdh
dGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgdmVydGV4U2hhZGVyRW50
cnlQb2ludCk7CisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgYXV0byB2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcCA9
IG1hdGNoUmVzb3VyY2VzKHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0LCBTaGFkZXJTdGFnZTo6VmVydGV4KTsKLSAgICBh
dXRvIGZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXAgPSBtYXRjaFJlc291cmNlcyhmcmFnbWVudFNo
YWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IubGF5
b3V0LCBTaGFkZXJTdGFnZTo6RnJhZ21lbnQpOwotICAgIGlmICghdmVydGV4U2hhZGVyUmVzb3Vy
Y2VNYXAgfHwgIWZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXApCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgaWYgKCFtYXRjaElucHV0c091dHB1dHModmVydGV4U2hhZGVyRW50cnlQ
b2ludEl0ZW1zLT5vdXRwdXRzLCBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRz
KSkKKyAgICBpZiAoIXZlcnRleFNoYWRlclJlc291cmNlTWFwKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIGF1dG8gbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMgPSBtYXRjaFZlcnRl
eEF0dHJpYnV0ZXModmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvci52ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtLmludHJpbnNpY3MoKSk7
CiAgICAgaWYgKCFtYXRjaGVkVmVydGV4QXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBpZiAoIWZyYWdtZW50U2hhZGVyRXhpc3RzKQorICAgICAgICByZXR1cm4g
e3sgJnZlcnRleFNoYWRlckVudHJ5UG9pbnQsIG51bGxwdHIsICp2ZXJ0ZXhTaGFkZXJFbnRyeVBv
aW50SXRlbXMsIEVudHJ5UG9pbnRJdGVtcygpLCAqdmVydGV4U2hhZGVyUmVzb3VyY2VNYXAsIEhh
c2hNYXA8QmluZGluZyosIHNpemVfdD4oKSwgKm1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzLCBIYXNo
TWFwPEF0dGFjaG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90PigpIH19OworCisgICAgYXV0byBmcmFn
bWVudE5hbWVTcGFjZSA9IGRpc3RpbmN0RnJhZ21lbnRTaGFkZXIgPyBBU1Q6Ok5hbWVTcGFjZTo6
TmFtZVNwYWNlMiA6IEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UxOworICAgIGF1dG8gZnJhZ21l
bnRGdW5jdGlvbnMgPSBwcm9ncmFtLm5hbWVDb250ZXh0KCkuZ2V0RnVuY3Rpb25zKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvci5mcmFnbWVudEVudHJ5UG9pbnROYW1lLCBmcmFnbWVudE5hbWVTcGFj
ZSk7CisgICAgaWYgKGZyYWdtZW50RnVuY3Rpb25zLnNpemUoKSAhPSAxIHx8ICFmcmFnbWVudEZ1
bmN0aW9uc1swXS5nZXQoKS5lbnRyeVBvaW50VHlwZSgpIHx8ICFpczxBU1Q6OkZ1bmN0aW9uRGVm
aW5pdGlvbj4oZnJhZ21lbnRGdW5jdGlvbnNbMF0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIGF1dG8mIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCA9IGRvd25jYXN0
PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihmcmFnbWVudEZ1bmN0aW9uc1swXS5nZXQoKSk7Cisg
ICAgYXV0byBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5UG9pbnRJ
dGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50KTsKKyAg
ICBpZiAoIWZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIGF1dG8gZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcCA9IG1hdGNoUmVz
b3VyY2VzKGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvci5sYXlvdXQsIFNoYWRlclN0YWdlOjpGcmFnbWVudCk7CisgICAgaWYgKCFm
cmFnbWVudFNoYWRlclJlc291cmNlTWFwKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIGlmICghbWF0Y2hJbnB1dHNPdXRwdXRzKHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+
b3V0cHV0cywgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMtPmlucHV0cykpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgYXV0byBtYXRjaGVkQ29sb3JBdHRhY2htZW50cyA9
IG1hdGNoQ29sb3JBdHRhY2htZW50cyhmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+b3V0
cHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVEZXNjcmlwdG9y
LmF0dGFjaG1lbnREZXNjcmlwdG9ycywgcHJvZ3JhbS5pbnRyaW5zaWNzKCkpOwogICAgIGlmICgh
bWF0Y2hlZENvbG9yQXR0YWNobWVudHMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgaWYgKCFtYXRjaERlcHRoQXR0YWNobWVudChmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVt
cy0+b3V0cHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmF0dGFjaG1lbnRzU3RhdGVEZXNj
cmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yLCBwcm9ncmFtLmludHJpbnNp
Y3MoKSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHt7IHZlcnRl
eFNoYWRlckVudHJ5UG9pbnQsIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludCwgKnZlcnRleFNoYWRl
ckVudHJ5UG9pbnRJdGVtcywgKmZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLCAqdmVydGV4
U2hhZGVyUmVzb3VyY2VNYXAsICpmcmFnbWVudFNoYWRlclJlc291cmNlTWFwLCAqbWF0Y2hlZFZl
cnRleEF0dHJpYnV0ZXMsICptYXRjaGVkQ29sb3JBdHRhY2htZW50cyB9fTsKKyAgICByZXR1cm4g
e3sgJnZlcnRleFNoYWRlckVudHJ5UG9pbnQsICZmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQsICp2
ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMsICpmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVt
cywgKnZlcnRleFNoYWRlclJlc291cmNlTWFwLCAqZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcCwg
Km1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzLCAqbWF0Y2hlZENvbG9yQXR0YWNobWVudHMgfX07CiB9
CiAKIE9wdGlvbmFsPE1hdGNoZWRDb21wdXRlU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQcm9n
cmFtJiBwcm9ncmFtLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yKQogewotICAgIGF1dG8gZW50cnlQb2ludCA9IGZpbmRFbnRyeVBvaW50KHByb2dy
YW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yLmVudHJ5
UG9pbnROYW1lKTsKLSAgICBpZiAoIWVudHJ5UG9pbnQpCisgICAgYXV0byBmdW5jdGlvbnMgPSBw
cm9ncmFtLm5hbWVDb250ZXh0KCkuZ2V0RnVuY3Rpb25zKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IuZW50cnlQb2ludE5hbWUsIEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UxKTsKKyAgICBpZiAo
ZnVuY3Rpb25zLnNpemUoKSAhPSAxIHx8ICFmdW5jdGlvbnNbMF0uZ2V0KCkuZW50cnlQb2ludFR5
cGUoKSB8fCAhaXM8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGZ1bmN0aW9uc1swXS5nZXQoKSkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byBlbnRyeVBvaW50SXRlbXMg
PSBnYXRoZXJFbnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksICplbnRyeVBvaW50
KTsKKyAgICBhdXRvJiBlbnRyeVBvaW50ID0gZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRp
b24+KGZ1bmN0aW9uc1swXS5nZXQoKSk7CisgICAgYXV0byBlbnRyeVBvaW50SXRlbXMgPSBnYXRo
ZXJFbnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksIGVudHJ5UG9pbnQpOwogICAg
IGlmICghZW50cnlQb2ludEl0ZW1zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IEFTU0VSVChlbnRyeVBvaW50SXRlbXMtPm91dHB1dHMuaXNFbXB0eSgpKTsKICAgICBhdXRvIHJl
c291cmNlTWFwID0gbWF0Y2hSZXNvdXJjZXMoZW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIGNvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0LCBTaGFkZXJTdGFnZTo6Q29tcHV0ZSk7CiAgICAg
aWYgKCFyZXNvdXJjZU1hcCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1
cm4ge3sgZW50cnlQb2ludCwgKmVudHJ5UG9pbnRJdGVtcywgKnJlc291cmNlTWFwIH19OworICAg
IHJldHVybiB7eyAmZW50cnlQb2ludCwgKmVudHJ5UG9pbnRJdGVtcywgKnJlc291cmNlTWFwIH19
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXSExTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmgKaW5kZXggYmRm
ZjRiYmZmNzg4MDg0Zjc3ZGM2ZTY4ZGFlY2Q2ODk3Y2IxY2M3MC4uMzY5YmU0YjhlODU1MTE3ZDQ5
ZTg3N2NjNTQxZWZiYzAyM2YxN2ExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5oCkBAIC00OCw3ICs0
OCw3IEBAIHN0cnVjdCBNYXRjaGVkUmVuZGVyU2VtYW50aWNzIHsKICAgICBIYXNoTWFwPEF0dGFj
aG1lbnREZXNjcmlwdG9yKiwgc2l6ZV90PiBtYXRjaGVkQ29sb3JBdHRhY2htZW50czsKIH07CiAK
LU9wdGlvbmFsPE1hdGNoZWRSZW5kZXJTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0m
LCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImKTsKK09wdGlvbmFsPE1hdGNoZWRSZW5kZXJTZW1h
bnRpY3M+IG1hdGNoU2VtYW50aWNzKFByb2dyYW0mLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3Im
LCBib29sIGRpc3RpbmN0RnJhZ21lbnRTaGFkZXIsIGJvb2wgZnJhZ21lbnRTaGFkZXJFeGlzdHMp
OwogCiBzdHJ1Y3QgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MgewogICAgIEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uKiBzaGFkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5j
cHAKaW5kZXggMjQwNjllYzU1M2FlOGFjNTc3MmVmN2ZjMzg5ZTYwNjVhN2Q5ZWNkMS4uNWRhMGU5
MGYzNWY1M2Y5M2RmMzFhOTMzZGUxMjgyZDU3ZGU3MzBhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRh
cmRMaWJyYXJ5VXRpbGl0aWVzLmNwcApAQCAtNzcsMjMgKzc3LDIyIEBAIHByaXZhdGU6CiAgICAg
SGFzaFNldDxTdHJpbmc+IG1fZnVuY3Rpb25OYW1lczsKIH07CiAKLXZvaWQgaW5jbHVkZVN0YW5k
YXJkTGlicmFyeShQcm9ncmFtJiBwcm9ncmFtLCBQYXJzZXImIHBhcnNlciwgYm9vbCBwYXJzZUZ1
bGxTdGFuZGFyZExpYnJhcnkpCitFeHBlY3RlZDx2b2lkLCBFcnJvcj4gaW5jbHVkZVN0YW5kYXJk
TGlicmFyeShQcm9ncmFtJiBwcm9ncmFtLCBQYXJzZXImIHBhcnNlciwgYm9vbCBwYXJzZUZ1bGxT
dGFuZGFyZExpYnJhcnkpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gc3Rh
bmRhcmRMaWJyYXJ5KGRlY29tcHJlc3NBbmREZWNvZGVTdGFuZGFyZExpYnJhcnkoKSk7CiAgICAg
aWYgKHBhcnNlRnVsbFN0YW5kYXJkTGlicmFyeSkgewogICAgICAgICBhdXRvIHBhcnNlUmVzdWx0
ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0YW5kYXJkTGlicmFyeS5nZXQoKSwgUGFyc2luZ01v
ZGU6OlN0YW5kYXJkTGlicmFyeSk7Ci0gICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKLSAgICAg
ICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSAoZnVsbCkgc3RhbmRhcmQgbGli
cmFyeTogIiwgTGV4ZXI6OmVycm9yU3RyaW5nKFN0cmluZ1ZpZXcoc3RhbmRhcmRMaWJyYXJ5KSwg
cGFyc2VSZXN1bHQuZXJyb3IoKSkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KQor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHBhcnNlUmVzdWx0LmVycm9yKCkpOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxI
YXNoTWFwPFN0cmluZywgU3Vic3RyaW5nTG9jYXRpb24+PiBzdGFuZGFyZExpYnJhcnlGdW5jdGlv
bk1hcChjb21wdXRlU3RhbmRhcmRMaWJyYXJ5RnVuY3Rpb25NYXAoKSk7CiAKICAgICBhdXRvIHN0
cmluZ1ZpZXcgPSBTdHJpbmdWaWV3KHN0YW5kYXJkTGlicmFyeS5nZXQoKSkuc3Vic3RyaW5nKDAs
IGZpcnN0RnVuY3Rpb25PZmZzZXRJblN0YW5kYXJkTGlicmFyeSgpKTsKICAgICBhdXRvIHBhcnNl
UmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcsIFBhcnNpbmdNb2RlOjpT
dGFuZGFyZExpYnJhcnkpOwotICAgIEFTU0VSVF9VTlVTRUQocGFyc2VSZXN1bHQsIHBhcnNlUmVz
dWx0KTsKKyAgICBpZiAoIXBhcnNlUmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQocGFyc2VSZXN1bHQuZXJyb3IoKSk7CiAKICAgICBOYW1lRmluZGVyIG5hbWVGaW5kZXI7CiAg
ICAgbmFtZUZpbmRlci5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKQEAgLTEwMiw2ICsxMDEsMTAg
QEAgdm9pZCBpbmNsdWRlU3RhbmRhcmRMaWJyYXJ5KFByb2dyYW0mIHByb2dyYW0sIFBhcnNlciYg
cGFyc2VyLCBib29sIHBhcnNlRnVsbFN0YW4KICAgICAvLyBUaGUgbmFtZSBvZiBhIGNhbGwgdG8g
YSBjYXN0IG9wZXJhdG9yIGlzIHRoZSBuYW1lIG9mIHRoZSB0eXBlLCBzbyB3ZSBjYW4ndCBtYXRj
aCB0aGVtIHVwIGNvcnJlY3RseS4KICAgICAvLyBJbnN0ZWFkLCBqdXN0IGluY2x1ZGUgYWxsIGNh
c3Rpbmcgb3BlcmF0b3JzLgogICAgIGZ1bmN0aW9uTmFtZXMuYWRkKCJvcGVyYXRvciBjYXN0Il9z
dHIpOworICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW4gYXV0aG9yIGNhbid0IHdy
aXRlIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgYW55dGhpbmcgaW4gdGhl
IHN0YW5kYXJkIGxpYnJhcnkuCisgICAgLy8gSWYgdGhleSBkbyBzbywgd2UgbmVlZCB0byBtYWtl
IHN1cmUgaXQgY29sbGlkZXMuCisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBw
cm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25OYW1lcy5hZGQo
ZnVuY3Rpb25EZWZpbml0aW9uLT5uYW1lKCkpOwogICAgIHdoaWxlICghZnVuY3Rpb25OYW1lcy5p
c0VtcHR5KCkpIHsKICAgICAgICAgYXV0byBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uc0NvdW50
ID0gcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKTsKICAgICAgICAg
YXV0byBmdW5jdGlvbkRlZmluaXRpb25zQ291bnQgPSBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlv
bnMoKS5zaXplKCk7CkBAIC0xMTksMTEgKzEyMiw4IEBAIHZvaWQgaW5jbHVkZVN0YW5kYXJkTGli
cmFyeShQcm9ncmFtJiBwcm9ncmFtLCBQYXJzZXImIHBhcnNlciwgYm9vbCBwYXJzZUZ1bGxTdGFu
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gcHJvZ3JhbS5mdW5jdGlv
bkRlZmluaXRpb25zKCkuc2l6ZSgpOwogICAgICAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBh
cnNlci5wYXJzZShwcm9ncmFtLCBzdHJpbmdWaWV3LCBQYXJzaW5nTW9kZTo6U3RhbmRhcmRMaWJy
YXJ5KTsKLSAgICAgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKLSAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgKHBhcnRpYWwpIHN0YW5kYXJkIGxpYnJhcnk6
ICIsIExleGVyOjplcnJvclN0cmluZyhzdHJpbmdWaWV3LCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocGFyc2VSZXN1bHQuZXJyb3IoKSk7
CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGlmIChwcm9ncmFt
LmZ1bmN0aW9uRGVmaW5pdGlvbnMoKS5zaXplKCkgIT0gc3RhcnQpCiAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigibm9uIG5hdGl2ZSBzdGRsaWIgZnVuY3Rpb246ICciLCBuYW1lLCAiJyIp
OwpAQCAtMTM2LDYgKzEzNiw3IEBAIHZvaWQgaW5jbHVkZVN0YW5kYXJkTGlicmFyeShQcm9ncmFt
JiBwcm9ncmFtLCBQYXJzZXImIHBhcnNlciwgYm9vbCBwYXJzZUZ1bGxTdGFuCiAgICAgICAgICAg
ICBuYW1lRmluZGVyLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygp
W2Z1bmN0aW9uRGVmaW5pdGlvbnNDb3VudF0pOwogICAgICAgICBmdW5jdGlvbk5hbWVzID0gbmFt
ZUZpbmRlci50YWtlRnVuY3Rpb25OYW1lcygpOwogICAgIH0KKyAgICByZXR1cm4geyB9OwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXSExTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0aWVz
LmgKaW5kZXggY2FmNmE0MWUyM2I5Y2JlMTgzNDQ4MGI0ZmNhYmYxMGNjYWMwZTYzNy4uMDE4Y2U3
Yzk2Yzg0MGJkOTdlZjg0MWYyYzQxYjQ0ZDQ5MjU1NDBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJk
TGlicmFyeVV0aWxpdGllcy5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCisjaW5jbHVkZSAiV0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zNiw3ICszOCw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBjbGFzcyBQYXJzZXI7CiBjbGFzcyBQ
cm9ncmFtOwogCi12b2lkIGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYsIFBhcnNlciYs
IGJvb2wgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5KTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBp
bmNsdWRlU3RhbmRhcmRMaWJyYXJ5KFByb2dyYW0mLCBQYXJzZXImLCBib29sIHBhcnNlRnVsbFN0
YW5kYXJkTGlicmFyeSk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE3YmMzYTkwNTg1MjZhMjhkYmU3NTU4YWU2NGY5
Mjc4ZTllNTEwOWQuLjNkNGUxZTJjNmEyYWU3MDhiZjUwZDk3ZWM4ZmI3NTUzZWNiOWI3NjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTEzMzQ0LDYgKzEzMzQ0LDcgQEAKIAkJQzIzNEE5QjUyMUU5MkMyMzAwM0M5ODREIC8qIFdI
TFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5
bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzIzNEE5QjYyMUU5MkNDMDAwM0M5ODREIC8qIFdITFNMSW50cmluc2ljcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTEludHJpbnNpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzIzNEE5QjcyMUU5MkNDMTAwM0M5ODREIC8qIFdITFNMSW50cmluc2ljcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTEludHJpbnNpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjM5OEVCRDIzMEExQjc2MDA2NDE1MDcgLyogV0hMU0xOYW1lU3BhY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xOYW1lU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzI0NThFNjExRkU4OTc5RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyNEE1N0FGMjFGQUQ1M0YwMDRDNkREMSAvKiBXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMjRBNTdCMjIxRkI4RERBMDA0QzZERDEgLyogV0hMU0xTZW1hbnRpY01h
dGNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxMTQsNiArMTcxMTUsNyBAQAogCQkJCUMy
MUJGNzJEMjFDRDg5RTkwMDIyNzk3OSAvKiBXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24uaCAqLywKIAkJCQlDMjFCRjcyQzIxQ0Q4OUU5MDAyMjc5NzkgLyogV0hMU0xNYWtlUG9pbnRl
ckV4cHJlc3Npb24uaCAqLywKIAkJCQkxQzMzMjc3MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xO
YW1lZFR5cGUuaCAqLywKKwkJCQlDMjM5OEVCRDIzMEExQjc2MDA2NDE1MDcgLyogV0hMU0xOYW1l
U3BhY2UuaCAqLywKIAkJCQlDMjFCRjcyMzIxQ0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCiAJCQkJQzIxQkY3MkEyMUNEODlFNzAwMjI3OTc5IC8q
IFdITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggKi8sCiAJCQkJQzIxQkY3MDcyMUNEODlDODAw
MjI3OTc5IC8qIFdITFNMTnVsbExpdGVyYWwuaCAqLywKQEAgLTE4NTU4LDE0ICsxODU2MCwxNCBA
QAogCQk1MTBBNThFRTFCQUI3MUUwMDBDMTkyODIgLyogc2VydmVyICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk5MzIzQjA2RDIzMDYxRTlCMDA5MDFDOEIg
LyogSURCU2VyaWFsaXphdGlvbkNvbnRleHQuY3BwICovLAotCQkJCTkzMjNCMDZGMjMwNjFFOUMw
MDkwMUM4QiAvKiBJREJTZXJpYWxpemF0aW9uQ29udGV4dC5oICovLAogCQkJCTUxQkE0QUM3MUJC
QzVBRDYwMERGM0Q2RCAvKiBJREJCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk1MTZEN0Q2RDFCQjVG
MDY1MDBBRjdDNzcgLyogSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcCAqLywKIAkJCQk1MTBBNThG
RTFCQjA3QUE1MDBDMTkyODIgLyogSURCQ29ubmVjdGlvblRvQ2xpZW50LmggKi8sCiAJCQkJNTE2
RDdENkUxQkI1RjA2NTAwQUY3Qzc3IC8qIElEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmgg
Ki8sCiAJCQkJNTExRUMxMjUxQzUwQUE1NzAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uY3Bw
ICovLAogCQkJCTUxMUVDMTI2MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmgg
Ki8sCisJCQkJOTMyM0IwNkQyMzA2MUU5QjAwOTAxQzhCIC8qIElEQlNlcmlhbGl6YXRpb25Db250
ZXh0LmNwcCAqLywKKwkJCQk5MzIzQjA2RjIzMDYxRTlDMDA5MDFDOEIgLyogSURCU2VyaWFsaXph
dGlvbkNvbnRleHQuaCAqLywKIAkJCQk1MTBBNThFRjFCQUI3MjBGMDBDMTkyODIgLyogSURCU2Vy
dmVyLmNwcCAqLywKIAkJCQk1MTBBNThGMDFCQUI3MjBGMDBDMTkyODIgLyogSURCU2VydmVyLmgg
Ki8sCiAJCQkJNTFFRUFBNzExQkVGRkE3OTAwMjE4MDA4IC8qIEluZGV4VmFsdWVFbnRyeS5jcHAg
Ki8sCkBAIC0yOTUzNiw2ICsyOTUzOCw3IEBACiAJCQkJNTE0NUIxMEExQkM0OEUyRTAwRTg2MjE5
IC8qIElEQlJlc291cmNlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzIzNkQx
QkI2MTc0OTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
MUVDMTI4MUM1MEFBQ0EwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQk5MzIzQjA3MDIzMDYxRjk3MDA5MDFDOEIgLyogSURCU2VyaWFsaXphdGlvbkNvbnRl
eHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQ0JCMUJCNENCRjgwMDEyODk4RiAvKiBJREJT
ZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQ0FEMUJCNEM0RTgwMDEyODk4RiAvKiBJ
REJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE5OEY3QUQxQkJERDNFQjAwRTJD
QzVGIC8qIElEQlRyYW5zYWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDAwOSw3ICsz
MDAxMiw2IEBACiAJCQkJQkM0OTE4QzkwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTElGcmFtZUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJBQTk4MEExQ0REMkQwMEI0MkIyNSAvKiBK
U0hUTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3RTk3MEExQTgzRTMw
MDdGQjhDNSAvKiBKU0hUTUxJbnB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzMjNC
MDcwMjMwNjFGOTcwMDkwMUM4QiAvKiBJREJTZXJpYWxpemF0aW9uQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODM2QjA5NTYxRjVGMzREOTAwM0MzNzAyIC8qIEpTSFRNTElucHV0RWxlbWVu
dEVudHJpZXNBUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE2MTQ4QTc5MTJFNDFFM0IwMDQ0QTc4
NCAvKiBKU0hUTUxLZXlnZW5FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUIyMjBB
MUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTGFiZWxFbGVtZW50LmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVTaGFkZXJN
b2R1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVTaGFkZXJN
b2R1bGUuaAppbmRleCBjZTMzNDFlNGZhNzc0MjFhODNlZjEwZjY4MTRhMTlmODNkYzk4ZWFjLi5i
ODYwZWVhZDYxZjEwOTI4ZTYxMDllMWFkNjUwZjdjMjZmODA3NmMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVU2hhZGVyTW9kdWxlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5oCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xQ
cmVwYXJlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDYsMTUgKzQ3LDE1IEBAIGNs
YXNzIEdQVVNoYWRlck1vZHVsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVVNoYWRlck1vZHVsZT4g
ewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8R1BVU2hhZGVyTW9kdWxlPiB0cnlDcmVhdGUo
Y29uc3QgR1BVRGV2aWNlJiwgY29uc3QgR1BVU2hhZGVyTW9kdWxlRGVzY3JpcHRvciYpOwogCi0g
ICAgUGxhdGZvcm1TaGFkZXJNb2R1bGUqIHBsYXRmb3JtU2hhZGVyTW9kdWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV93aGxzbFNvdXJjZS5pc051bGwoKSA/IG1fcGxhdGZvcm1TaGFkZXJNb2R1bGUuZ2V0
KCkgOiBudWxscHRyOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB3aGxzbFNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fd2hsc2xTb3VyY2U7IH0KKyAgICBQbGF0Zm9ybVNoYWRlck1vZHVsZSogcGxhdGZv
cm1TaGFkZXJNb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX3dobHNsTW9kdWxlID8gbnVsbHB0ciA6
IG1fcGxhdGZvcm1TaGFkZXJNb2R1bGUuZ2V0KCk7IH0KKyAgICBjb25zdCBXSExTTDo6U2hhZGVy
TW9kdWxlKiB3aGxzbE1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2hsc2xNb2R1bGUuZ2V0KCk7
IH0KIAogcHJpdmF0ZToKICAgICBHUFVTaGFkZXJNb2R1bGUoUGxhdGZvcm1TaGFkZXJNb2R1bGVT
bWFydFB0ciYmKTsKLSAgICBHUFVTaGFkZXJNb2R1bGUoU3RyaW5nJiYgd2hsc2xTb3VyY2UpOwor
ICAgIEdQVVNoYWRlck1vZHVsZShXSExTTDo6T3duZWRTaGFkZXJNb2R1bGUmJiB3aGxzbE1vZHVs
ZSk7CiAKICAgICBQbGF0Zm9ybVNoYWRlck1vZHVsZVNtYXJ0UHRyIG1fcGxhdGZvcm1TaGFkZXJN
b2R1bGU7Ci0gICAgU3RyaW5nIG1fd2hsc2xTb3VyY2U7CisgICAgV0hMU0w6Ok93bmVkU2hhZGVy
TW9kdWxlIG1fd2hsc2xNb2R1bGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29t
cHV0ZVBpcGVsaW5lTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KaW5kZXggMWNlZmVlZGI5ODVlNGE3
Njc0NTMyZmQyODM0NjA3YTk3OWEwMGI1OS4uZTAxYjc1YWY5NTE3NWMwNDk2NTU4MDg5M2Y2MTYw
MGQ1NmU1MmQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQpA
QCAtNzAsMTMgKzcwLDExIEBAIHN0YXRpYyBPcHRpb25hbDxXSExTTDo6Q29tcHV0ZURpbWVuc2lv
bnM+IHRyeVNldEZ1bmN0aW9ucyhjb25zdCBHUFVQaXBlbGluZVN0YWdlCiAgICAgV0hMU0w6OkNv
bXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zIHsgMSwgMSwgMSB9OwogCiAgICAgaWYg
KHdobHNsRGVzY3JpcHRvcikgewotICAgICAgICAvLyBXSExTTCBmdW5jdGlvbnMgYXJlIGNvbXBp
bGVkIHRvIE1TTCBmaXJzdC4KLSAgICAgICAgU3RyaW5nIHdobHNsU291cmNlID0gY29tcHV0ZVN0
YWdlLm1vZHVsZS0+d2hsc2xTb3VyY2UoKTsKLSAgICAgICAgQVNTRVJUKCF3aGxzbFNvdXJjZS5p
c051bGwoKSk7CisgICAgICAgIEFTU0VSVChjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbE1vZHVs
ZSgpKTsKIAogICAgICAgICB3aGxzbERlc2NyaXB0b3ItPmVudHJ5UG9pbnROYW1lID0gY29tcHV0
ZVN0YWdlLmVudHJ5UG9pbnQ7CiAKLSAgICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQgPSBX
SExTTDo6cHJlcGFyZSh3aGxzbFNvdXJjZSwgKndobHNsRGVzY3JpcHRvcik7CisgICAgICAgIGF1
dG8gd2hsc2xDb21waWxlUmVzdWx0ID0gV0hMU0w6OnByZXBhcmUoKmNvbXB1dGVTdGFnZS5tb2R1
bGUtPndobHNsTW9kdWxlKCksICp3aGxzbERlc2NyaXB0b3IpOwogICAgICAgICBpZiAoIXdobHNs
Q29tcGlsZVJlc3VsdCkgewogICAgICAgICAgICAgZXJyb3JTY29wZXMuZ2VuZXJhdGVQcmVmaXhl
ZEVycm9yKG1ha2VTdHJpbmcoIldITFNMIGNvbXBpbGUgZXJyb3I6ICIsIHdobHNsQ29tcGlsZVJl
c3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMTM0
LDcgKzEzMiw3IEBAIHN0YXRpYyBPcHRpb25hbDxDb252ZXJ0UmVzdWx0PiBjb252ZXJ0Q29tcHV0
ZVBpcGVsaW5lRGVzY3JpcHRvcihjb25zdCBHUFVDb21wdXRlCiAKICAgICBjb25zdCBhdXRvJiBj
b21wdXRlU3RhZ2UgPSBkZXNjcmlwdG9yLmNvbXB1dGVTdGFnZTsKIAotICAgIGJvb2wgaXNXaGxz
bCA9ICFjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbFNvdXJjZSgpLmlzTnVsbCgpOworICAgIGJv
b2wgaXNXaGxzbCA9IGNvbXB1dGVTdGFnZS5tb2R1bGUtPndobHNsTW9kdWxlKCk7CiAKICAgICBP
cHRpb25hbDxXSExTTDo6Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcj4gd2hsc2xEZXNjcmlwdG9y
OwogICAgIGlmIChpc1dobHNsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5t
bQppbmRleCA4NmFhZGQ4NDIwODEyNTVjZDM1ODFkMjQ4MjIwZmVkNTBiMjU3YTEwLi5mNGEwMzcx
ZmM5NTY5ZTg0ODRhM2M0YmE0NzdlMjg4NDgyNTIzNTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVu
ZGVyUGlwZWxpbmVNZXRhbC5tbQpAQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyBib29sIHRyeVNl
dE1ldGFsRnVuY3Rpb25zKE1UTExpYnJhcnkgKnZlcnRleE1ldGFsTGlicmFyeSwgTVRMTGlicmFy
eSAqZnJhCiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgICAgICAv
LyBIb3dldmVyLCBmcmFnbWVudCBzaGFkZXJzIGFyZSBvcHRpb25hbC4KLSAgICAgICAgaWYgKCFm
cmFnbWVudE1ldGFsTGlicmFyeSkKKyAgICAgICAgaWYgKCFmcmFnbWVudE1ldGFsTGlicmFyeSB8
fCBmcmFnbWVudEVudHJ5UG9pbnROYW1lLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICAgICAgYXV0byBmdW5jdGlvbiA9IGFkb3B0TlMoW2ZyYWdtZW50TWV0YWxMaWJy
YXJ5IG5ld0Z1bmN0aW9uV2l0aE5hbWU6ZnJhZ21lbnRFbnRyeVBvaW50TmFtZV0pOwpAQCAtMzgy
LDE1ICszODIsMTQgQEAgc3RhdGljIGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBpcGVs
aW5lU3RhZ2VEZXNjcmlwdG9yJiB2ZXJ0ZXhTdGFnZSwgY29uc3QKICAgICBTdHJpbmcgdmVydGV4
RW50cnlQb2ludCwgZnJhZ21lbnRFbnRyeVBvaW50OwogCiAgICAgaWYgKHdobHNsRGVzY3JpcHRv
cikgewotICAgICAgICAvLyBXSExTTCBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkIHRvIE1TTCBmaXJz
dC4KLSAgICAgICAgU3RyaW5nIHdobHNsU291cmNlID0gdmVydGV4U3RhZ2UubW9kdWxlLT53aGxz
bFNvdXJjZSgpOwotICAgICAgICBBU1NFUlQoIXdobHNsU291cmNlLmlzTnVsbCgpKTsKKyAgICAg
ICAgQVNTRVJUKHZlcnRleFN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSk7CisgICAgICAgIEFT
U0VSVCghZnJhZ21lbnRTdGFnZSB8fCBmcmFnbWVudFN0YWdlLT5tb2R1bGUtPndobHNsTW9kdWxl
KCkpOwogCiAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+dmVydGV4RW50cnlQb2ludE5hbWUgPSB2
ZXJ0ZXhTdGFnZS5lbnRyeVBvaW50OwogICAgICAgICBpZiAoZnJhZ21lbnRTdGFnZSkKICAgICAg
ICAgICAgIHdobHNsRGVzY3JpcHRvci0+ZnJhZ21lbnRFbnRyeVBvaW50TmFtZSA9IGZyYWdtZW50
U3RhZ2UtPmVudHJ5UG9pbnQ7CiAKLSAgICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQgPSBX
SExTTDo6cHJlcGFyZSh3aGxzbFNvdXJjZSwgKndobHNsRGVzY3JpcHRvcik7CisgICAgICAgIGF1
dG8gd2hsc2xDb21waWxlUmVzdWx0ID0gV0hMU0w6OnByZXBhcmUoKnZlcnRleFN0YWdlLm1vZHVs
ZS0+d2hsc2xNb2R1bGUoKSwgZnJhZ21lbnRTdGFnZSA/IGZyYWdtZW50U3RhZ2UtPm1vZHVsZS0+
d2hsc2xNb2R1bGUoKSA6IG51bGxwdHIsICp3aGxzbERlc2NyaXB0b3IpOwogICAgICAgICBpZiAo
IXdobHNsQ29tcGlsZVJlc3VsdCkgewogICAgICAgICAgICAgZXJyb3JTY29wZXMuZ2VuZXJhdGVQ
cmVmaXhlZEVycm9yKG1ha2VTdHJpbmcoIldITFNMIGNvbXBpbGUgZXJyb3I6ICIsIHdobHNsQ29t
cGlsZVJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MjAs
NyArNDE5LDggQEAgc3RhdGljIGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBpcGVsaW5l
U3RhZ2VEZXNjcmlwdG9yJiB2ZXJ0ZXhTdGFnZSwgY29uc3QKIAogICAgICAgICBmcmFnbWVudExp
YnJhcnkgPSB2ZXJ0ZXhMaWJyYXJ5OwogICAgICAgICB2ZXJ0ZXhFbnRyeVBvaW50ID0gd2hsc2xD
b21waWxlUmVzdWx0LT5tYW5nbGVkVmVydGV4RW50cnlQb2ludE5hbWUudG9TdHJpbmcoKTsKLSAg
ICAgICAgZnJhZ21lbnRFbnRyeVBvaW50ID0gd2hsc2xDb21waWxlUmVzdWx0LT5tYW5nbGVkRnJh
Z21lbnRFbnRyeVBvaW50TmFtZS50b1N0cmluZygpOworICAgICAgICBpZiAoZnJhZ21lbnRTdGFn
ZSkKKyAgICAgICAgICAgIGZyYWdtZW50RW50cnlQb2ludCA9IHdobHNsQ29tcGlsZVJlc3VsdC0+
bWFuZ2xlZEZyYWdtZW50RW50cnlQb2ludE5hbWUudG9TdHJpbmcoKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICB2ZXJ0ZXhMaWJyYXJ5ID0gdmVydGV4U3RhZ2UubW9kdWxlLT5wbGF0Zm9ybVNoYWRl
ck1vZHVsZSgpOwogICAgICAgICB2ZXJ0ZXhFbnRyeVBvaW50ID0gdmVydGV4U3RhZ2UuZW50cnlQ
b2ludDsKQEAgLTQ1Miw4ICs0NTIsOSBAQCBzdGF0aWMgUmV0YWluUHRyPE1UTFJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvcj4gY29udmVydFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcihjbwogICAgIGNv
bnN0IGF1dG8mIHZlcnRleFN0YWdlID0gZGVzY3JpcHRvci52ZXJ0ZXhTdGFnZTsKICAgICBjb25z
dCBhdXRvJiBmcmFnbWVudFN0YWdlID0gZGVzY3JpcHRvci5mcmFnbWVudFN0YWdlOwogCi0gICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU0NDYg
QWxsb3cgV0hMU0wgc2hhZGVycyB0byBjb21lIGZyb20gZGlmZmVyZW50IHByb2dyYW1zLgotICAg
IGJvb2wgaXNXaGxzbCA9ICF2ZXJ0ZXhTdGFnZS5tb2R1bGUtPndobHNsU291cmNlKCkuaXNOdWxs
KCkgJiYgKCFmcmFnbWVudFN0YWdlIHx8IHZlcnRleFN0YWdlLm1vZHVsZS5wdHIoKSA9PSBmcmFn
bWVudFN0YWdlLT5tb2R1bGUucHRyKCkpOworICAgIGlmIChmcmFnbWVudFN0YWdlICYmIHN0YXRp
Y19jYXN0PGJvb2w+KHZlcnRleFN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSkgIT0gc3RhdGlj
X2Nhc3Q8Ym9vbD4oZnJhZ21lbnRTdGFnZS0+bW9kdWxlLT53aGxzbE1vZHVsZSgpKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgYm9vbCBpc1dobHNsID0gdmVydGV4U3RhZ2UubW9kdWxl
LT53aGxzbE1vZHVsZSgpOwogCiAgICAgLy8gU2V0IGRhdGEgZm9yIHRoZSBNZXRhbCBwaXBlbGlu
ZSBkZXNjcmlwdG9yIChhbmQgV0hMU0wncywgaWYgbmVlZGVkKS4KICAgICBPcHRpb25hbDxXSExT
TDo6UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yPiB3aGxzbERlc2NyaXB0b3I7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVU2hhZGVyTW9k
dWxlTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVU2hhZGVyTW9kdWxlTWV0YWwubW0KaW5kZXggYjdmNTZjODMyN2NhYWJiMTQyNDk1MDA0YTYy
ZTkyYzVkNzA4OWJkMS4uMzIyMTQ4NTkwNjI3ODE2NzA3Y2JiZmEwOTI5MGJmNWYyYzU3MjYxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQ
VVNoYWRlck1vZHVsZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVTaGFkZXJNb2R1bGVNZXRhbC5tbQpAQCAtNDQsOCArNDQsMTEgQEAg
UmVmUHRyPEdQVVNoYWRlck1vZHVsZT4gR1BVU2hhZGVyTW9kdWxlOjp0cnlDcmVhdGUoY29uc3Qg
R1BVRGV2aWNlJiBkZXZpY2UsIGNvbnMKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
ICAgIAotICAgIGlmIChkZXNjcmlwdG9yLmlzV0hMU0wpCi0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgR1BVU2hhZGVyTW9kdWxlKFN0cmluZyhkZXNjcmlwdG9yLmNvZGUpKSk7CisgICAgaWYg
KGRlc2NyaXB0b3IuaXNXSExTTCkgeworICAgICAgICBpZiAoYXV0byB3aGxzbE1vZHVsZSA9IFdI
TFNMOjpjcmVhdGVTaGFkZXJNb2R1bGUoZGVzY3JpcHRvci5jb2RlKSkKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgR1BVU2hhZGVyTW9kdWxlKFdURk1vdmUod2hsc2xNb2R1bGUpKSk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAogICAgIFBsYXRmb3JtU2hhZGVyTW9k
dWxlU21hcnRQdHIgbW9kdWxlOwogCkBAIC02Niw4ICs2OSw4IEBAIEdQVVNoYWRlck1vZHVsZTo6
R1BVU2hhZGVyTW9kdWxlKFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHImJiBtb2R1bGUpCiB7
CiB9CiAKLUdQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFN0cmluZyYmIHdobHNsU291
cmNlKQotICAgIDogbV93aGxzbFNvdXJjZShXVEZNb3ZlKHdobHNsU291cmNlKSkKK0dQVVNoYWRl
ck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFdITFNMOjpPd25lZFNoYWRlck1vZHVsZSYmIHdobHNs
TW9kdWxlKQorICAgIDogbV93aGxzbE1vZHVsZShXVEZNb3ZlKHdobHNsTW9kdWxlKSkKIHsKIH0K
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IGUxMzFhNjg3ZjUwZWUyYTRiZTkwMGQzZmUwZWEyM2JlY2I3MDE1NDAuLmM0YzI2
ZDQyMWJiYjJhYWRjN2QyNTEyODQzYzUxODZlMjJiMzE5Y2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NSBA
QAorMjAxOS0wOC0xOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgor
CisgICAgICAgIFtXSExTTF0gVmVydGV4IHNoYWRlciBhbmQgZnJhZ21lbnQgc2hhZGVyIG5lZWQg
dG8gYmUgYWJsZSB0byBjb21lIGZyb20gdHdvIGRpZmZlcmVudCBwcm9ncmFtcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NDQ2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTAtZXhwZWN0ZWQu
aHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEwLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0xMS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTEuaHRtbDogQWRkZWQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTEyLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0x
Mi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTEzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNC1leHBlY3RlZC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTE1LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMTYtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE2
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMTcuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4LWV4cGVjdGVkLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MTktZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE5Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0yLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0yMC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIyLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIyLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0yMy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMjQtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTI0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0yNS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjYtZXhwZWN0
ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI2Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0yNy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0z
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy00LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtNS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNi1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy02Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy03LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy04LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTgu
aHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtOS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtZXhwZWN0ZWQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA4LTE3ICBBbnR0aSBLb2l2
aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBDb250ZW50IGluIDxpZnJhbWU+IHNo
b3VsZCBvdmVycmlkZSAidG91Y2gtYWN0aW9uIiBzZXQgaW4gZW1iZWRkaW5nIGRvY3VtZW50CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTAtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0xMC1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmViYTQzYzhhMjcyMTVh
NGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTAt
ZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJ
blNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0xMC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEwLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2I5NDk1Njk2Y2VlMDAxMDg1ZWZiNjY3MGU5MWY3MDcwOTJmNmI4YgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMC5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9
ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2Nv
bnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZs
b2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJu
IHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAordHlwZWRl
ZiBGb28gPSBpbnQ7CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIEZvbyB4OworICAgIHJldHVy
biBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkg
eworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0
IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
ZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNo
YWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0
aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25T
dGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFs
cGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29s
b3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5k
LCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRl
cHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hh
ZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0
cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9
IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlv
dXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxp
bmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZl
VG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0
YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9
OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5l
KHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNj
cmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
ckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
dmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
NV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRl
eHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3Jp
cHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hh
aW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAx
fTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0
dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAi
c3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFj
aG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRv
cik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0s
IFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewor
ICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAg
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
fSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0xMS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTExLWV4cGVjdGVkLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmRkMTg0ZGJmZWJhNDNjOGEyNzIxNWE0Yjk2ZmYxMThiYjc3MDczNQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMS1leHBlY3RlZC5odG1sCkBAIC0wLDAg
KzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8
c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEx
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMWRhMTU5ZDRmZWJl
YWEzMDFhZTNiZDRkMTA3OTc4OTRlNzZmNDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLTExLmh0bWwKQEAgLTAsMCArMSwxMDggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNl
ID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29u
c3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBpbnQgeDsKK30K
KworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bv
c2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28gZjsKKyAgICByZXR1cm4gZmxvYXQ0KDEs
IDEsIDEsIDEpOworfQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25z
dCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2
ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9k
dWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAg
ICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5
ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJv
bnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0g
e307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0g
W3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNr
OiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxT
dGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9u
OiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBh
dHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOwor
ICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119Owor
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCBy
YXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4
SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9y
KTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7
CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFz
LmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2
aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4
dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0
cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91
dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisg
ICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsg
Ly8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29u
c3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJl
c29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xl
YXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7
CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVw
dGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21t
YW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5m
aW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsK
K30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChk
ZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNx
dWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTItZXhw
ZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMi1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZkZDE4NGRiZmViYTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMTItZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9
ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2Nv
bnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0
ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMi5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTEyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTNhMmY0ODA0NjE1ZjYxZTBjNzBiMmQ5
MzUyMjJhYWY4MDEwNjM0NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMi5o
dG1sCkBAIC0wLDAgKzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAi
PjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRl
eCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBT
Vl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50
U2hhZGVyU291cmNlID0gYAorZW51bSBGb28geworICAgIHYKK30KK2ZyYWdtZW50IGZsb2F0NCBm
cmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQg
MCB7CisgICAgRm9vIGYgPSBGb28udjsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOwor
fQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFk
ZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBp
c1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhT
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJm
cmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xl
LXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ci
LCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJy
Z2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBH
UFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7
CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6
ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6
IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZl
cnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVy
dGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9u
U3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBs
ZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZF
UlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFz
eW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
N10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4
QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQo
ImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6
ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVT
d2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9
IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVW
aWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29t
bWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBj
b25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRh
Y2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6
IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVk
fV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3Qg
cmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0
YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5i
ZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5z
ZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygp
OworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAg
ICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2lj
RGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4o
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJh
Y2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTMtZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0xMy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmVi
YTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMTMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMy5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTEzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRiMmQ5MTZjNzNhZjVhMjY2NTYyNGU1MjU3M2I4MWZlYThl
YTkzZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMy5odG1sCkBAIC0wLDAg
KzEsMTA1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gaW50
OwordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRl
KDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3Qg
ZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCit0eXBlZGVmIEZvbyA9IGludDsKK2ZyYWdtZW50IGZs
b2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9U
YXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0
IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVu
Y3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0p
OworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHtt
b2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIi
fTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAg
Y29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJu
b25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQg
PSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFs
cGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJp
dHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNv
bnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07Cisg
ICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07
CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2
ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFn
bWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0
YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5
b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2Uu
Y3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVy
QXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVm
ZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNd
ID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEz
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBj
b25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9
OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBD
aGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0
Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRl
eHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0g
ZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNj
cmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAg
IGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNz
KHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVy
cygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQs
IDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBj
b21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1
ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4o
ZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9
LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE0LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTQtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRi
OTZmZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE0LWV4
cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdo
dD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5T
b2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMTQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRiNWUxYWJhMTU3ZGUyNzFhMjU0NDEwNTJkZmJhYzhmNDRlZWNmMTcKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTQuaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJj
YW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25z
dCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBpbnQgeDsKK30KK3Zl
cnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkg
OiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdt
ZW50U2hhZGVyU291cmNlID0gYAorc3RydWN0IEZvbyB7CisgICAgaW50IHg7Cit9CitmcmFnbWVu
dCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDog
U1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCitj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5j
IGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNX
SExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRy
dWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2Ug
PSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hh
ZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwor
ICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2Rl
OiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0i
LCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3Jp
dGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAg
ICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9
OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0
ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQg
PSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwg
ZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29s
b3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEs
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRl
eEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAt
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5t
YXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Cisg
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
KyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1
ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJh
dyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29u
c3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5n
ZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50
aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0p
OworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZElu
U29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLTE1LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRkMTg0ZGJmZWJhNDNjOGEyNzIx
NWE0Yjk2ZmYxMThiYjc3MDczNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0x
NS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3Vu
ZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTE1Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTUuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45NTdjOTY0YWQ1NmQ0MThjNWE4M2ZiN2I5MGIyOGMxZmRiMzZmNmY0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE1Lmh0bWwKQEAgLTAsMCArMSwxMDkgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBp
ZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0Pgor
Y29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAorZW51bSBGb28geworICAgIHgKK30KK3ZlcnRl
eCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBT
Vl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50
U2hhZGVyU291cmNlID0gYAorZW51bSBGb28geworICAgIHgKK30KK2ZyYWdtZW50IGZsb2F0NCBm
cmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQg
MCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24g
c3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAg
IGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6
IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAg
ICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3Qg
cmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07
CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxl
bmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxM
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0
dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29u
c3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAg
Y29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhC
dWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmlj
ZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJy
YXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBz
d2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAg
IGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRl
c2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVu
dFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUu
Y3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNl
LmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6
IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1l
bnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVh
ciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9y
ID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0
IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRl
clBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5k
ZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5j
dGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTE2LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTYt
ZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRiOTZmZjEx
OGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE2LWV4cGVjdGVk
Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMTYuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNi5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI5YTRmNGEzOWYwOWNmN2Y3MWQ2Y2JiY2MzOTdmMzQ4MmVmYTZiYjEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMTYuaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5j
dGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMi
IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0
ZXhTaGFkZXJTb3VyY2UgPSBgCitmbG9hdDQgaGVscGVyKCkgeworICAgIHJldHVybiBmbG9hdDQo
MCwgMCwgMCwgMCk7Cit9Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRp
b24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsK
K31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2Zsb2F0NCBoZWxwZXIoKSB7
CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2ZyYWdtZW50IGZsb2F0NCBmcmFn
bWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7
CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNv
bnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZy
YWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBj
b25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFz
dGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Cisg
ICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQs
IGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisg
ICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJp
YnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3Qg
aW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29u
c3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZm
ZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5j
cmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdl
LCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVw
dGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBl
bGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVu
ZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5U
ICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIo
dmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZm
ZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlC
dWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5Wzld
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAg
Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNv
bnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2Ny
aXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRl
eHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3Jl
YXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNy
ZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAs
IGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6
IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIs
IHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0g
e2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJl
bmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBh
c3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQ
aXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVy
dGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlv
bigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTE3LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTctZXhw
ZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRiOTZmZjExOGJi
NzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE3LWV4cGVjdGVkLmh0
bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48
L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMTcuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNj
OWJmNDc0M2I0Yjg0MTJhOTU1YjBkOWZjNDg4M2ZiM2JmNzI3YzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMTcuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlv
bnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdp
ZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhT
aGFkZXJTb3VyY2UgPSBgCit0eXBlZGVmIEZvbyA9IGZsb2F0OwordmVydGV4IGZsb2F0NCB2ZXJ0
ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsK
KyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2Ug
PSBgCit0eXBlZGVmIEZvbyA9IGZsb2F0OworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28g
eCA9IDE7CisgICAgcmV0dXJuIGZsb2F0NCh4LCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0
cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRy
eVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1
bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsK
KyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29u
c3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25l
In07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhh
QmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMu
QUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0
IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAg
Y29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07Cisg
ICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0
ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRl
dmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVu
dFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRl
cywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0
OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVy
QXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0g
MTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
Nl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOwor
CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25z
dCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9Owor
ICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFp
bkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3Vy
cmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1
cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAs
IGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFj
aG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJj
bGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlw
dG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNv
bnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJl
bmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShy
ZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygw
LCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEs
IDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21t
YW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVu
Y3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBm
dW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MTgtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRiOTZm
ZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4LWV4cGVj
dGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMTguaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgxMzdlNjViMzY3MTM5MWYyNzA5ZDNhMDFlNTZjMDZkOTQzYTg3N2IKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTguaHRtbApAQCAtMCwwICsxLDExMSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1m
dW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52
YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2
ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQordmVy
dGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6
IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21l
bnRTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorZnJhZ21l
bnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6
IFNWX1RhcmdldCAwIHsKKyAgICBGb28gZjsKKyAgICBmLnggPSAxOworICAgIHJldHVybiBmbG9h
dDQoZi54LCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJh
Z21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFn
bWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdl
ID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVy
In07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJM
b2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRl
OiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lu
cHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9Owor
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3Bv
bG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUs
IHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVz
Y3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0
ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
OF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
NV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9y
ID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9
IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNv
bnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBj
b25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXco
KTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9Owor
ICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVW
aWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9y
ZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQg
PSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVu
dHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBd
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVu
Y29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVm
ZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAg
c3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3
V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTE5LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTktZXhwZWN0ZWQuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRiOTZmZjExOGJiNzcwNzM1Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE5LWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwx
MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2Fu
dmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3Jp
cHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Citk
cmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTkuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0xOS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMzMyYTUwZDU3ZDM4YjBh
YzVmMDU1M2ZhNjg5NTNiNTEwOTE1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTkuaHRtbApAQCAtMCwwICsxLDExMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdo
dD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBg
CitlbnVtIEZvbyB7CisgICAgeAorfQordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0
IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9z
aXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitlbnVtIEZvbyB7
CisgICAgeCA9IDAsCisgICAgeSA9IDEKK30KK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRl
cihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgaW50
IHkgPSBpbnQoRm9vLnkpOworICAgIHJldHVybiBmbG9hdDQoZmxvYXQoeSksIDEsIDEsIDEpOwor
fQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFk
ZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBp
c1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhT
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJm
cmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xl
LXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ci
LCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJy
Z2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBH
UFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7
CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6
ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6
IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZl
cnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVy
dGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9u
U3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBs
ZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZF
UlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFz
eW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
N10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4
QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQo
ImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6
ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVT
d2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9
IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVW
aWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29t
bWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBj
b25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRh
Y2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6
IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVk
fV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3Qg
cmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0
YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5i
ZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5z
ZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygp
OworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAg
ICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2lj
RGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4o
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJh
Y2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMi1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTItZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0
M2M4YTI3MjE1YTRiOTZmZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzLTItZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9
IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJh
Y2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMi5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU1ZDI2YjM3OGU2ZmYwMzUwNTJhYzEzZTQ3MWU1NjFkNWM4MWQyYzUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMi5odG1sCkBAIC0wLDAgKzEsMTA2
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAg
cmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAor
ZmxvYXQ0IGhlbHBlcigpIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9u
KSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gaGVscGVyKCk7Cit9CitgOworCitjb25zdCBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0
aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmlj
ZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDog
dHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsK
KyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9k
dWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07
CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNv
bnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9u
ZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0g
e307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBo
YUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRz
LkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25z
dCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAg
IGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19Owor
ICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVy
dGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21l
bnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0
ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91
dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNy
ZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFy
cmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZl
ckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9
IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsK
KworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29u
c3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsK
KyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hh
aW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1
cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0
dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRl
dmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAw
LCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRh
Y2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAi
Y2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3Jp
cHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBj
b25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhy
ZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
cmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMo
MCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAx
LCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1
ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1
bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAg
ICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwg
ZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdh
cmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MjAtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4
ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjAtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjAu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5YzhhYjZmODM0ZDUw
N2Y1YjZlN2Q3NTU4MjYwMzg3MmI0NzVmNDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMjAuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJj
ZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJp
YnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2Nv
bnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZmxvYXQ0IGhlbHBlcigpIHsKKyAgICByZXR1
cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorZmxvYXQ0IGhlbHBlcigpIHsKKyAgICByZXR1cm4g
ZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZs
b2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4g
aGVscGVyKCk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBj
b25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVu
dFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50
U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7
bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsK
KyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9s
b2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7
ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVz
ID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVN
YXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5j
aWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0
aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2
LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRd
OworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAg
ICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119
OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0
KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUo
InZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVy
dGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9u
U3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBs
ZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAgIGlmICh4KQor
ICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRl
c3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
IH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlzaEpTVGVz
dCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0yMS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgy
ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0yMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwMzJmZThhZmE0MGJlMzIwMjQzMzk3
OGZiZmNjMGIyNGVkYzk5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEu
aHRtbApAQCAtMCwwICsxLDY2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3Zl
cnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkg
OiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdt
ZW50U2hhZGVyU291cmNlID0gYAordHlwZWRlZiBGb28gPSBpbnQ7Cit0eXBlZGVmIEZvbyA9IGlu
dDsKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Q
b3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsK
K30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRl
eFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNo
YWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZl
cnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0
IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJp
YW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6
ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1h
dDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07
IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0g
bnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZv
cm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0
ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29u
c3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yKTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlv
biIpOworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwg
ZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29s
b3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEs
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisgICAg
cmV0dXJuIGRldmljZS5wb3BFcnJvclNjb3BlKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3Rh
cnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgaWYgKHgpCisgICAgICAgICAg
ICB0ZXN0UGFzc2VkKCIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdEZhaWxlZCgi
Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBm
dW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTIyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMi1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1
IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMi5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTIyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY0ZmM5Y2QyZTgzZjczMzNkNGMwM2QwYTAyYzNmNWE5
ZDdjZTYyMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMi5odG1sCkBAIC0w
LDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0
NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0
aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBpbnQgeDsKK30KK3N0cnVjdCBGb28geworICAg
IGludCB4OworfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlv
biA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEs
IDEsIDEpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29u
c3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
dmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRT
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNo
YWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21v
ZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Cisg
ICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9n
eSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zy
b250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9
IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9
IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFz
azogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2ls
U3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlv
bjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwg
YXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsK
KyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsK
KyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChw
aXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2
YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRl
eFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0
YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVD
b3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
KTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsK
KyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBpZiAoeCkKKyAg
ICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0
RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9
KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rlc3Qo
KTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMjMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIzLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIzLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIzLmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMjMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZGRjMWYwN2I5MGE4NDU2N2NlNmFlNjAy
MmJkYTg2NmNhNzBiZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIzLmh0
bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCit2ZXJ0
ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDog
U1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVu
dFNoYWRlclNvdXJjZSA9IGAKK2VudW0gRm9vIHsKKyAgICB4Cit9CitlbnVtIEZvbyB7CisgICAg
eAorfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNW
X1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEp
OworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVy
dGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4
U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNv
dXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTog
dmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29u
c3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0
cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFj
ZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9Owor
ICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9y
bWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9
XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUg
PSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwg
Zm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmli
dXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBj
b25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0
aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAg
ICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBz
dGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBpZiAoeCkKKyAgICAgICAg
ICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0RmFpbGVk
KCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30s
IGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30p
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMjQtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNC1leHBlY3RlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjZkZDE4NGRiZmViYTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjQtZXhwZWN0ZWQuaHRtbApAQCAtMCww
ICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMi
KTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdw
dS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0y
NC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRhMmQwN2U3OGY1
MzA5ZTBlNmRiNWNhOTYwZTFkM2ZmMTJiYTQ0MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0yNC5odG1sCkBAIC0wLDAgKzEsMTA2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJj
ZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJp
YnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2Nv
bnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZmxvYXQgc2F0dXJhdGUoZmxvYXQgeCwgZmxv
YXQgeSkgeworICAgIHJldHVybiAxOworfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1
cm4gZmxvYXQ0KHNhdHVyYXRlKDMsIDQpLCBzYXR1cmF0ZSgyKSwgMSwgMSk7Cit9CitgOworCitj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5j
IGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNX
SExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRy
dWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2Ug
PSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hh
ZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwor
ICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2Rl
OiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0i
LCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3Jp
dGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAg
ICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9
OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0
ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQg
PSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwg
ZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29s
b3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEs
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRl
eEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAt
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5t
YXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Cisg
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
KyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1
ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJh
dyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29u
c3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5n
ZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50
aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0p
OworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZElu
U29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMjUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3
NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjUt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMjUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzNDIzNGRl
NzZiOTc4NjU5MTY3MzVkYzNmNDc5NmEzYjNjNmJjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMjUuaHRtbApAQCAtMCwwICsxLDY4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRl
clNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6
IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQor
ZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0
aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQor
YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmcmFnbWVudCBmbG9hdDQgZnJh
Z21lbnRTaGFkZXIyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAw
IHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKworYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0
cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRy
eVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1
bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsK
KyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29u
c3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25l
In07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhh
QmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMu
QUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0
IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAg
Y29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07Cisg
ICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0
ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRl
dmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisg
ICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRp
dmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2ls
U3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91
dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxp
bmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9y
U2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNl
KCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rp
b24oeCkgeworICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAg
ICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQ
YXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjYtZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0yNi1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmVi
YTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMjYtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNi5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTI2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGY4MGE3NWNjNjI3NTljM2I0Yjg4ODk5NzFlNzZiYWEyMDg3
OWE4NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNi5odG1sCkBAIC0wLDAg
KzEsMTA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVy
dGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7
CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1
cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBgCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
U1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwg
MSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRl
eFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNo
YWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZl
cnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0
IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJp
YW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6
ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1h
dDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07
IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0g
bnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZv
cm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0
ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29u
c3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9
IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6
YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwg
c2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZs
b2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNh
Z2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdy
aXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0g
MTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29u
dGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZv
cm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZp
Z3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0
dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4
dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25z
dCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQor
ICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xv
ckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRh
cmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9y
OiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBj
b25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5j
aWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNv
ZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQ
YXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgp
OworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworfQoraWYg
KHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworZ2V0
QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSku
dGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRlU3F1YXJlT25C
bHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMjctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0
NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMjctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMjcuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM5MWMxNTRhZjQzNjUwZjVkNWM1ZDU5Yzc1ODIyMDI3OTJjZmI3M2QKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjcuaHRtbApAQCAtMCwwICsxLDY4IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Nv
bnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZs
b2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJu
IHBvc2l0aW9uOworfQorYDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmcmFn
bWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24p
IDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitmcmFn
bWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24s
IGJvb2wgaXNGb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKSA6IFNWX1RhcmdldCAwIHsKKyAgICBy
ZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQo
ZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Cisg
ICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0
IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
dmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdt
ZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25z
dCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVy
aXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAg
Y29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBj
b25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNv
bG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAg
Y29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0
ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5w
dXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3Qg
aW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJz
OiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVh
dGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2aWNl
LnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9n
eSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZl
cnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsK
K30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihm
dW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkgewor
ICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoKTsK
KyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0
ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0zLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmU0ZjI0NDYzMjhj
ZWJiNjM0MzRkODUxZDQ0YTQzYzk5ZWFlZTI5MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0zLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UgPSBgCitmbG9hdDQgaGVscGVyKCkgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7
Cit9Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1
dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25z
dCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRl
cihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0
dXJuIGhlbHBlcigpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJh
Z21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFn
bWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdl
ID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVy
In07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJM
b2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRl
OiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lu
cHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9Owor
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNj
b3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBpZiAo
eCkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5pc2hK
U1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtNC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMx
ODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy00LWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTQuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy00Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRlYzhiYjFjNzEwNWJiZTVhMGFkODQ4
NTlhMWY2MjUwZmIyNTcyNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy00Lmh0
bWwKQEAgLTAsMCArMSw2NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCit0eXBl
ZGVmIEZvbyA9IGludDsKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlv
biA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOwor
fWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZnJhZ21lbnQgZmxvYXQ0IGZy
YWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAw
IHsKKyAgICBGb28geDsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKwor
YXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNl
LCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZp
Y2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRT
dGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21l
bnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJp
cCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3Vs
bE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1
bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29s
b3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAg
IAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxv
YXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0
cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJ
bnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZGV2
aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dl
dEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2Up
LnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQYXNz
ZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkg
eworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4
MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy01LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy01Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmRjMThmZTg3NDVlMTI1ZDhiZTY2ZTVlNGRmOGIwNmYzNTdkODVlZQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy01Lmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citj
b25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBpbnQgeDsKK30K
KwordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRl
KDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3Qg
ZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIEZvbyB4
OworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5jdGlv
biBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2Uu
Y3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRy
dWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFk
ZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Cisg
ICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVs
ZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9Owor
ICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25z
dCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUi
fTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9
OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFC
bGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5B
TEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3Qg
YXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBj
b25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAg
ICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3Ig
PSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2
aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAg
ICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2
ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxT
dGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JT
Y29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2Uo
KS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlv
bih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBh
c3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy02LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy02LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0
NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTYtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtNi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTYuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDVl
NDY4NGM4MDZmNDhhNGI2YjIwOGRjZTEyNTBlY2ZlNjYxOTAzCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTYuaHRtbApAQCAtMCwwICsxLDY4IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNo
YWRlclNvdXJjZSA9IGAKK2VudW0gRm9vIHsKKyAgICB2Cit9Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24gewor
ICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9
IGAKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Q
b3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgRm9vIHggPSBGb28udjsKKyAgICByZXR1cm4g
ZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNl
KSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1v
ZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29u
c3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRl
eFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4
U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmlt
aXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlv
blN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3Qg
YWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBj
b2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxl
bmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3Qg
ZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtz
aGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7
c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRz
ID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1
dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExh
eW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBl
bGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hF
cnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFz
dGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElu
cHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dp
bmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlv
bihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAg
ICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBm
aW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTctZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRiOTZm
ZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTctZXhwZWN0
ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0
MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3
YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy03Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZjZDFiNGY5NjcyYjhiMWZjOTVmMzkwOTI3MDZiMDViOTlhNjU3YTEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtNy5odG1sCkBAIC0wLDAgKzEsMTA5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHZlcnRl
eFNoYWRlclNvdXJjZSA9IGAKK2Zsb2F0NCBoZWxwZXIoKSB7CisgICAgcmV0dXJuIGZsb2F0NCgw
LCAwLCAwLCAwKTsKK30KK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlv
biA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOwor
fWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZmxvYXQ0IGhlbHBlcigpIHsK
KyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorZnJhZ21lbnQgZmxvYXQ0IGZyYWdt
ZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsK
KyAgICByZXR1cm4gaGVscGVyKCk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkg
eworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0
IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTog
ZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNo
YWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0
aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25T
dGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFs
cGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29s
b3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5k
LCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRl
cHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hh
ZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0
cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9
IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlv
dXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxp
bmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZl
VG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0
YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9
OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5l
KHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNj
cmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
ckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
dmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
NV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRl
eHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3Jp
cHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hh
aW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAx
fTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0
dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAi
c3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFj
aG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRv
cik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0s
IFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewor
ICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAg
ZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
fSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy04LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy04LWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBA
QAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wMTJhNGZkMGMyNmRmZmFlMzY3NDc1YzM4NTc1ZmJkNWIxYjk3
OTFiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTguaHRtbApAQCAtMCwwICsx
LDY3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVy
dGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7
CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNl
ID0gYAorZmxvYXQgc2F0dXJhdGUoZmxvYXQgeCkgeworICAgIHJldHVybiAwOworfQorZnJhZ21l
bnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6
IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKwor
YXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNl
LCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZp
Y2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRT
dGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21l
bnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJp
cCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3Vs
bE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1
bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29s
b3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAg
IAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxv
YXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0
cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJ
bnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZGV2
aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dl
dEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2Up
LnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBpZiAoeCkKKyAgICAgICAgICAgIHRlc3RQYXNz
ZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkg
eworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4
MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy05LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy05Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGE2YzA5NTI5NDFkOTAwZjc1Yzk2NGEwOTNlYjA5N2MwZGYwNDBkMQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy05Lmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdw
dS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citj
b25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihm
bG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVy
biBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK3R5cGVk
ZWYgYm9vbDIgPSBpbnQ7CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBv
c2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQo
MSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAg
ICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtj
b2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFn
bWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdt
ZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2Ug
PSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIi
fTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRv
cG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUg
PSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3Rh
dGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3Jp
dGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0
ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxv
Y2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6
IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5w
dXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisK
KyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czog
W119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2Nv
cGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7
dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0
aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNh
bXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmlj
ZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAgIGlmICh4
KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlv
bigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOwor
ICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlzaEpT
VGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLWV4cGVjdGVk
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmRkMTg0ZGJmZWJhNDNjOGEyNzIxNWE0Yjk2ZmYxMThiYjc3MDcz
NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDIwYTgyMmVjZTgzZmYw
NzQ4N2E4ZmQ0OGYyYmM5NzU4YmVhYmFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9
IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAor
dmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDAp
KSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJh
Z21lbnRTaGFkZXJTb3VyY2UgPSBgCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxv
YXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBm
bG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgewor
ICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUo
e2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZy
YWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJh
Z21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFn
ZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRl
ciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1v
ZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZl
VG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0
ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhh
QmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JT
dGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3
cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRo
U3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVy
TG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlk
ZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtp
bnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsK
KworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRz
OiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlw
dG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2Fn
ZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRl
c2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVy
dGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQg
PSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRv
ciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4g
PSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBj
b25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3
KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsK
KyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJl
VmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3Rv
cmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1l
bnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2Rl
ciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFsw
XSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQ
YXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRF
bmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1
ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVu
dGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAg
IHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJh
d1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="392456"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376958</attachid>
            <date>2019-08-21 18:07:23 -0700</date>
            <delta_ts>2019-08-21 19:50:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195446-20190821180722.patch</filename>
            <type>text/plain</type>
            <size>253580</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4OTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZlZmU5Mzg1M2ZmMDJk
YTIxNjU5NjkwMWY3ODljNmM2ZjlkYmE1Yi4uMGRjYWU0MmEzN2ExM2IyMWExODdkOWNjMDc1YzI4
ODIxMTlmMGZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2OCBAQAorMjAxOS0wOC0yMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0g
VmVydGV4IHNoYWRlciBhbmQgZnJhZ21lbnQgc2hhZGVyIG5lZWQgdG8gYmUgYWJsZSB0byBjb21l
IGZyb20gdHdvIGRpZmZlcmVudCBwcm9ncmFtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBC
YXJhdGkuCisKKyAgICAgICAgV2hlbiBhbiBhdXRob3IgY29uZmlndXJlcyBXZWJHUFUgdG8gcmVu
ZGVyIHRoaW5ncywgdGhlIGF1dGhvciBwcm92aWRlcyBhIHZlcnRleCBzaGFkZXIgYW5kIGEgZnJh
Z21lbnQKKyAgICAgICAgc2hhZGVyLCBhbmQgdGhleSBib3RoIGV4ZWN1dGUgd2l0aGluIHRoZSBz
YW1lIGRyYXcgY2FsbC4gSXQncyBjb21tb24gZm9yIGF1dGhvcnMgY29taW5nIGZyb20gV2ViR0wg
dG8KKyAgICAgICAgcHV0IHRoZSB0d28gc2hhZGVycyBpbiBkaXN0aW5jdCBmaWxlcy4gVW50aWwg
dGhpcyBwYXRjaCwgV0hMU0wgd2FzIHVuYWJsZSB0byBwcm9jZXNzIHR3byBzaGFkZXJzIGZyb20K
KyAgICAgICAgZGlmZmVyZW50IHNvdXJjZXMgd2hpY2ggd2VyZSBtZWFudCB0byBiZSBob29rZWQg
dG9nZXRoZXIuCisKKyAgICAgICAgVGhlIGZpcnN0IHRoaW5nIHRoaXMgcGF0Y2ggZG9lcyBpcyBh
ZGQgdGhlIG5vdGlvbiBvZiBhICJzaGFkZXIgbW9kdWxlIiB0byB0aGUgV0hMU0wgY29tcGlsZXIu
IFRoaXMKKyAgICAgICAgcmVwcmVzZW50cyB0aGUgc291cmNlIGNvZGUgY29udGFpbmluZyBvbmUg
b3IgbW9yZSBzaGFkZXJzLiBXaGVuIHRoZSBhdXRob3Igd2FudHMgdG8gYWN0dWFsbHkgY29tcGls
ZQorICAgICAgICB0aGVpciBzb3VyY2UsIHRoZXkgc3VwcGx5IG9uZSBvciBtb3JlIHNoYWRlciBt
b2R1bGVzIHRvIHRoZSBjb21waWxlci4gVGhlIGNvbXBpbGVyIHRoZW4gbG9va3MgaW4gdGhlCisg
ICAgICAgIGZpcnN0IG1vZHVsZSBmb3IgdGhlIHZlcnRleCBzaGFkZXIgYW5kIHRoZSBzZWNvbmQg
bW9kdWxlIGZvciB0aGUgZnJhZ21lbnQgc2hhZGVyLiBUaGUgdHdvIG1vZHVsZXMgYXJlCisgICAg
ICAgIHBhc3NlZCBieSByZWZlcmVuY2UsIHNvIHRoZXkgbWF5IHJlZmVyIHRvIHRoZSBzYW1lIHVu
ZGVybHlpbmcgb2JqZWN0LCB3aGljaCBpcyBzdXBwb3J0ZWQuCisKKyAgICAgICAgU2hhZGVyIG1v
ZHVsZXMgaGF2ZSB0aGlzIGludGVyZXN0aW5nIGJlaGF2aW9yIHdoZXJlLCB3aXRoaW4gYSBzaGFk
ZXIgbW9kdWxlLCBmdW50aW9uIC8gdHlwZSBuYW1lcyBtYXkKKyAgICAgICAgcmVmZXIgdG8gZWFj
aCBvdGhlciwgYnV0IG1heSBub3QgcmVmZXIgdG8gYW55IG90aGVyIG5hbWUgd2l0aGluIGFueSBv
dGhlciBzaGFkZXIgbW9kdWxlLiBUaGV5IGJlaGF2ZQorICAgICAgICBhcyBpZiBhbGwgdGhlIG5h
bWVzIGluc2lkZSB0aGUgbW9kdWxlIGFyZSBub3QgZXhwb3J0ZWQuIFNvLCBpdCB3b3VsZCBzZWVt
IHRoYXQgdGhlIG1vc3QgbmF0dXJhbCB3YXkgdG8KKyAgICAgICAgc3VwcG9ydCB0aGlzIHdvdWxk
IGJlIHRvIHJ1biB0aGUgV0hMU0wgY29tcGlsZXIgYW5kIHRoZSBNU0wgY29tcGlsZXIgdHdpY2Ug
aW5kZXBlbmRlbnRseSwgb25jZSBmb3IgZWFjaAorICAgICAgICBtb2R1bGUuIEhvd2V2ZXIsIHRo
aXMgbWVhbnMgdGhhdCBvdXIgY29tcGlsZSB0aW1lcyB3b3VsZCBkb3VibGUsIHdoaWNoIHdvdWxk
IGJlIHVuZm9ydHVuYXRlLiBJbnN0ZWFkLAorICAgICAgICBhIG1vcmUgcGVyZm9ybWFudCBvcHRp
b24gd291bGQgYmUgdG8gbWFrZSB0aGUgV0hMU0wgY29tcGlsZXIgc21hcnQgZW5vdWdoIHRvIGhh
bmRsZSBtdWx0aXBsZSBzaGFkZXIKKyAgICAgICAgbW9kdWxlcyBhdCBvbmNlLCBhbmQgdG8gcHJv
ZHVjZSBhIHNpbmdsZSBtZXJnZWQgb3V0cHV0IHByb2dyYW0gdGhhdCBjb250YWlucyBldmVyeXRo
aW5nLiBJdCBkb2VzIHRoaXMKKyAgICAgICAgYnkgcGFyc2luZyBhbGwgdGhlIHNoYWRlciBtb2R1
bGVzIGludG8gYSBzaW5nbGUgUHJvZ3JhbSBvYmplY3QsIGJ1dCByZW1lbWJlcmluZyB3aGljaCBp
dGVtcyBpbiB0aGUgCisgICAgICAgIFByb2dyYW0gY2FtZSBmcm9tIHdoaWNoIHBsYWNlcy4KKwor
ICAgICAgICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IHRlYWNoaW5nIHRoZSBXSExTTCBjb21waWxl
ciBhYm91dCAibmFtZXNwYWNlcy4iIFRoZXJlIGFyZSB0aHJlZSBuYW1lc3BhY2VzOiBvbmUKKyAg
ICAgICAgZm9yIGVhY2ggc2hhZGVyIG1vZHVsZSwgYW5kIGFuIGFkZGl0aW9uYWwgb25lIGZvciB0
aGUgc3RhbmRhcmQgbGlicmFyeS4gRXZlcnkgZ2xvYmFsIG9iamVjdCAoZS5nLgorICAgICAgICBu
YW1lZCB0eXBlcyBhbmQgZnVuY3Rpb25zKSBrbm93cyB3aGljaCBuYW1lc3BhY2UgaXQgbGl2ZXMg
aW5zaWRlLiBUaGUgTmFtZVJlc29sdmVyIGhhcyBiZWVuIGVkdWNhdGVkCisgICAgICAgIHRvIHVu
ZGVyc3RhbmQgbmFtZXNwYWNlcywgc28gd2hlbiB5b3UgYXNrIGl0IGZvciBhIG5hbWUgaW4gYSBw
YXJ0aWN1bGFyIG5hbWVzcGFjZSwgaXQgd2lsbCBsb29rIHVwCisgICAgICAgIGFsbCB0aGUgbmFt
ZXMgYm90aCBpbiB0aGF0IG5hbWVzcGFjZSBhbmQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkncyBu
YW1lc3BhY2UsIGFuZCBpdCB3aWxsIHVuaW9uIHRoZQorICAgICAgICByZXN1bHRzIHRvZ2V0aGVy
LgorCisgICAgICAgIEZ1bmN0aW9uIG92ZXJsb2FkIHJlc29sdXRpb24gZG9lc24ndCBhY3R1YWxs
eSBnbyB0aHJvdWdoIHRoZSBuYW1lIHJlc29sdmVyOyBpbnN0ZWFkLCBpdCdzIGhhbmRsZWQgYnkK
KyAgICAgICAgc29ydGluZyBhbGwgZnVuY3Rpb25zIGludG8gYnVja2V0cyBzdWNoIHRoYXQgYW55
IENhbGxFeHByZXNzaW9uIG9ubHkgaGFzIHRvIGxvb2sgaW4gYSBzaW5nbGUgYnVja2V0CisgICAg
ICAgIHRvIGZpbmQgYWxsIGl0cyBwb3RlbnRpYWwgb3ZlcmxvYWRzLiBUaGVzZSBidWNrZXRzIGNh
bid0IGJlIGVkdWNhdGVkIGFib3V0IG5hbWVzcGFjZXMgKGNvbnNpZGVyIGEKKyAgICAgICAgZnVu
Y3Rpb24gd2hpY2ggaGFzIG92ZXJsb2FkcyBpbiBhbGwgMyBuYW1lc3BhY2VzIHRoYXQgaXMgY2Fs
bGVkIGZyb20gYm90aCBzaGFkZXIgbW9kdWxlcyAtIGFsbCB0aGUKKyAgICAgICAgb3ZlcmxvYWRz
IG11c3QgZW5kIHVwIGluIHRoZSBzYW1lIGJ1Y2tldCkuIFRoZXJlZm9yZSwgdGhpcyBsb2dpYyBp
cyBtb3ZlZCBpbnRvCisgICAgICAgIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKCksIHdoaWNoIHdp
bGwgbm93IGRpc3JlZ2FyZCBjYW5kaWRhdGUgZnVuY3Rpb25zIGlmIHRoZXkgYXJlIGluIGFuIGlu
YWNjZXNzaWJsZSAKKyAgICAgICAgbmFtZXNwYWNlLgorCisgICAgICAgIFRlc3RzOiB3ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTAu
aHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTExLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMi5o
dG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTMuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE0Lmh0
bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNS5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTYuaHRt
bAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTE3Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOC5odG1s
CisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMTkuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIuaHRtbAor
ICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTIwLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMS5odG1sCisg
ICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMjIuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIzLmh0bWwKKyAg
ICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0yNC5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjUuaHRtbAorICAg
ICAgICAgICAgICAgd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTI2Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy5odG1sCisgICAg
ICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMy5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNC5odG1sCisgICAgICAg
ICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtNS5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNi5odG1sCisgICAgICAgICAg
ICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtNy5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOC5odG1sCisgICAgICAgICAgICAg
ICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtOS5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMuaHRtbAorCisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbjo6bmFtZVNwYWNlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb246OnNl
dE5hbWVTcGFjZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFt
ZVNwYWNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0aWVzLmguCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpOYW1lZFR5cGU6Om5hbWVTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6QVNUOjpOYW1lZFR5cGU6OnNldE5hbWVTcGFjZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OmVtaXRNZXRhbEZ1bmN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6RHVwbGljYXRlRnVuY3Rpb25LZXk6Om9wZXJhdG9yPT0gY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6RnVuY3Rpb25LZXk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OmNoZWNrT3BlcmF0b3JPdmVybG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6Q2hlY2tlcjo6Y2hlY2tTaGFkZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tl
cjo6cmVzb2x2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TExleGVyLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6YWRkKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6Z2V0VHlwZXMpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjpnZXRGdW5jdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok5hbWVDb250ZXh0OjpzZWFyY2hUeXBlcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6OnNlYXJjaEZ1bmN0aW9ucyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6Omdsb2JhbEV4aXN0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6OmxvY2FsRXhpc3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lQ29udGV4dDo6ZXhpc3RzKTogRGVsZXRlZC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZUNvbnRleHQ6OnNldEN1cnJlbnROYW1lU3BhY2UpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lUmVzb2x2ZXI6Ok5hbWVSZXNvbHZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TmFtZVJlc29sdmVyOjp2aXNpdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6cmVzb2x2ZU5hbWVzSW5UeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6cmVzb2x2ZVR5cGVOYW1lc0luRnVuY3Rpb25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok5h
bWVSZXNvbHZlcjo6c2V0Q3VycmVudE5hbWVTcGFjZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNl
cjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6ZmFpbCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpjb25zdW1lSW50ZWdyYWxMaXRlcmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFs
TGl0ZXJhbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZUNvbnN0YW50
RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVR5cGVT
dWZmaXhBYmJyZXZpYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJz
ZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpwYXJzZUJ1aWx0SW5TZW1hbnRpYyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpwYXJzZVJlc291cmNlU2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBh
cnNlcjo6cGFyc2VTdGFnZUluT3V0U2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbk1lbWJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpwYXJzZU51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVZlcnRleE9yRnJhZ21lbnRGdW5jdGlv
bkRlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlUmVn
dWxhckZ1bmN0aW9uRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNl
cjo6cGFyc2VTd2l0Y2hDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBh
cnNlRm9yTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVZhcmlh
YmxlRGVjbGFyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbXBs
ZXRlQXNzaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVBv
c3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJz
ZXI6OnBhcnNlVGVybSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVw
YXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpTaGFkZXJNb2R1bGU6OlNoYWRlck1v
ZHVsZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y3JlYXRlU2hhZGVyTW9kdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpTaGFkZXJNb2R1bGVEZWxldGVyOjpvcGVyYXRvcigpKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVwYXJlU2hhcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpwcmVwYXJlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXBhcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0u
aDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQcm9ncmFtOjphcHBlbmQpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlRnVuY3Rpb25PdmVybG9hZCk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmg6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Om1hdGNoU2VtYW50aWNzKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpmaW5kRW50cnlQb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6aW5jbHVkZVN0YW5kYXJkTGlicmFyeSk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVVNoYWRlck1vZHVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVyTW9k
dWxlOjpwbGF0Zm9ybVNoYWRlck1vZHVsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVT
aGFkZXJNb2R1bGU6OndobHNsTW9kdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVNo
YWRlck1vZHVsZTo6d2hsc2xTb3VyY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OnRyeVNldEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0
Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjp0
cnlTZXRNZXRhbEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVNoYWRlck1vZHVsZU1ldGFs
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVU2hhZGVyTW9kdWxlOjp0cnlDcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R1BVU2hhZGVyTW9kdWxlOjpHUFVTaGFkZXJNb2R1bGUpOgorCiAyMDE5
LTA4LTIxICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkb3B0
IEFWU3lzdGVtQ29udHJvbGxlcl9BY3RpdmVBdWRpb1JvdXRlRGlkQ2hhbmdlTm90aWZpY2F0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGdW5jdGlvbkRlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKaW5kZXggNjgwNWQ2NjY0ZjkwN2M4
M2NkNWI3YWY4ZGE0YmRmYTQ2ZGUyYjJiZC4uYjcyNTZkNTA1NDhmZTk5MDhhNDI3YmY4ZjViMDFk
N2Q5YmUzMTVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaApAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xFbnRyeVBvaW50VHlwZS5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIK
KyNpbmNsdWRlICJXSExTTE5hbWVTcGFjZS5oIgogI2luY2x1ZGUgIldITFNMUGFyc2luZ01vZGUu
aCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlw
ZS5oIgpAQCAtODMsNiArODQsOSBAQCBwdWJsaWM6CiAKICAgICBQYXJzaW5nTW9kZSBwYXJzaW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2luZ01vZGU7IH0KIAorICAgIE5hbWVTcGFjZSBu
YW1lU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX25hbWVTcGFjZTsgfQorICAgIHZvaWQgc2V0TmFt
ZVNwYWNlKE5hbWVTcGFjZSBuYW1lU3BhY2UpIHsgbV9uYW1lU3BhY2UgPSBuYW1lU3BhY2U7IH0K
KwogcHJpdmF0ZToKICAgICBDb2RlTG9jYXRpb24gbV9jb2RlTG9jYXRpb247CiAgICAgQXR0cmli
dXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsKQEAgLTkzLDYgKzk3LDcgQEAgcHJpdmF0ZToKICAg
ICBTdHJpbmcgbV9uYW1lOwogICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zIG1fcGFyYW1ldGVyczsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VtYW50aWM+IG1fc2VtYW50aWM7CisgICAgTmFtZVNwYWNl
IG1fbmFtZVNwYWNlIHsgTmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkgfTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEFTVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMTmFtZVNwYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xOYW1lU3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YmY5ZTNmYjBiZGNjOTgz
MWQ1MzhmY2RiNGJmZWUyZmI5ZDVlYjY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZVNwYWNlLmgKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNU
IHsKKworLy8gRGlmZmVyZW50IHNoYWRlciBtb2R1bGVzIG9wZXJhdGUgaW4gZGlmZmVyZW50IG5h
bWVzcGFjZXMuCisvLyBUaGlzIG1lYW5zIGl0J3MgcG9zc2libGUgdG8gaGF2ZSB0d28gZnVuY3Rp
b25zIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlcywgYXMgbG9uZyBhcyB0aGV5IGFyZSBpbiBkaWZm
ZXJlbnQgbW9kdWxlcy4KK2VudW0gY2xhc3MgTmFtZVNwYWNlIDogdWludDhfdCB7CisgICAgU3Rh
bmRhcmRMaWJyYXJ5ID0gMCwKKyAgICBOYW1lU3BhY2UxID0gMSwKKyAgICBOYW1lU3BhY2UyID0g
MgorfTsKKworY29uc3RleHByIHVuc2lnbmVkIG5hbWVTcGFjZUNvdW50ID0gMzsKKworfQorCit9
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCmluZGV4IDQ1
YjgwMTBjZDI4ZWJkZDUwZjg3MDE3ZWJlN2FjYjM0MmU0Y2Y3YWUuLjU5OWM0NmM1ODUzODViMDE4
N2MwMmViYzlkMmMzMDQzY2NiM2I4NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMQ29kZUxvY2F0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIKICNpbmNsdWRlICJXSExTTFR5cGUuaCIKICNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgpAQCAtNjAsMTIgKzYxLDE1IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0
dXJuIG1fbmFtZTsgfQogCisgICAgTmFtZVNwYWNlIG5hbWVTcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZVNwYWNlOyB9CisgICAgdm9pZCBzZXROYW1lU3BhY2UoTmFtZVNwYWNlIG5hbWVTcGFj
ZSkgeyBtX25hbWVTcGFjZSA9IG5hbWVTcGFjZTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBUeXBlOwogICAgIFR5cGUmIHVuaWZ5Tm9kZUltcGwoKSB7IHJldHVybiAqdGhpczsgfQog
ICAgIENvZGVMb2NhdGlvbiBtX2NvZGVMb2NhdGlvbjsKICAgICBTdHJpbmcgbV9uYW1lOworICAg
IE5hbWVTcGFjZSBtX25hbWVTcGFjZSB7IE5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5IH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAK
aW5kZXggNzA4N2Q4YjMwODc5OWZjODJjNjJlZjcwMjE1ZjMwNjI5MzkxYmU0Zi4uOTRiOTM0ZjEw
NWNkYzMyM2YzMGE5NThmOThiNjRkNjg0OTA0MWVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlv
bldyaXRlci5jcHAKQEAgLTkwMiwxMSArOTAyLDEyIEBAIHByaXZhdGU6CiBSZW5kZXJNZXRhbEZ1
bmN0aW9uRW50cnlQb2ludHMgZW1pdE1ldGFsRnVuY3Rpb25zKFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZXIsIFByb2dyYW0mIHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBNYXRjaGVk
UmVuZGVyU2VtYW50aWNzJiYgbWF0Y2hlZFNlbWFudGljcywgTGF5b3V0JiBsYXlvdXQpCiB7CiAg
ICAgYXV0byYgdmVydGV4U2hhZGVyRW50cnlQb2ludCA9ICptYXRjaGVkU2VtYW50aWNzLnZlcnRl
eFNoYWRlcjsKLSAgICBhdXRvJiBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQgPSAqbWF0Y2hlZFNl
bWFudGljcy5mcmFnbWVudFNoYWRlcjsKKyAgICBhdXRvKiBmcmFnbWVudFNoYWRlckVudHJ5UG9p
bnQgPSBtYXRjaGVkU2VtYW50aWNzLmZyYWdtZW50U2hhZGVyOwogCiAgICAgUmVhY2hhYmxlRnVu
Y3Rpb25zR2F0aGVyZXIgcmVhY2hhYmxlRnVuY3Rpb25zR2F0aGVyZXI7CiAgICAgcmVhY2hhYmxl
RnVuY3Rpb25zR2F0aGVyZXIuVmlzaXRvcjo6dmlzaXQodmVydGV4U2hhZGVyRW50cnlQb2ludCk7
Ci0gICAgcmVhY2hhYmxlRnVuY3Rpb25zR2F0aGVyZXIuVmlzaXRvcjo6dmlzaXQoZnJhZ21lbnRT
aGFkZXJFbnRyeVBvaW50KTsKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50KQorICAg
ICAgICByZWFjaGFibGVGdW5jdGlvbnNHYXRoZXJlci5WaXNpdG9yOjp2aXNpdCgqZnJhZ21lbnRT
aGFkZXJFbnRyeVBvaW50KTsKICAgICBhdXRvIHJlYWNoYWJsZUZ1bmN0aW9ucyA9IHJlYWNoYWJs
ZUZ1bmN0aW9uc0dhdGhlcmVyLnRha2VSZWFjaGFibGVGdW5jdGlvbnMoKTsKIAogICAgIGF1dG8g
ZnVuY3Rpb25NYXBwaW5nID0gZ2VuZXJhdGVNZXRhbEZ1bmN0aW9uc01hcHBpbmcocHJvZ3JhbSk7
CkBAIC05MTksNyArOTIwLDcgQEAgUmVuZGVyTWV0YWxGdW5jdGlvbkVudHJ5UG9pbnRzIGVtaXRN
ZXRhbEZ1bmN0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLAogICAgICAgICAgICAg
ZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CiAgICAg
fQogCi0gICAgcmV0dXJuIHsgZnVuY3Rpb25NYXBwaW5nLmdldCgmdmVydGV4U2hhZGVyRW50cnlQ
b2ludCksIGZ1bmN0aW9uTWFwcGluZy5nZXQoJmZyYWdtZW50U2hhZGVyRW50cnlQb2ludCkgfTsK
KyAgICByZXR1cm4geyBmdW5jdGlvbk1hcHBpbmcuZ2V0KCZ2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50
KSwgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50ID8gZnVuY3Rpb25NYXBwaW5nLmdldChmcmFnbWVu
dFNoYWRlckVudHJ5UG9pbnQpIDogTWFuZ2xlZEZ1bmN0aW9uTmFtZSB7IDAgfSB9OwogfQogCiBD
b21wdXRlTWV0YWxGdW5jdGlvbkVudHJ5UG9pbnRzIGVtaXRNZXRhbEZ1bmN0aW9ucyhTdHJpbmdC
dWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBQcm9ncmFtJiBwcm9ncmFtLCBUeXBlTmFtZXImIHR5cGVO
YW1lciwgTWF0Y2hlZENvbXB1dGVTZW1hbnRpY3MmJiBtYXRjaGVkU2VtYW50aWNzLCBMYXlvdXQm
IGxheW91dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKaW5kZXggZjhh
N2EzZTkxZGQxMjcxN2FmY2Q3ZjZjNGUzMzU3MGY2MWYzYzBhZC4uOWZlZjNhMWRiMjk0YzlkYmZl
MjBkY2QxZDllM2MyOGFiZmRjMGIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0
aW9ucy5jcHAKQEAgLTc1LDYgKzc1LDExIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1fZnVuY3Rp
b24tPm5hbWUoKSAhPSBvdGhlci5tX2Z1bmN0aW9uLT5uYW1lKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICAgICAgaWYgKG1fZnVuY3Rpb24tPm5hbWVTcGFjZSgpICE9IEFTVDo6
TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkKKyAgICAgICAgICAgICYmIG90aGVyLm1fZnVuY3Rp
b24tPm5hbWVTcGFjZSgpICE9IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkKKyAgICAg
ICAgICAgICYmIG1fZnVuY3Rpb24tPm5hbWVTcGFjZSgpICE9IG90aGVyLm1fZnVuY3Rpb24tPm5h
bWVTcGFjZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIEFTU0VSVCht
X2Z1bmN0aW9uLT5pc0Nhc3QoKSA9PSBvdGhlci5tX2Z1bmN0aW9uLT5pc0Nhc3QoKSk7CiAKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uLT5wYXJhbWV0ZXJzKCkuc2l6
ZSgpOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrZXIuY3BwCmluZGV4IGJiOWM2MDE1YWUwOWJmYWJmYzZlM2E3ZGUzZjgwOTY3
ODljYTdlMmYuLjVhZWEzYzUzNDMwZDFiYTg2ODNlNTIxMDY5YzBjMzdhYzQ5ZDJjNmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2Vy
LmNwcApAQCAtMTYxLDcgKzE2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoISFtX2Nhc3RSZXR1cm5UeXBlICE9ICEh
b3RoZXIubV9jYXN0UmV0dXJuVHlwZSkKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGJvb2w+KG1f
Y2FzdFJldHVyblR5cGUpICE9IHN0YXRpY19jYXN0PGJvb2w+KG90aGVyLm1fY2FzdFJldHVyblR5
cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghbV9jYXN0UmV0
dXJuVHlwZSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBzdGF0aWMgYm9vbCBjaGVja1NlbWFudGljcyhW
ZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpbnB1dEl0ZW1zLCBWZWN0b3I8RW50cnlQb2ludAogICAg
IHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29u
c3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgTmFtZUNvbnRl
eHQmIG5hbWVDb250ZXh0KQorc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0
IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIE5hbWVDb250ZXh0
JiBuYW1lQ29udGV4dCwgQVNUOjpOYW1lU3BhY2UgY3VycmVudE5hbWVTcGFjZSkKIHsKICAgICBl
bnVtIGNsYXNzIENoZWNrS2luZCB7CiAgICAgICAgIEluZGV4LApAQCAtNDgzLDE2ICs0ODMsMTQg
QEAgc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXQKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgYXV0byYgdmFsdWVUeXBlID0gKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClb
bnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMV0tPnR5cGUoKTsKICAgICAgICAgYXV0byBnZXR0ZXJO
YW1lID0gZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdWJzdHJpbmcoMCwgZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKS5sZW5ndGgoKSAtIDEpOwotICAgICAgICBhdXRvKiBnZXR0ZXJGdW5jcyA9
IG5hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhnZXR0ZXJOYW1lKTsKLSAgICAgICAgaWYgKCFnZXR0
ZXJGdW5jcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byBnZXR0ZXJG
dW5jcyA9IG5hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhnZXR0ZXJOYW1lLCBjdXJyZW50TmFtZVNw
YWNlKTsKICAgICAgICAgVmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7CiAgICAg
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVu
dFR5cGVSZWZlcmVuY2VzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUV4cGVj
dGVkUGFyYW1ldGVycyAtIDE7ICsraSkKICAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5k
KCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLT50eXBlKCkpOwogICAgICAgICBm
b3IgKGF1dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50VHlwZXMpCiAgICAgICAgICAgICBhcmd1
bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUpOwotICAgICAgICBhdXRvKiBv
dmVybG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRU
eXBlUmVmZXJlbmNlcyk7CisgICAgICAgIGF1dG8qIG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWQoZ2V0dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMsIGN1cnJlbnROYW1l
U3BhY2UpOwogICAgICAgICBpZiAoIW92ZXJsb2FkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBhdXRvJiByZXN1bHRUeXBlID0gb3ZlcmxvYWQtPnR5cGUoKTsKQEAgLTY3Miwx
NCArNjcwLDE1IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4gbV93
cmFwcGVkRmxvYXRUeXBlOwogICAgIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiBtX2dlbmVyaWNQ
b2ludGVyVHlwZTsKICAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIHN0ZDo6dW5pcXVlX3B0
cjxSZXNvbHZpbmdUeXBlPj4gbV90eXBlTWFwOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRl
eEVudHJ5UG9pbnRzOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHM7
Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8
U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRzW0FTVDo6bmFtZVNwYWNlQ291bnRdOworICAgIEhh
c2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHNbQVNUOjpuYW1lU3BhY2VDb3VudF07
CisgICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzW0FTVDo6bmFtZVNwYWNl
Q291bnRdOwogICAgIGNvbnN0IEludHJpbnNpY3MmIG1faW50cmluc2ljczsKICAgICBQcm9ncmFt
JiBtX3Byb2dyYW07CiAgICAgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIG1fY3VycmVudEZ1bmN0
aW9uIHsgbnVsbHB0ciB9OwogICAgIEhhc2hNYXA8RnVuY3Rpb25LZXksIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+LCBGdW5jdGlvbktl
eTo6SGFzaCwgRnVuY3Rpb25LZXk6OlRyYWl0cz4gbV9mdW5jdGlvbnM7CiAgICAgSGFzaE1hcDxB
bmRPdmVybG9hZFR5cGVLZXksIFJlZlB0cjxBU1Q6OlVubmFtZWRUeXBlPiwgQW5kT3ZlcmxvYWRU
eXBlS2V5OjpIYXNoLCBBbmRPdmVybG9hZFR5cGVLZXk6OlRyYWl0cz4gbV9hbmRPdmVybG9hZFR5
cGVNYXA7CisgICAgQVNUOjpOYW1lU3BhY2UgbV9jdXJyZW50TmFtZVNwYWNlIHsgQVNUOjpOYW1l
U3BhY2U6OlN0YW5kYXJkTGlicmFyeSB9OwogfTsKIAogdm9pZCBDaGVja2VyOjp2aXNpdChQcm9n
cmFtJiBwcm9ncmFtKQpAQCAtNzIzLDE4ICs3MjIsMjAgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+
IENoZWNrZXI6OmFzc2lnblR5cGVzKCkKIAogYm9vbCBDaGVja2VyOjpjaGVja1NoYWRlclR5cGUo
Y29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKIHsKKyAg
ICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7
CiAgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKICAg
ICBjYXNlIEFTVDo6RW50cnlQb2ludFR5cGU6OlZlcnRleDoKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGJvb2w+KG1fdmVydGV4RW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5u
YW1lKCkpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fdmVydGV4RW50cnlQ
b2ludHNbaW5kZXhdLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSk7CiAgICAgY2FzZSBB
U1Q6OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVudDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGJvb2w+KG1fZnJhZ21lbnRFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUo
KSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV9mcmFnbWVudEVudHJ5UG9p
bnRzW2luZGV4XS5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkpOwogICAgIGNhc2UgQVNU
OjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJv
b2w+KG1fY29tcHV0ZUVudHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2NvbXB1dGVFbnRyeVBvaW50c1tp
bmRleF0uYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKTsKICAgICB9CiB9CiAKIHZvaWQg
Q2hlY2tlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlv
bikKIHsKKyAgICBtX2N1cnJlbnROYW1lU3BhY2UgPSBmdW5jdGlvbkRlZmluaXRpb24ubmFtZVNw
YWNlKCk7CiAgICAgbV9jdXJyZW50RnVuY3Rpb24gPSAmZnVuY3Rpb25EZWZpbml0aW9uOwogICAg
IGlmIChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgewogICAgICAgICBpZiAo
IWNoZWNrU2hhZGVyVHlwZShmdW5jdGlvbkRlZmluaXRpb24pKSB7CkBAIC03NTEsNyArNzUyLDcg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0aW9uKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIGlm
ICghY2hlY2tPcGVyYXRvck92ZXJsb2FkKGZ1bmN0aW9uRGVmaW5pdGlvbiwgbV9wcm9ncmFtLm5h
bWVDb250ZXh0KCkpKSB7CisgICAgaWYgKCFjaGVja09wZXJhdG9yT3ZlcmxvYWQoZnVuY3Rpb25E
ZWZpbml0aW9uLCBtX3Byb2dyYW0ubmFtZUNvbnRleHQoKSwgbV9jdXJyZW50TmFtZVNwYWNlKSkg
ewogICAgICAgICBzZXRFcnJvcihFcnJvcigiT3BlcmF0b3IgZG9lcyBub3QgbWF0Y2ggZXhwZWN0
ZWQgc2lnbmF0dXJlLiIsIGZ1bmN0aW9uRGVmaW5pdGlvbi5jb2RlTG9jYXRpb24oKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtODM0LDcgKzgzNSw3IEBAIEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiogQ2hlY2tlcjo6cmVzb2x2ZUZ1bmN0aW9uKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyCiAgICAgewogICAgICAgICBhdXRvIGl0ZXIgPSBtX2Z1bmN0aW9ucy5maW5kKEZ1bmN0
aW9uS2V5IHsgbmFtZSwgV1RGTW92ZSh1bm5hbWVkVHlwZXMpLCBjYXN0UmV0dXJuVHlwZSB9KTsK
ICAgICAgICAgaWYgKGl0ZXIgIT0gbV9mdW5jdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgICAgIGlm
IChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWQoaXRlci0+dmFsdWUsIHR5cGVzLCBjYXN0UmV0dXJuVHlwZSkpCisgICAgICAgICAgICBp
ZiAoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92
ZXJsb2FkKGl0ZXItPnZhbHVlLCB0eXBlcywgY2FzdFJldHVyblR5cGUsIG1fY3VycmVudE5hbWVT
cGFjZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTY1MiwxNSArMTY1MywxNCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4
cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQogCiAgICAgaWYgKCFmdW5jdGlvbikgewogICAgICAg
ICBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQgPSBtX3Byb2dyYW0ubmFtZUNvbnRleHQoKTsKLSAg
ICAgICAgaWYgKGF1dG8qIGNhc3RUeXBlcyA9IG5hbWVDb250ZXh0LmdldFR5cGVzKGNhbGxFeHBy
ZXNzaW9uLm5hbWUoKSkpIHsKLSAgICAgICAgICAgIGlmIChjYXN0VHlwZXMtPnNpemUoKSA9PSAx
KSB7Ci0gICAgICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIGNhc3RUeXBlID0gKCpjYXN0VHlw
ZXMpWzBdLmdldCgpOwotICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9u
KHR5cGVzLCAib3BlcmF0b3IgY2FzdCJfc3RyLCBjYWxsRXhwcmVzc2lvbi5jb2RlTG9jYXRpb24o
KSwgJmNhc3RUeXBlKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzRXJyb3IoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbikKLSAgICAg
ICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoY2FzdFR5cGUpOwotICAg
ICAgICAgICAgfQorICAgICAgICBhdXRvIGNhc3RUeXBlcyA9IG5hbWVDb250ZXh0LmdldFR5cGVz
KGNhbGxFeHByZXNzaW9uLm5hbWUoKSwgbV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICAgICAgaWYg
KGNhc3RUeXBlcy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIGNh
c3RUeXBlID0gY2FzdFR5cGVzWzBdLmdldCgpOworICAgICAgICAgICAgZnVuY3Rpb24gPSByZXNv
bHZlRnVuY3Rpb24odHlwZXMsICJvcGVyYXRvciBjYXN0Il9zdHIsIGNhbGxFeHByZXNzaW9uLmNv
ZGVMb2NhdGlvbigpLCAmY2FzdFR5cGUpOworICAgICAgICAgICAgaWYgKGhhc0Vycm9yKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uKQorICAgICAg
ICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldENhc3REYXRhKGNhc3RUeXBlKTsKICAgICAgICAg
fQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDb2RlTG9jYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMQ29kZUxvY2F0aW9uLmgKaW5kZXggOWUzMTczYmExOTkxOWRiNzkzZjE3NzkxYWZi
ZDhjNjcxMmFlODNlZS4uODNlNTZmOTA0YjFjZTM2NjcwYzFmZTAyNzZmODg1MDBhMjNhOGJlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb2Rl
TG9jYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENvZGVMb2NhdGlvbi5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQog
CisjaW5jbHVkZSAiV0hMU0xOYW1lU3BhY2UuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBu
YW1lc3BhY2UgV0hMU0wgewpAQCAtMzUsMzEgKzM3LDYwIEBAIHN0cnVjdCBUb2tlbjsKIAogY2xh
c3MgQ29kZUxvY2F0aW9uIHsKIHB1YmxpYzoKLSAgICBDb2RlTG9jYXRpb24oKSA9IGRlZmF1bHQ7
Ci0gICAgQ29kZUxvY2F0aW9uKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQpCisgICAgQ29kZUxvY2F0aW9uKCkKKyAgICAgICAgOiBtX3N0YXJ0T2Zmc2V0KDB4N0ZGRkZG
RkYpCisgICAgICAgICwgbV9lbmRPZmZzZXQoMHg3RkZGRkZGRikKKyAgICAgICAgLCBtX25hbWVT
cGFjZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFy
eSkpCisgICAgeworICAgIH0KKworICAgIENvZGVMb2NhdGlvbih1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBBU1Q6Ok5hbWVTcGFjZSBuYW1lU3BhY2UpCiAgICAgICAg
IDogbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKICAgICAgICAgLCBtX2VuZE9mZnNldChlbmRP
ZmZzZXQpCi0gICAgeyB9CisgICAgICAgICwgbV9uYW1lU3BhY2Uoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG5hbWVTcGFjZSkpCisgICAgeworICAgIH0KKwogICAgIENvZGVMb2NhdGlvbihjb25zdCBU
b2tlbiYpOworCiAgICAgQ29kZUxvY2F0aW9uKGNvbnN0IENvZGVMb2NhdGlvbiYgbG9jYXRpb24x
LCBjb25zdCBDb2RlTG9jYXRpb24mIGxvY2F0aW9uMikKICAgICAgICAgOiBtX3N0YXJ0T2Zmc2V0
KGxvY2F0aW9uMS5zdGFydE9mZnNldCgpKQogICAgICAgICAsIG1fZW5kT2Zmc2V0KGxvY2F0aW9u
Mi5lbmRPZmZzZXQoKSkKLSAgICB7IH0KKyAgICAgICAgLCBtX25hbWVTcGFjZShzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obG9jYXRpb24xLm5hbWVTcGFjZSgpKSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChsb2NhdGlvbjEubmFtZVNwYWNlKCkgPT0gbG9jYXRpb24yLm5hbWVTcGFjZSgpKTsKKyAgICB9
CiAKLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZz
ZXQ7IH0KLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9mZnNl
dDsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3N0YXJ0T2Zmc2V0OworICAgIH0KKworICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lbmRPZmZzZXQ7CisgICAgfQorCisgICAgQVNU
OjpOYW1lU3BhY2UgbmFtZVNwYWNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxBU1Q6Ok5hbWVTcGFjZT4obV9uYW1lU3BhY2UpOworICAgIH0KIAogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDb2RlTG9jYXRpb24mIG90aGVyKSBjb25zdCAKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX3N0YXJ0T2Zmc2V0ID09IG90aGVyLm1fc3RhcnRPZmZzZXQKLSAgICAgICAg
ICAgICYmIG1fZW5kT2Zmc2V0ID09IG90aGVyLm1fZW5kT2Zmc2V0OworICAgICAgICAgICAgJiYg
bV9lbmRPZmZzZXQgPT0gb3RoZXIubV9lbmRPZmZzZXQKKyAgICAgICAgICAgICYmIG1fbmFtZVNw
YWNlID09IG90aGVyLm1fbmFtZVNwYWNlOwogICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBDb2RlTG9jYXRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsgfQorCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlz
ICE9IENvZGVMb2NhdGlvbigpOyB9CiAKIHByaXZhdGU6Ci0gICAgdW5zaWduZWQgbV9zdGFydE9m
ZnNldCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwotICAgIHVuc2ln
bmVkIG1fZW5kT2Zmc2V0IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07
CisgICAgdW5zaWduZWQgbV9zdGFydE9mZnNldCA6IDMxOworICAgIHVuc2lnbmVkIG1fZW5kT2Zm
c2V0IDogMzE7CisgICAgdW5zaWduZWQgbV9uYW1lU3BhY2UgOiAyOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV0hMU0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMTGV4ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xMZXhlci5jcHAKaW5kZXggMWFhNWRmYTMyNDVhMGU4NTVjZDczNGFlYjdjYjg1ZjM5NDc2
M2I0OC4uYWU1ZjVlMmE5OTQ2YWM5YjFhOGM2ZDM5NWVkMWNkODU4ODg3ZmE0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKQEAg
LTMxNiw3ICszMTYsNyBAQCBhdXRvIExleGVyOjpjb25zdW1lVG9rZW5Gcm9tU3RyZWFtKCkgLT4g
VG9rZW4KICAgICAgICAgYXV0byBvbGRPZmZzZXQgPSBtX29mZnNldDsKICAgICAgICAgbV9vZmZz
ZXQgPSBvZmZzZXQ7CiAgICAgICAgIHNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTsKLSAgICAg
ICAgcmV0dXJuIHsgeyBvbGRPZmZzZXQsIG9mZnNldCB9LCB0eXBlIH07CisgICAgICAgIHJldHVy
biB7IHsgb2xkT2Zmc2V0LCBvZmZzZXQsIG1fbmFtZVNwYWNlIH0sIHR5cGUgfTsKICAgICB9Owog
CiAgICAgc3dpdGNoIChzaGlmdCgpKSB7CkBAIC0xNzAyLDcgKzE3MDIsNiBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNvZGVVbml0KQogICAgIH0KIH0KIAotCiBhdXRvIExl
eGVyOjpsaW5lQW5kQ29sdW1uTnVtYmVyRnJvbU9mZnNldChjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmdWaWV3LCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQpIC0+IExpbmVBbmRDb2x1bW4KIHsKICAgICAv
LyBDb3VudGluZyBmcm9tIDEgdG8gbWF0Y2ggbW9zdCB0ZXh0IGVkaXRvcnMuCkBAIC0xNzE4LDEx
ICsxNzE3LDI2IEBAIGF1dG8gTGV4ZXI6OmxpbmVBbmRDb2x1bW5OdW1iZXJGcm9tT2Zmc2V0KGNv
bnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIHVuc2lnbmVkCiAgICAgcmV0dXJuIHsgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyIH07CiB9CiAKLVN0cmluZyBMZXhlcjo6ZXJyb3JTdHJpbmcoY29u
c3QgU3RyaW5nVmlldyYgc291cmNlLCBFcnJvciBlcnJvcikKK3N0YXRpYyBPcHRpb25hbDxTdHJp
bmdWaWV3PiBzb3VyY2VGcm9tTmFtZVNwYWNlKEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFjZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2UxLCBjb25zdCBTdHJpbmcqIHNvdXJjZTIpCit7CisgICAgc3dpdGNo
IChuYW1lU3BhY2UpIHsKKyAgICBjYXNlIEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnk6
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgY2FzZSBBU1Q6Ok5hbWVTcGFjZTo6
TmFtZVNwYWNlMToKKyAgICAgICAgcmV0dXJuIFN0cmluZ1ZpZXcoc291cmNlMSk7CisgICAgY2Fz
ZSBBU1Q6Ok5hbWVTcGFjZTo6TmFtZVNwYWNlMjoKKyAgICAgICAgQVNTRVJUKHNvdXJjZTIpOwor
ICAgICAgICByZXR1cm4gU3RyaW5nVmlldygqc291cmNlMik7CisgICAgfQorfQorCitTdHJpbmcg
TGV4ZXI6OmVycm9yU3RyaW5nKEVycm9yIGVycm9yLCBjb25zdCBTdHJpbmcmIHNvdXJjZTEsIGNv
bnN0IFN0cmluZyogc291cmNlMikKIHsKLSAgICBpZiAoZXJyb3IuY29kZUxvY2F0aW9uKCkpIHsK
LSAgICAgICAgYXV0byBsaW5lQW5kQ29sdW1uID0gbGluZUFuZENvbHVtbk51bWJlckZyb21PZmZz
ZXQoc291cmNlLCBlcnJvci5jb2RlTG9jYXRpb24oKS5zdGFydE9mZnNldCgpKTsKLSAgICAgICAg
cmV0dXJuIG1ha2VTdHJpbmcobGluZUFuZENvbHVtbi5saW5lLCAnOicsIGxpbmVBbmRDb2x1bW4u
Y29sdW1uLCAiOiAiLCBlcnJvci5tZXNzYWdlKCkpOworICAgIGlmIChhdXRvIGNvZGVMb2NhdGlv
biA9IGVycm9yLmNvZGVMb2NhdGlvbigpKSB7CisgICAgICAgIGlmIChhdXRvIHNvdXJjZSA9IHNv
dXJjZUZyb21OYW1lU3BhY2UoY29kZUxvY2F0aW9uLm5hbWVTcGFjZSgpLCBzb3VyY2UxLCBzb3Vy
Y2UyKSkgeworICAgICAgICAgICAgYXV0byBsaW5lQW5kQ29sdW1uID0gbGluZUFuZENvbHVtbk51
bWJlckZyb21PZmZzZXQoKnNvdXJjZSwgZXJyb3IuY29kZUxvY2F0aW9uKCkuc3RhcnRPZmZzZXQo
KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhsaW5lQW5kQ29sdW1uLmxpbmUsICc6
JywgbGluZUFuZENvbHVtbi5jb2x1bW4sICI6ICIsIGVycm9yLm1lc3NhZ2UoKSk7CisgICAgICAg
IH0KICAgICB9CiAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuaAppbmRleCBkZTJlNzYxM2Y2
NjRlYzVjYmI1ZmZjZTIyYzJmMTI0YjExNjk3YzEyLi5hYzAyM2RkNDQyODM3YjZlMzg5MmNlMzhh
ZDZjOGU2MjkwODI4ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTExleGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xMZXhlci5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTENv
ZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRXJyb3IuaCIKKyNpbmNsdWRlICJXSExTTE5h
bWVTcGFjZS5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgpAQCAtMTY1LDE2
ICsxNjYsMTcgQEAgc3RydWN0IFRva2VuIHsKIH07CiAKIGlubGluZSBDb2RlTG9jYXRpb246OkNv
ZGVMb2NhdGlvbihjb25zdCBUb2tlbiYgdG9rZW4pCi0gICAgOiBtX3N0YXJ0T2Zmc2V0KHRva2Vu
LmNvZGVMb2NhdGlvbi5zdGFydE9mZnNldCgpKQotICAgICwgbV9lbmRPZmZzZXQodG9rZW4uY29k
ZUxvY2F0aW9uLmVuZE9mZnNldCgpKQoteyB9CisgICAgOiBDb2RlTG9jYXRpb24odG9rZW4uY29k
ZUxvY2F0aW9uKQoreworfQogCiBjbGFzcyBMZXhlciB7CiBwdWJsaWM6CiAgICAgTGV4ZXIoKSA9
IGRlZmF1bHQ7CiAKLSAgICBMZXhlcihTdHJpbmdWaWV3IHN0cmluZ1ZpZXcpCisgICAgTGV4ZXIo
U3RyaW5nVmlldyBzdHJpbmdWaWV3LCBBU1Q6Ok5hbWVTcGFjZSBuYW1lU3BhY2UpCiAgICAgICAg
IDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCisgICAgICAgICwgbV9uYW1lU3BhY2UobmFtZVNw
YWNlKQogICAgIHsKICAgICAgICAgc2tpcFdoaXRlc3BhY2VBbmRDb21tZW50cygpOwogICAgICAg
ICBtX3JpbmdCdWZmZXJbMF0gPSBjb25zdW1lVG9rZW5Gcm9tU3RyZWFtKCk7CkBAIC0yNTEsNyAr
MjUzLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiUGFyc2UgZXJyb3Ig
YXQgbGluZSAiLCBsaW5lQW5kQ29sdW1uTnVtYmVyRnJvbU9mZnNldChtX3N0cmluZ1ZpZXcsIHRv
a2VuLnN0YXJ0T2Zmc2V0KCkpLmxpbmUsICI6ICIsIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHN0
YXRpYyBTdHJpbmcgZXJyb3JTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYgc291cmNlLCBFcnJvcik7
CisgICAgc3RhdGljIFN0cmluZyBlcnJvclN0cmluZyhFcnJvciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2UxLCBjb25zdCBTdHJpbmcqIHNvdXJjZTIgPSBudWxscHRyKTsKKworICAgIEFTVDo6TmFtZVNw
YWNlIG5hbWVTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZVNwYWNlOyB9CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIHN0cnVjdCBUb2tlbjsKQEAgLTI2OSw2ICsyNzMsNyBAQCBwcml2YXRlOgog
ICAgIFRva2VuIG1fcmluZ0J1ZmZlclsyXTsKICAgICB1bnNpZ25lZCBtX3JpbmdCdWZmZXJJbmRl
eCB7IDAgfTsKICAgICB1bnNpZ25lZCBtX29mZnNldCB7IDAgfTsKKyAgICBBU1Q6Ok5hbWVTcGFj
ZSBtX25hbWVTcGFjZSB7IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkgfTsKIH07CiAK
IFN0cmluZ1ZpZXcgVG9rZW46OnN0cmluZ1ZpZXcoY29uc3QgTGV4ZXImIGxleGVyKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVDb250ZXh0LmNwcAppbmRleCAxOTkwMjEzYTNiNzI2YTMwMzNkMDE3YTYxMzFhZjRhNmRiNjY1
YWZlLi41NjA0MWZiMmJhMzYxOWMzZmE3NTIyMzdiM2VjZGNiMjkwYzc1YmFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250
ZXh0LmNwcApAQCAtNDUsOTkgKzQ1LDEzOCBAQCBOYW1lQ29udGV4dDo6TmFtZUNvbnRleHQoTmFt
ZUNvbnRleHQqIHBhcmVudCkKIHsKIH0KIAotYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6VHlw
ZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IE5hbWVD
b250ZXh0OjphZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCiB7Ci0gICAg
aWYgKGV4aXN0cyh0eXBlRGVmaW5pdGlvbi5uYW1lKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZCh0eXBlRGVmaW5pdGlvbi5uYW1lKCksIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7Ci0gICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChh
dXRvIGV4aXN0aW5nID0gdG9wTGV2ZWxFeGlzdHModHlwZURlZmluaXRpb24ubmFtZSgpKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJEdXBsaWNhdGUgbmFtZSBpbiBwcm9n
cmFtIiwgKmV4aXN0aW5nKSk7CisgICAgdHlwZURlZmluaXRpb24uc2V0TmFtZVNwYWNlKG1fY3Vy
cmVudE5hbWVTcGFjZSk7CisgICAgYXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlc1tpbmRleF0uYWRk
KHR5cGVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOwogICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHR5cGVEZWZpbml0aW9uKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQoQVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorRXhwZWN0ZWQ8dm9p
ZCwgRXJyb3I+IE5hbWVDb250ZXh0OjphZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1
Y3R1cmVEZWZpbml0aW9uKQogewotICAgIGlmIChleGlzdHMoc3RydWN0dXJlRGVmaW5pdGlvbi5u
YW1lKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byByZXN1bHQgPSBtX3R5cGVz
LmFkZChzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGF1dG8gZXhpc3RpbmcgPSB0b3BMZXZl
bEV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChFcnJvcigiRHVwbGljYXRlIG5hbWUgaW4gcHJvZ3JhbS4iLCAqZXhpc3Rpbmcp
KTsKKyAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1lU3Bh
Y2UpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jdXJyZW50TmFt
ZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhdLmFkZChzdHJ1Y3R1cmVE
ZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+LCAxPigpKTsKKyAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOwogICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQorRXhwZWN0ZWQ8
dm9pZCwgRXJyb3I+IE5hbWVDb250ZXh0OjphZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24m
IGVudW1lcmF0aW9uRGVmaW5pdGlvbikKIHsKLSAgICBpZiAoZXhpc3RzKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi5uYW1lKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byByZXN1bHQg
PSBtX3R5cGVzLmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOwotICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXV0byBleGlzdGlu
ZyA9IHRvcExldmVsRXhpc3RzKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkR1cGxpY2F0ZSBuYW1lIGluIHByb2dyYW0u
IiwgKmV4aXN0aW5nKSk7CisgICAgZW51bWVyYXRpb25EZWZpbml0aW9uLnNldE5hbWVTcGFjZSht
X2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXNbaW5kZXhd
LmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIEFTU0VSVChyZXN1bHQuaXNOZXdF
bnRyeSk7CiAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZW51bWVyYXRpb25EZWZp
bml0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE5h
bWVDb250ZXh0OjphZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlv
bikKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBOYW1lQ29udGV4dDo6YWRkKEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCiB7Ci0gICAgaWYgKG1fdHlwZXMuZmluZChm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCi0gICAgICAgIHx8IG1f
dmFyaWFibGVzLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkgIT0gbV92YXJpYWJsZXMu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rp
b25zLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICBhdXRvIGluZGV4
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgaWYgKGF1
dG8qIHR5cGUgPSBzZWFyY2hUeXBlcyhmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJEdXBsaWNhdGUgbmFtZSBpbiBwcm9ncmFt
LiIsIHR5cGUtPmNvZGVMb2NhdGlvbigpKSk7CisgICAgZnVuY3Rpb25EZWZpbml0aW9uLnNldE5h
bWVTcGFjZShtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlv
bnNbaW5kZXhdLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb24pOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiB7IH07CiB9CiAKLWJvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCitF
eHBlY3RlZDx2b2lkLCBFcnJvcj4gTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiB7Ci0gICAgaWYgKG1fdHlw
ZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQo
KQotICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24+LCAxPigpKTsKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
Y3VycmVudE5hbWVTcGFjZSk7CisgICAgaWYgKGF1dG8qIHR5cGUgPSBzZWFyY2hUeXBlcyhuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChFcnJvcigiRHVwbGljYXRlIG5hbWUgaW4gcHJvZ3JhbS4iLCB0eXBlLT5jb2RlTG9jYXRp
b24oKSkpOworICAgIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uc2V0TmFtZVNwYWNlKG1fY3Vy
cmVudE5hbWVTcGFjZSk7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9uc1tpbmRleF0uYWRk
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE5hbWVDb250ZXh0OjphZGQoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK0V4cGVjdGVk
PHZvaWQsIEVycm9yPiBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
JiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCiB7Ci0gICAgaWYgKG1fZnVuY3Rpb25zLmZpbmQobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKLSAgICAgICAg
fHwgbV92YXJpYWJsZXMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3Zh
cmlhYmxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gcmVzdWx0ID0g
bV90eXBlcy5hZGQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBhdXRvIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgaWYgKGF1dG8q
IGZ1bmN0aW9uID0gc2VhcmNoRnVuY3Rpb25zKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IoIkR1cGxpY2F0ZSBuYW1lIGlu
IHByb2dyYW0uIiwgZnVuY3Rpb24tPmNvZGVMb2NhdGlvbigpKSk7CisgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldE5hbWVTcGFjZShtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gcmVz
dWx0ID0gbV90eXBlc1tpbmRleF0uYWRkKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCksIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CiAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIE5hbWVDb250ZXh0Ojph
ZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQorRXhwZWN0
ZWQ8dm9pZCwgRXJyb3I+IE5hbWVDb250ZXh0OjphZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
JiB2YXJpYWJsZURlY2xhcmF0aW9uKQogewogICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLm5h
bWUoKS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGV4aXN0cyh2YXJp
YWJsZURlY2xhcmF0aW9uLm5hbWUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICBpZiAoYXV0byogZGVjbGFyYXRpb24gPSBsb2NhbEV4aXN0cyh2YXJp
YWJsZURlY2xhcmF0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChF
cnJvcigiRHVwbGljYXRlIG5hbWUgaW4gcHJvZ3JhbS4iLCBkZWNsYXJhdGlvbi0+Y29kZUxvY2F0
aW9uKCkpKTsKICAgICBhdXRvIHJlc3VsdCA9IG1fdmFyaWFibGVzLmFkZChTdHJpbmcodmFyaWFi
bGVEZWNsYXJhdGlvbi5uYW1lKCkpLCAmdmFyaWFibGVEZWNsYXJhdGlvbik7Ci0gICAgcmV0dXJu
IHJlc3VsdC5pc05ld0VudHJ5OworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogTmFtZUNvbnRleHQ6OmdldFR5cGVzKGNvbnN0IFN0
cmluZyYgbmFtZSkKK1ZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBl
PiwgMT4gTmFtZUNvbnRleHQ6OmdldFR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgQVNUOjpOYW1l
U3BhY2UgZnJvbU5hbWVzcGFjZSkKIHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlcy5maW5k
KG5hbWUpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX3R5cGVzLmVuZCgpKSB7Ci0gICAgICAgIGlm
IChtX3BhcmVudCkKLSAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0VHlwZXMobmFtZSk7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIE5hbWVkIHR5cGVzIGNhbiBvbmx5IGJl
IGRlY2xhcmVkIGluIHRoZSBnbG9iYWwgbmFtZSBjb250ZXh0LgorICAgIGlmIChtX3BhcmVudCkK
KyAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRUeXBlcyhuYW1lLCBmcm9tTmFtZXNwYWNlKTsK
KworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4g
cmVzdWx0OworCisgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJv
bU5hbWVzcGFjZSk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZXNbaW5kZXhdLmZpbmQobmFt
ZSk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fdHlwZXNbaW5kZXhdLmVuZCgpKSB7CisgICAgICAg
IGZvciAoYXV0byB0eXBlIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCh0eXBlKTsKICAgICB9Ci0gICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CisKKyAgICBp
ZiAoZnJvbU5hbWVzcGFjZSAhPSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KSB7Cisg
ICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpTdGFu
ZGFyZExpYnJhcnkpOworICAgICAgICBpdGVyYXRvciA9IG1fdHlwZXNbaW5kZXhdLmZpbmQobmFt
ZSk7CisgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX3R5cGVzW2luZGV4XS5lbmQoKSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvIHR5cGUgOiBpdGVyYXRvci0+dmFsdWUpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCh0eXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLVZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+KiBOYW1lQ29udGV4dDo6Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYg
bmFtZSkKK1ZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+IE5hbWVDb250ZXh0OjpnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJiBuYW1lLCBB
U1Q6Ok5hbWVTcGFjZSBmcm9tTmFtZXNwYWNlKQogewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1
bmN0aW9ucy5maW5kKG5hbWUpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2Z1bmN0aW9ucy5lbmQo
KSkgewotICAgICAgICBpZiAobV9wYXJlbnQpCi0gICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQt
PmdldEZ1bmN0aW9ucyhuYW1lKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gRnVu
Y3Rpb25zIGNhbiBvbmx5IGJlIGRlY2xhcmVkIGluIHRoZSBnbG9iYWwgbmFtZSBjb250ZXh0Lgor
ICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRGdW5jdGlvbnMo
bmFtZSwgZnJvbU5hbWVzcGFjZSk7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiByZXN1bHQ7CisKKyAgICB1bnNpZ25lZCBp
bmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tTmFtZXNwYWNlKTsKKyAgICBhdXRvIGl0
ZXJhdG9yID0gbV9mdW5jdGlvbnNbaW5kZXhdLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9y
ICE9IG1fZnVuY3Rpb25zW2luZGV4XS5lbmQoKSkgeworICAgICAgICBmb3IgKGF1dG8gdHlwZSA6
IGl0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7CisgICAg
fQorCisgICAgaWYgKGZyb21OYW1lc3BhY2UgIT0gQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGli
cmFyeSkgeworICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihBU1Q6Ok5hbWVT
cGFjZTo6U3RhbmRhcmRMaWJyYXJ5KTsKKyAgICAgICAgaXRlcmF0b3IgPSBtX2Z1bmN0aW9uc1tp
bmRleF0uZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25zW2lu
ZGV4XS5lbmQoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIHR5cGUgOiBpdGVyYXRvci0+dmFs
dWUpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0eXBlKTsKKyAgICAgICAgfQogICAg
IH0KLSAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogTmFtZUNvbnRleHQ6OmdldFZhcmlhYmxlKGNv
bnN0IFN0cmluZyYgbmFtZSkKQEAgLTE1MSwxMSArMTkwLDcyIEBAIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiogTmFtZUNvbnRleHQ6OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKICAg
ICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwogfQogCi1ib29sIE5hbWVDb250ZXh0OjpleGlzdHMo
U3RyaW5nJiBuYW1lKQorQVNUOjpOYW1lZFR5cGUqIE5hbWVDb250ZXh0OjpzZWFyY2hUeXBlcyhT
dHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgaWYgKG1f
Y3VycmVudE5hbWVTcGFjZSA9PSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KSB7Cisg
ICAgICAgIGZvciAoYXV0byYgdHlwZXMgOiBtX3R5cGVzKSB7CisgICAgICAgICAgICBhdXRvIGl0
ZXIgPSB0eXBlcy5maW5kKG5hbWUpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gdHlwZXMuZW5k
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZVswXS5nZXQoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIGluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgYXV0byBpdGVy
ID0gbV90eXBlc1tpbmRleF0uZmluZChuYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtX3R5cGVzW2lu
ZGV4XS5lbmQoKSkKKyAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZVswXS5nZXQoKTsKKworICAg
IGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExp
YnJhcnkpOworICAgIGl0ZXIgPSBtX3R5cGVzW2luZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChp
dGVyICE9IG1fdHlwZXNbaW5kZXhdLmVuZCgpKQorICAgICAgICByZXR1cm4gJml0ZXItPnZhbHVl
WzBdLmdldCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiogTmFtZUNvbnRleHQ6OnNlYXJjaEZ1bmN0aW9ucyhTdHJpbmcmIG5hbWUpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgaWYgKG1fY3VycmVudE5hbWVTcGFjZSA9
PSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5KSB7CisgICAgICAgIGZvciAoYXV0byYg
ZnVuY3Rpb25zIDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IGZ1bmN0
aW9ucy5maW5kKG5hbWUpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gZnVuY3Rpb25zLmVuZCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiAmaXRlci0+dmFsdWVbMF0uZ2V0KCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBpbmRleCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX2N1cnJlbnROYW1lU3BhY2UpOworICAgIGF1dG8gaXRlciA9
IG1fZnVuY3Rpb25zW2luZGV4XS5maW5kKG5hbWUpOworICAgIGlmIChpdGVyICE9IG1fZnVuY3Rp
b25zW2luZGV4XS5lbmQoKSkKKyAgICAgICAgcmV0dXJuICZpdGVyLT52YWx1ZVswXS5nZXQoKTsK
KworICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEFTVDo6TmFtZVNwYWNlOjpTdGFu
ZGFyZExpYnJhcnkpOworICAgIGl0ZXIgPSBtX2Z1bmN0aW9uc1tpbmRleF0uZmluZChuYW1lKTsK
KyAgICBpZiAoaXRlciAhPSBtX2Z1bmN0aW9uc1tpbmRleF0uZW5kKCkpCisgICAgICAgIHJldHVy
biAmaXRlci0+dmFsdWVbMF0uZ2V0KCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworT3B0
aW9uYWw8Q29kZUxvY2F0aW9uPiBOYW1lQ29udGV4dDo6dG9wTGV2ZWxFeGlzdHMoU3RyaW5nJiBu
YW1lKSBjb25zdAoreworICAgIGlmIChhdXRvKiB0eXBlID0gc2VhcmNoVHlwZXMobmFtZSkpCisg
ICAgICAgIHJldHVybiB0eXBlLT5jb2RlTG9jYXRpb24oKTsKKyAgICBpZiAoYXV0byogZnVuY3Rp
b24gPSBzZWFyY2hGdW5jdGlvbnMobmFtZSkpCisgICAgICAgIHJldHVybiBmdW5jdGlvbi0+Y29k
ZUxvY2F0aW9uKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uKiBOYW1lQ29udGV4dDo6bG9jYWxFeGlzdHMoU3RyaW5nJiBuYW1lKSBjb25z
dAogewotICAgIHJldHVybiBtX3R5cGVzLmZpbmQobmFtZSkgIT0gbV90eXBlcy5lbmQoKQotICAg
ICAgICB8fCBtX2Z1bmN0aW9ucy5maW5kKG5hbWUpICE9IG1fZnVuY3Rpb25zLmVuZCgpCi0gICAg
ICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmFtZSkgIT0gbV92YXJpYWJsZXMuZW5kKCk7CisgICAg
QVNTRVJUKG1fcGFyZW50KTsKKyAgICBhdXRvIGl0ZXIgPSBtX3ZhcmlhYmxlcy5maW5kKG5hbWUp
OworICAgIGlmIChpdGVyICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRl
ci0+dmFsdWU7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNM
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVDb250ZXh0LmgKaW5kZXggYTA0ODc4YWU3ZTlmMWQ4M2U1ZDU5MmMyZmQ3NTJiZWRjOTBmYTlj
Yi4uZjBkZTIyMjJiNmEyMzU3NTY0MDUxYzc0MzZhMGJkMDE0NTQ5MjdjOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQu
aApAQCAtMjcsNiArMjcsOSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAorI2luY2x1ZGUgIldI
TFNMRXJyb3IuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVTcGFjZS5oIgorCiAjaW5jbHVkZSA8ZnVu
Y3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KQEAgLTU0LDI1ICs1NywzNSBAQCBjbGFzcyBOYW1lQ29udGV4dCB7CiBwdWJsaWM6CiAgICAg
TmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOwogCi0gICAgYm9vbCBh
ZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpOwotICAgIGJvb2wgYWRkKEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiYpOwotICAgIGJvb2wgYWRkKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJik7Ci0g
ICAgYm9vbCBhZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKLSAgICBib29sIGFkZChBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKLSAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYpOwotICAgIGJvb2wgYWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYp
OwotCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAx
PiogZ2V0VHlwZXMoY29uc3QgU3RyaW5nJik7Ci0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIHNldEN1cnJlbnROYW1lU3BhY2UoQVNUOjpOYW1lU3BhY2UgY3Vy
cmVudE5hbWVTcGFjZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9wYXJlbnQpOworICAgICAg
ICBtX2N1cnJlbnROYW1lU3BhY2UgPSBjdXJyZW50TmFtZVNwYWNlOworICAgIH0KKworICAgIEV4
cGVjdGVkPHZvaWQsIEVycm9yPiBhZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpOworICAgIEV4cGVj
dGVkPHZvaWQsIEVycm9yPiBhZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgRXhw
ZWN0ZWQ8dm9pZCwgRXJyb3I+IGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAg
IEV4cGVjdGVkPHZvaWQsIEVycm9yPiBhZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKyAg
ICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gYWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biYpOworICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBhZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mKTsKKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gYWRkKEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiYpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+LCAxPiBnZXRUeXBlcyhjb25zdCBTdHJpbmcmLCBBU1Q6Ok5hbWVTcGFjZSBmcm9tTmFt
ZXNwYWNlKTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24+LCAxPiBnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJiwgQVNUOjpOYW1lU3Bh
Y2UgZnJvbU5hbWVzcGFjZSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiBnZXRWYXJp
YWJsZShjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGV4aXN0cyhTdHJpbmcm
KTsKKyAgICBBU1Q6Ok5hbWVkVHlwZSogc2VhcmNoVHlwZXMoU3RyaW5nJiBuYW1lKSBjb25zdDsK
KyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHNlYXJjaEZ1bmN0aW9ucyhTdHJpbmcmIG5h
bWUpIGNvbnN0OworICAgIE9wdGlvbmFsPENvZGVMb2NhdGlvbj4gdG9wTGV2ZWxFeGlzdHMoU3Ry
aW5nJiBuYW1lKSBjb25zdDsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGxvY2FsRXhp
c3RzKFN0cmluZyYgbmFtZSkgY29uc3Q7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPj4gbV90eXBlczsKLSAgICBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4+IG1fZnVuY3Rpb25zOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+PiBtX3R5cGVzW0FT
VDo6bmFtZVNwYWNlQ291bnRdOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPj4gbV9mdW5jdGlvbnNb
QVNUOjpuYW1lU3BhY2VDb3VudF07CiAgICAgSGFzaE1hcDxTdHJpbmcsIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbio+IG1fdmFyaWFibGVzOwogICAgIE5hbWVDb250ZXh0KiBtX3BhcmVudDsKKyAg
ICBBU1Q6Ok5hbWVTcGFjZSBtX2N1cnJlbnROYW1lU3BhY2UgeyBBU1Q6Ok5hbWVTcGFjZTo6U3Rh
bmRhcmRMaWJyYXJ5IH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKaW5kZXggNjdiMWM5YjZk
ODYwNTI0N2ZjMTJjNGIxZTUzZjMyOTViZmI5NDQ3My4uMjcxZWJkMTI2YTMxMDc4OWI0YzhjZjcw
ZGY4NDU3OWZhMWY4MjQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcApAQCAtNTcsNiArNTcsNyBAQCBO
YW1lUmVzb2x2ZXI6Ok5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQpCiBOYW1l
UmVzb2x2ZXI6Ok5hbWVSZXNvbHZlcihOYW1lUmVzb2x2ZXImIHBhcmVudFJlc29sdmVyLCBOYW1l
Q29udGV4dCYgbmFtZUNvbnRleHQpCiAgICAgOiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQog
ICAgICwgbV9wYXJlbnROYW1lUmVzb2x2ZXIoJnBhcmVudFJlc29sdmVyKQorICAgICwgbV9jdXJy
ZW50TmFtZVNwYWNlKHBhcmVudFJlc29sdmVyLm1fY3VycmVudE5hbWVTcGFjZSkKIHsKIH0KIApA
QCAtODAsMTQgKzgxLDEwIEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlR5cGVSZWZl
cmVuY2UmIHR5cGVSZWZlcmVuY2UpCiAgICAgaWYgKHR5cGVSZWZlcmVuY2UubWF5YmVSZXNvbHZl
ZFR5cGUoKSkgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTgxNjEgU2hvdWxkbid0IHdlIGtub3cgYnkgbm93IHdoZXRoZXIgdGhlIHR5cGUgaGFzIGJl
ZW4gcmVzb2x2ZWQgb3Igbm90PwogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBjYW5kaWRh
dGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyh0eXBlUmVmZXJlbmNlLm5hbWUoKSk7Ci0gICAg
aWYgKGNhbmRpZGF0ZXMgPT0gbnVsbHB0cikgewotICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fu
bm90IGZpbmQgdHlwZSByZWZlcmVuY2UuIiwgdHlwZVJlZmVyZW5jZS5jb2RlTG9jYXRpb24oKSkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogKmNh
bmRpZGF0ZXMpCisgICAgYXV0byBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyh0
eXBlUmVmZXJlbmNlLm5hbWUoKSwgbV9jdXJyZW50TmFtZVNwYWNlKTsKKyAgICBmb3IgKGF1dG8m
IGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZXMpCiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KGNhbmRpZGF0
ZSk7Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoKmNhbmRp
ZGF0ZXMsIHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygpKSkKKyAgICBpZiAoYXV0byByZXN1
bHQgPSByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChjYW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5
cGVBcmd1bWVudHMoKSkpCiAgICAgICAgIHR5cGVSZWZlcmVuY2Uuc2V0UmVzb2x2ZWRUeXBlKCpy
ZXN1bHQpOwogICAgIGVsc2UgewogICAgICAgICBzZXRFcnJvcihFcnJvcigiQ2Fubm90IHJlc29s
dmUgdHlwZSBhcmd1bWVudHMuIiwgdHlwZVJlZmVyZW5jZS5jb2RlTG9jYXRpb24oKSkpOwpAQCAt
MTkyLDkgKzE4OSw5IEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Np
b24mIGRvdEV4cHJlc3Npb24pCiAgICAgICAgIGF1dG8mIHZhcmlhYmxlUmVmZXJlbmNlID0gZG93
bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNlKCkpOwogICAg
ICAgICBpZiAoIW1fbmFtZUNvbnRleHQuZ2V0VmFyaWFibGUodmFyaWFibGVSZWZlcmVuY2UubmFt
ZSgpKSkgewogICAgICAgICAgICAgYXV0byBiYXNlTmFtZSA9IHZhcmlhYmxlUmVmZXJlbmNlLm5h
bWUoKTsKLSAgICAgICAgICAgIGlmIChhdXRvIGVudW1lcmF0aW9uVHlwZXMgPSBtX25hbWVDb250
ZXh0LmdldFR5cGVzKGJhc2VOYW1lKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbnVtZXJh
dGlvblR5cGVzLT5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUm
IHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBdOworICAgICAgICAgICAgYXV0byBlbnVtZXJh
dGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhiYXNlTmFtZSwgbV9jdXJyZW50TmFt
ZVNwYWNlKTsKKyAgICAgICAgICAgIGlmIChlbnVtZXJhdGlvblR5cGVzLnNpemUoKSA9PSAxKSB7
CisgICAgICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSBlbnVtZXJhdGlvblR5cGVz
WzBdOwogICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4o
dHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24m
IGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uPih0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBtZW1iZXJOYW1lID0gZG90RXhw
cmVzc2lvbi5maWVsZE5hbWUoKTsKQEAgLTIwNiw3ICsyMDMsOCBAQCB2b2lkIE5hbWVSZXNvbHZl
cjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQogICAgICAgICAgICAg
ICAgICAgICBzZXRFcnJvcihFcnJvcigiTm8gZW51bSBtZW1iZXIgbWF0Y2hlcyB0aGUgdXNlZCBu
YW1lLiIsIGRvdEV4cHJlc3Npb24uY29kZUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVzLmlzRW1wdHko
KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxOCw5ICsyMTYsMTAgQEAgdm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwKICAgICBpZiAoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9u
TWVtYmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvIGVudW1lcmF0aW9uVHlw
ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5sZWZ0
KCkpKSB7Ci0gICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVzLT5zaXplKCkgPT0gMSk7Ci0g
ICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAg
ICBhdXRvIGVudW1lcmF0aW9uVHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbC5sZWZ0KCksIG1fY3VycmVudE5hbWVTcGFjZSk7CisgICAgaWYgKGVu
dW1lcmF0aW9uVHlwZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkzMzUgVGhpcyBuZWVkcyB0byB3b3Jr
IHdpdGggdHlwZWRlZidlZCBlbnVtcy4KKyAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSBl
bnVtZXJhdGlvblR5cGVzWzBdOwogICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24+KHR5cGUpKSB7CiAgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYg
ZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24+KHR5cGUpOwogICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVm
aW5pdGlvbi5tZW1iZXJCeU5hbWUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLnJpZ2h0KCkpKSB7
CkBAIC0yMjksNyArMjI4LDcgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHNldEVycm9yKEVycm9yKCJDYW5ub3Qg
cmVzb2x2ZSBlbnVtZXJhdGlvbiBtZW1iZXIgbGl0ZXJhbC4iLCBlbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwuY29kZUxvY2F0aW9uKCkpKTsKIH0KIApAQCAtMjQ1LDIxICsyNDQsMjUgQEAgdm9pZCBO
YW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGkKIEV4cGVjdGVkPHZvaWQsIEVycm9yPiByZXNvbHZlTmFtZXNJblR5
cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQogewogICAg
IGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpKSB7
CisgICAgICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50TmFtZVNwYWNlKHR5cGVEZWZpbml0aW9u
LmdldCgpLm5hbWVTcGFjZSgpKTsKICAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRW
aXNpdCh0eXBlRGVmaW5pdGlvbik7CiAgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJyb3Io
KSkKICAgICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2ZXIucmVzdWx0KCk7CiAgICAgfQogICAg
IGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5p
dGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudE5hbWVTcGFjZShzdHJ1
Y3R1cmVEZWZpbml0aW9uLmdldCgpLm5hbWVTcGFjZSgpKTsKICAgICAgICAgbmFtZVJlc29sdmVy
LmNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKICAgICAgICAgaWYgKG5h
bWVSZXNvbHZlci5oYXNFcnJvcigpKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5y
ZXN1bHQoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBw
cm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIu
c2V0Q3VycmVudE5hbWVTcGFjZShlbnVtZXJhdGlvbkRlZmluaXRpb24uZ2V0KCkubmFtZVNwYWNl
KCkpOwogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KGVudW1lcmF0aW9u
RGVmaW5pdGlvbik7CiAgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJyb3IoKSkKICAgICAg
ICAgICAgIHJldHVybiBuYW1lUmVzb2x2ZXIucmVzdWx0KCk7CiAgICAgfQogICAgIGZvciAoYXV0
byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25z
KCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnROYW1lU3BhY2UobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmdldCgpLm5hbWVTcGFjZSgpKTsKICAgICAgICAgbmFtZVJlc29sdmVyLmNo
ZWNrRXJyb3JBbmRWaXNpdChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwogICAgICAgICBpZiAobmFt
ZVJlc29sdmVyLmhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm4gbmFtZVJlc29sdmVyLnJl
c3VsdCgpOwpAQCAtMjcwLDExICsyNzMsMTMgQEAgRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IHJlc29s
dmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmUKIEV4
cGVjdGVkPHZvaWQsIEVycm9yPiByZXNvbHZlVHlwZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYg
cHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCiB7CiAgICAgZm9yIChhdXRvJiBm
dW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAg
ICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudE5hbWVTcGFjZShmdW5jdGlvbkRlZmluaXRpb24u
Z2V0KCkubmFtZVNwYWNlKCkpOwogICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZp
c2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CiAgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuaGFzRXJy
b3IoKSkKICAgICAgICAgICAgIHJldHVybiBuYW1lUmVzb2x2ZXIucmVzdWx0KCk7CiAgICAgfQog
ICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVu
dE5hbWVTcGFjZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmdldCgpLm5hbWVTcGFjZSgpKTsK
ICAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKTsKICAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5oYXNFcnJvcigpKQogICAgICAg
ICAgICAgcmV0dXJuIG5hbWVSZXNvbHZlci5yZXN1bHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCmluZGV4IDY1
OGMzNWZjZGI1NzJlMjRkNTgyMTcxZjExZThjNmEyYmEwMzJlNzMuLmE3OTI0ZTA1ZmY2YWEwYWRm
NjliZDNjNjgyMmEzY2JlZmQ3YzMxNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaApAQCAtNDYsNiArNDYsOCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5OYW1lUmVzb2x2ZXIoKTsKIAorICAgIHZvaWQgc2V0
Q3VycmVudE5hbWVTcGFjZShBU1Q6Ok5hbWVTcGFjZSBuYW1lU3BhY2UpIHsgbV9jdXJyZW50TmFt
ZVNwYWNlID0gbmFtZVNwYWNlOyB9CisKIHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CkBAIC02Myw2ICs2NSw3IEBAIHByaXZhdGU6
CiAgICAgTmFtZUNvbnRleHQmIG1fbmFtZUNvbnRleHQ7CiAgICAgSGFzaFNldDxBU1Q6OlR5cGVS
ZWZlcmVuY2UqPiBtX3R5cGVSZWZlcmVuY2VzOwogICAgIE5hbWVSZXNvbHZlciogbV9wYXJlbnRO
YW1lUmVzb2x2ZXIgeyBudWxscHRyIH07CisgICAgQVNUOjpOYW1lU3BhY2UgbV9jdXJyZW50TmFt
ZVNwYWNlIHsgQVNUOjpOYW1lU3BhY2U6OlN0YW5kYXJkTGlicmFyeSB9OwogfTsKIAogRXhwZWN0
ZWQ8dm9pZCwgRXJyb3I+IHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZl
ciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwCmluZGV4IGQ4NGU3NDliNDViZDkwMjI0ZDQ1MjYwNzc3NGQyZDMxM2U3OGI0Yjgu
LmVkMDk1ZDRlMzg2NDA5YjBhOGNkNTM0YWY0MTI5OGVhYmFiZTFjNjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIldITFNMQWRkcmVzc1NwYWNlLmgiCiAjaW5jbHVkZSAi
V0hMU0xFbnRyeVBvaW50VHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgogI2luY2x1
ZGUgPHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CkBAIC00MSwyNyArNDIsMjYgQEAg
bmFtZXNwYWNlIFdITFNMIHsKICNkZWZpbmUgUEFSU0UobmFtZSwgZWxlbWVudCwgLi4uKSBcCiAg
ICAgYXV0byBuYW1lID0gcGFyc2UjI2VsZW1lbnQoX19WQV9BUkdTX18pOyBcCiAgICAgaWYgKCFu
YW1lKSBcCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOyBc
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChuYW1lLmVycm9yKCkpOyBcCiAKICNkZWZp
bmUgQ09OU1VNRV9UWVBFKG5hbWUsIHR5cGUpIFwKICAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlw
ZShUb2tlbjo6VHlwZTo6dHlwZSk7IFwKICAgICBpZiAoIW5hbWUpIFwKLSAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChuYW1lLmVycm9yKCkpOwogCiAjZGVmaW5lIFBFRUsobmFtZSkgXAogICAgIGF1dG8g
bmFtZSA9IHBlZWsoKTsgXAogICAgIGlmICghbmFtZSkgXAotICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KG5hbWUuZXJyb3IoKSk7CiAKICNkZWZpbmUgUEVFS19GVVJUSEVSKG5hbWUpIFwKICAgICBhdXRv
IG5hbWUgPSBwZWVrRnVydGhlcigpOyBcCiAgICAgaWYgKCFuYW1lKSBcCi0gICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsKIAotLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2ODIgUmV0dXJuIGEgYmV0dGVyIGVycm9yIGNvZGUgZnJv
bSB0aGlzLCBhbmQgcmVwb3J0IGl0IHRvIEphdmFTY3JpcHQuCi1hdXRvIFBhcnNlcjo6cGFyc2Uo
UHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQYXJzaW5nTW9kZSBtb2Rl
KSAtPiBFeHBlY3RlZDx2b2lkLCBFcnJvcj4KK2F1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiBw
cm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFBhcnNpbmdNb2RlIG1vZGUsIEFTVDo6TmFt
ZVNwYWNlIG5hbWVTcGFjZSkgLT4gRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+CiB7Ci0gICAgbV9sZXhl
ciA9IExleGVyKHN0cmluZ1ZpZXcpOworICAgIG1fbGV4ZXIgPSBMZXhlcihzdHJpbmdWaWV3LCBu
YW1lU3BhY2UpOwogICAgIG1fbW9kZSA9IG1vZGU7CiAKICAgICB3aGlsZSAoIW1fbGV4ZXIuaXNG
dWxseUNvbnN1bWVkKCkpIHsKQEAgLTc2LDI1ICs3NiwzMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2Uo
UHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBQYXJzaW5nTW9kZSBtb2Rl
KSAtPgogICAgICAgICAgICAgYXV0byB0eXBlRGVmaW5pdGlvbiA9IHBhcnNlVHlwZURlZmluaXRp
b24oKTsKICAgICAgICAgICAgIGlmICghdHlwZURlZmluaXRpb24pCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKHR5cGVEZWZpbml0aW9uLmVycm9yKCkpOwotICAgICAgICAg
ICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgICAg
IGF1dG8gYXBwZW5kUmVzdWx0ID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRp
b24pKTsKKyAgICAgICAgICAgIGlmICghYXBwZW5kUmVzdWx0KQorICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChhcHBlbmRSZXN1bHQuZXJyb3IoKSk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpTdHJ1Y3Q6IHsK
ICAgICAgICAgICAgIGF1dG8gc3RydWN0dXJlRGVmaW5pdGlvbiA9IHBhcnNlU3RydWN0dXJlRGVm
aW5pdGlvbigpOwogICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmVEZWZpbml0aW9uKQogICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChzdHJ1Y3R1cmVEZWZpbml0aW9uLmVycm9y
KCkpOwotICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRGVmaW5p
dGlvbikpOworICAgICAgICAgICAgYXV0byBhcHBlbmRSZXN1bHQgPSBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKCpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgICAgICBpZiAoIWFwcGVuZFJl
c3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoYXBwZW5kUmVzdWx0
LmVycm9yKCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBUb2tlbjo6VHlwZTo6RW51bTogewogICAgICAgICAgICAgYXV0byBlbnVtZXJhdGlvbkRlZmlu
aXRpb24gPSBwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgaWYgKCFl
bnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lcnJvcigpKTsKLSAgICAgICAgICAgIHByb2dyYW0u
YXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgYXV0
byBhcHBlbmRSZXN1bHQgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCplbnVtZXJhdGlvbkRlZmlu
aXRpb24pKTsKKyAgICAgICAgICAgIGlmICghYXBwZW5kUmVzdWx0KQorICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChhcHBlbmRSZXN1bHQuZXJyb3IoKSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRva2VuOjpUeXBlOjpOYXRpdmU6
IHsKLSAgICAgICAgICAgIEFTU0VSVChtX21vZGUgPT0gUGFyc2luZ01vZGU6OlN0YW5kYXJkTGli
cmFyeSk7CisgICAgICAgICAgICBpZiAobV9tb2RlICE9IFBhcnNpbmdNb2RlOjpTdGFuZGFyZExp
YnJhcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwobWFrZVN0cmluZygiJ25hdGl2ZScg
Y2FuJ3QgZXhpc3Qgb3V0c2lkZSBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeS4iKSk7CiAgICAgICAg
ICAgICBhdXRvIGZ1cnRoZXJUb2tlbiA9IHBlZWtGdXJ0aGVyKCk7CiAgICAgICAgICAgICBpZiAo
IWZ1cnRoZXJUb2tlbikKICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwpAQCAtMTAyLDIwICsx
MDksMjYgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cmluZ1ZpZXcg
c3RyaW5nVmlldywgUGFyc2luZ01vZGUgbW9kZSkgLT4KICAgICAgICAgICAgICAgICBhdXRvIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiA9IHBhcnNlTmF0aXZlVHlwZURlY2xhcmF0aW9uKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24pCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChuYXRpdmVUeXBlRGVjbGFyYXRpb24uZXJyb3IoKSk7
Ci0gICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlVHlwZURlY2xh
cmF0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBhcHBlbmRSZXN1bHQgPSBwcm9ncmFtLmFw
cGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWFwcGVuZFJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGFwcGVuZFJlc3VsdC5lcnJvcigpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGF1dG8gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA9
IHBhcnNlTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgaWYgKCFuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmVycm9yKCkpOwotICAgICAgICAgICAgcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAg
ICAgICAgYXV0byBhcHBlbmRSZXN1bHQgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICBpZiAoIWFwcGVuZFJlc3VsdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoYXBwZW5kUmVzdWx0LmVycm9yKCkp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDogewog
ICAgICAgICAgICAgYXV0byBmdW5jdGlvbkRlZmluaXRpb24gPSBwYXJzZUZ1bmN0aW9uRGVmaW5p
dGlvbigpOwogICAgICAgICAgICAgaWYgKCFmdW5jdGlvbkRlZmluaXRpb24pCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGZ1bmN0aW9uRGVmaW5pdGlvbi5lcnJvcigpKTsK
LSAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmZ1bmN0aW9uRGVmaW5pdGlvbikp
OworICAgICAgICAgICAgYXV0byBhcHBlbmRSZXN1bHQgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3Zl
KCpmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgIGlmICghYXBwZW5kUmVzdWx0KQor
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChhcHBlbmRSZXN1bHQuZXJyb3Io
KSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjgs
OSArMTQxLDkgQEAgYXV0byBQYXJzZXI6OmZhaWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBUcnlU
b1BlZWsgdHJ5VG9QZWVrKSAtPiBVbmV4cGVjdGVkPEVycm8KIHsKICAgICBpZiAodHJ5VG9QZWVr
ID09IFRyeVRvUGVlazo6WWVzKSB7CiAgICAgICAgIGlmIChhdXRvIG5leHRUb2tlbiA9IHBlZWso
KSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihtX2xleGVyLmVy
cm9yU3RyaW5nKCpuZXh0VG9rZW4sIG1lc3NhZ2UpKSk7CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoRXJyb3IobV9sZXhlci5lcnJvclN0cmluZygqbmV4dFRva2VuLCBtZXNzYWdl
KSkpOwogICAgIH0KLSAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJyb3IobWFrZVN0cmlu
ZygiQ2Fubm90IGxleDogIiwgbWVzc2FnZSkpKTsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
RXJyb3IobWFrZVN0cmluZygiQ2Fubm90IGxleDogIiwgbWVzc2FnZSkpKTsKIH0KIAogYXV0byBQ
YXJzZXI6OnBlZWsoKSAtPiBFeHBlY3RlZDxUb2tlbiwgRXJyb3I+CkBAIC0zMDYsMjEgKzMxOSwy
MSBAQCBhdXRvIFBhcnNlcjo6Y29uc3VtZUludGVncmFsTGl0ZXJhbCgpIC0+IEV4cGVjdGVkPFZh
cmlhbnQ8aW50LCB1bnNpZ25lZD4sIEVycm9yPgogewogICAgIGF1dG8gaW50ZWdyYWxMaXRlcmFs
VG9rZW4gPSBjb25zdW1lVHlwZXM8VG9rZW46OlR5cGU6OkludExpdGVyYWwsIFRva2VuOjpUeXBl
OjpVaW50TGl0ZXJhbD4oKTsKICAgICBpZiAoIWludGVncmFsTGl0ZXJhbFRva2VuKQotICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oaW50ZWdyYWxMaXRlcmFsVG9rZW4uZXJyb3IoKSk7
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChpbnRlZ3JhbExpdGVyYWxUb2tlbi5lcnJv
cigpKTsKIAogICAgIHN3aXRjaCAoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnR5cGUpIHsKICAgICBj
YXNlIFRva2VuOjpUeXBlOjpJbnRMaXRlcmFsOiB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gaW50
TGl0ZXJhbFRvSW50KGludGVncmFsTGl0ZXJhbFRva2VuLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsK
ICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiB7eyAqcmVzdWx0IH19Owot
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmVzdWx0LmVycm9yKCkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0LmVycm9yKCkpOwogICAgIH0KICAgICBkZWZh
dWx0OiB7CiAgICAgICAgIEFTU0VSVChpbnRlZ3JhbExpdGVyYWxUb2tlbi0+dHlwZSA9PSBUb2tl
bjo6VHlwZTo6VWludExpdGVyYWwpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IHVpbnRMaXRlcmFs
VG9VaW50KGludGVncmFsTGl0ZXJhbFRva2VuLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAg
ICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiB7eyAqcmVzdWx0IH19OwotICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0LmVycm9yKCkpOwogICAgIH0KICAgICB9CiB9CkBAIC0z
MjksNyArMzQyLDcgQEAgYXV0byBQYXJzZXI6OmNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTGl0
ZXJhbCgpIC0+IEV4cGVjdGVkPHVuc2lnbmVkLCBFcnJvcj4KIHsKICAgICBhdXRvIGludGVncmFs
TGl0ZXJhbCA9IGNvbnN1bWVJbnRlZ3JhbExpdGVyYWwoKTsKICAgICBpZiAoIWludGVncmFsTGl0
ZXJhbCkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGludGVncmFsTGl0ZXJhbC5l
cnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGludGVncmFsTGl0ZXJhbC5l
cnJvcigpKTsKICAgICBhdXRvIHJlc3VsdCA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
XShpbnQgeCkgLT4gT3B0aW9uYWw8dW5zaWduZWQ+IHsKICAgICAgICAgaWYgKHggPCAwKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTM2OSwyNSArMzgyLDI1IEBAIGF1dG8g
UGFyc2VyOjpwYXJzZUNvbnN0YW50RXhwcmVzc2lvbigpIC0+IEV4cGVjdGVkPEFTVDo6Q29uc3Rh
bnRFeHByZXNzaW9uLCBFcnJvCiAgICAgICAgIFRva2VuOjpUeXBlOjpGYWxzZSwKICAgICAgICAg
VG9rZW46OlR5cGU6OklkZW50aWZpZXI+KCk7CiAgICAgaWYgKCF0eXBlKQotICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4odHlwZS5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKHR5cGUuZXJyb3IoKSk7CiAKICAgICBzd2l0Y2ggKHR5cGUtPnR5cGUpIHsKICAg
ICBjYXNlIFRva2VuOjpUeXBlOjpJbnRMaXRlcmFsOiB7CiAgICAgICAgIGF1dG8gdmFsdWUgPSBp
bnRMaXRlcmFsVG9JbnQodHlwZS0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmICgh
dmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3Io
KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodmFsdWUuZXJyb3IoKSk7CiAg
ICAgICAgIHJldHVybiB7eyBBU1Q6OkludGVnZXJMaXRlcmFsKHsgKnR5cGUgfSwgKnZhbHVlKSB9
fTsKICAgICB9CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6VWludExpdGVyYWw6IHsKICAgICAgICAg
YXV0byB2YWx1ZSA9IHVpbnRMaXRlcmFsVG9VaW50KHR5cGUtPnN0cmluZ1ZpZXcobV9sZXhlcikp
OwogICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KHZhbHVlLmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHZh
bHVlLmVycm9yKCkpOwogICAgICAgICByZXR1cm4ge3sgQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsKHsgKnR5cGUgfSwgKnZhbHVlKSB9fTsKICAgICB9CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6
RmxvYXRMaXRlcmFsOiB7CiAgICAgICAgIGF1dG8gdmFsdWUgPSBmbG9hdExpdGVyYWxUb0Zsb2F0
KHR5cGUtPnN0cmluZ1ZpZXcobV9sZXhlcikpOwogICAgICAgICBpZiAoIXZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHZhbHVlLmVycm9yKCkpOwogICAgICAgICByZXR1cm4g
e3sgQVNUOjpGbG9hdExpdGVyYWwoeyAqdHlwZSB9LCAqdmFsdWUpIH19OwogICAgIH0KICAgICBj
YXNlIFRva2VuOjpUeXBlOjpOdWxsOgpAQCAtNDUyLDExICs0NjUsMTEgQEAgYXV0byBQYXJzZXI6
OnBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCkgLT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeEFiYnJl
dmlhdGVkLCBFcnIKICAgICAgICAgVG9rZW46OlR5cGU6OlNxdWFyZUJyYWNrZXRQYWlyLAogICAg
ICAgICBUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ+KCk7CiAgICAgaWYgKCF0b2tlbikK
LSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHRva2VuLmVycm9yKCkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodG9rZW4uZXJyb3IoKSk7CiAgICAgaWYgKHRva2VuLT50
eXBlID09IFRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCkgewogICAgICAgICBhdXRvIG51
bUVsZW1lbnRzID0gY29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFsKCk7CiAgICAgICAg
IGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
bnVtRWxlbWVudHMuZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
bnVtRWxlbWVudHMuZXJyb3IoKSk7CiAgICAgICAgIENPTlNVTUVfVFlQRShyaWdodFNxdWFyZUJy
YWNrZXQsIFJpZ2h0U3F1YXJlQnJhY2tldCk7CiAgICAgICAgIHJldHVybiB7eyB7ICp0b2tlbiwg
KnJpZ2h0U3F1YXJlQnJhY2tldCB9LCAqdG9rZW4sICpudW1FbGVtZW50cyB9fTsKICAgICB9CkBA
IC00NzAsMTEgKzQ4MywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQoKSAtPiBFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZQogICAgICAgICBUb2tl
bjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXIsCiAgICAgICAgIFRva2VuOjpUeXBlOjpMZWZ0U3F1
YXJlQnJhY2tldD4oKTsKICAgICBpZiAoIXRva2VuKQotICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4odG9rZW4uZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh0
b2tlbi5lcnJvcigpKTsKICAgICBpZiAodG9rZW4tPnR5cGUgPT0gVG9rZW46OlR5cGU6OkxlZnRT
cXVhcmVCcmFja2V0KSB7CiAgICAgICAgIGF1dG8gbnVtRWxlbWVudHMgPSBjb25zdW1lTm9uTmVn
YXRpdmVJbnRlZ3JhbExpdGVyYWwoKTsKICAgICAgICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihudW1FbGVtZW50cy5lcnJvcigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChudW1FbGVtZW50cy5lcnJvcigpKTsKICAg
ICAgICAgQ09OU1VNRV9UWVBFKHJpZ2h0U3F1YXJlQnJhY2tldCwgUmlnaHRTcXVhcmVCcmFja2V0
KTsKICAgICAgICAgcmV0dXJuIHt7IHsgKnRva2VuLCAqcmlnaHRTcXVhcmVCcmFja2V0IH0sICp0
b2tlbiwgV1RGOjpudWxsb3B0LCAqbnVtRWxlbWVudHMgfX07CiAgICAgfQpAQCAtNDg0LDcgKzQ5
Nyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpIC0+IEV4
cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlCiAgICAgICAgIFRva2VuOjpUeXBlOjpUaHJl
YWRncm91cCwKICAgICAgICAgVG9rZW46OlR5cGU6OlRocmVhZD4oKTsKICAgICBpZiAoIWFkZHJl
c3NTcGFjZVRva2VuKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRkcmVzc1Nw
YWNlVG9rZW4uZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChhZGRyZXNz
U3BhY2VUb2tlbi5lcnJvcigpKTsKICAgICBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7
CiAgICAgc3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgewogICAgIGNhc2UgVG9rZW46
OlR5cGU6OkNvbnN0YW50OgpAQCAtNjE5LDcgKzYzMiw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUJ1
aWx0SW5TZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFudGljLCBFcnJvcj4K
ICAgICAgICAgVG9rZW46OlR5cGU6OlNWR3JvdXBJbmRleCwKICAgICAgICAgVG9rZW46OlR5cGU6
OlNWR3JvdXBUaHJlYWRJRD4oKTsKICAgICBpZiAoIW9yaWdpbikKLSAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKG9yaWdpbi5lcnJvcigpKTsKIAogICAgIHN3aXRjaCAob3JpZ2luLT50eXBlKSB7CiAg
ICAgY2FzZSBUb2tlbjo6VHlwZTo6U1ZJbnN0YW5jZUlEOgpAQCAtNjM5LDcgKzY1Miw3IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZUJ1aWx0SW5TZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6QnVpbHRJ
blNlbWFudGljLCBFcnJvcj4KICAgICBjYXNlIFRva2VuOjpUeXBlOjpTVlRhcmdldDogewogICAg
ICAgICBhdXRvIHRhcmdldCA9IGNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTGl0ZXJhbCgpOyAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTgwNyBN
YWtlIHRoaXMgd29yayB3aXRoIHN0cmluZ3MgbGlrZSAiU1ZfVGFyZ2V0MCIuCiAgICAgICAgIGlm
ICghdGFyZ2V0KQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHRhcmdldC5l
cnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh0YXJnZXQuZXJyb3Io
KSk7CiAgICAgICAgIHJldHVybiBBU1Q6OkJ1aWx0SW5TZW1hbnRpYyh7ICpvcmlnaW4gfSwgQVNU
OjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlRhcmdldCwgKnRhcmdldCk7CiAgICAgfQog
ICAgIGNhc2UgVG9rZW46OlR5cGU6OlNWRGVwdGg6CkBAIC02NjksNyArNjgyLDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUmVzb3VyY2VTZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6UmVzb3VyY2VT
ZW1hbnRpYywgRXJyb3I+CiAgICAgICAgICYmIGluZm9TdHJpbmdWaWV3WzBdICE9ICd0JwogICAg
ICAgICAmJiBpbmZvU3RyaW5nVmlld1swXSAhPSAnYicKICAgICAgICAgJiYgaW5mb1N0cmluZ1Zp
ZXdbMF0gIT0gJ3MnKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1h
a2VTdHJpbmcoaW5mb1N0cmluZ1ZpZXcuc3Vic3RyaW5nKDAsIDEpLCAiIGlzIG5vdCBhIGtub3du
IHJlc291cmNlIHR5cGUgKCd1JywgJ3QnLCAnYicsIG9yICdzJykiKSkpOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmluZyhpbmZvU3RyaW5nVmlldy5zdWJzdHJp
bmcoMCwgMSksICIgaXMgbm90IGEga25vd24gcmVzb3VyY2UgdHlwZSAoJ3UnLCAndCcsICdiJywg
b3IgJ3MnKSIpKSk7CiAKICAgICBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGUgbW9kZTsKICAg
ICBzd2l0Y2ggKGluZm9TdHJpbmdWaWV3WzBdKSB7CkBAIC02ODksNyArNzAyLDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUmVzb3VyY2VTZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6UmVzb3VyY2VT
ZW1hbnRpYywgRXJyb3I+CiAKICAgICBhdXRvIGluZGV4ID0gcmVjb2duaXplU2ltcGxlVW5zaWdu
ZWRJbnRlZ2VyKGluZm9TdHJpbmdWaWV3LnN1YnN0cmluZygxKSk7CiAgICAgaWYgKCFpbmRleCkK
LSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGluZGV4LmVycm9yKCkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoaW5kZXguZXJyb3IoKSk7CiAKICAgICB1bnNpZ25lZCBz
cGFjZSA9IDA7CiAgICAgaWYgKHRyeVR5cGUoVG9rZW46OlR5cGU6OkNvbW1hKSkgewpAQCAtNjk3
LDEyICs3MTAsMTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlUmVzb3VyY2VTZW1hbnRpYygpIC0+IEV4
cGVjdGVkPEFTVDo6UmVzb3VyY2VTZW1hbnRpYywgRXJyb3I+CiAgICAgICAgIGF1dG8gc3BhY2VU
b2tlblN0cmluZ1ZpZXcgPSBzcGFjZVRva2VuLT5zdHJpbmdWaWV3KG1fbGV4ZXIpOwogICAgICAg
ICBTdHJpbmdWaWV3IHByZWZpeCB7ICJzcGFjZSIgfTsKICAgICAgICAgaWYgKCFzcGFjZVRva2Vu
U3RyaW5nVmlldy5zdGFydHNXaXRoKHByZWZpeCkpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oRXJyb3IobWFrZVN0cmluZygiU2Vjb25kIGFyZ3VtZW50IHRvIHJlc291cmNl
IHNlbWFudGljICIsIHNwYWNlVG9rZW5TdHJpbmdWaWV3LCAiIG5lZWRzIGJlIG9mIHRoZSBmb3Jt
ICdzcGFjZTAnIikpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvciht
YWtlU3RyaW5nKCJTZWNvbmQgYXJndW1lbnQgdG8gcmVzb3VyY2Ugc2VtYW50aWMgIiwgc3BhY2VU
b2tlblN0cmluZ1ZpZXcsICIgbmVlZHMgYmUgb2YgdGhlIGZvcm0gJ3NwYWNlMCciKSkpOwogICAg
ICAgICBpZiAoc3BhY2VUb2tlblN0cmluZ1ZpZXcubGVuZ3RoKCkgPD0gcHJlZml4Lmxlbmd0aCgp
KQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VTdHJpbmco
IlNlY29uZCBhcmd1bWVudCB0byByZXNvdXJjZSBzZW1hbnRpYyAiLCBzcGFjZVRva2VuU3RyaW5n
VmlldywgIiBuZWVkcyBiZSBvZiB0aGUgZm9ybSAnc3BhY2UwJyIpKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3IobWFrZVN0cmluZygiU2Vjb25kIGFyZ3VtZW50IHRv
IHJlc291cmNlIHNlbWFudGljICIsIHNwYWNlVG9rZW5TdHJpbmdWaWV3LCAiIG5lZWRzIGJlIG9m
IHRoZSBmb3JtICdzcGFjZTAnIikpKTsKICAgICAgICAgYXV0byBzcGFjZVZhbHVlID0gcmVjb2du
aXplU2ltcGxlVW5zaWduZWRJbnRlZ2VyKHNwYWNlVG9rZW5TdHJpbmdWaWV3LnN1YnN0cmluZyhw
cmVmaXgubGVuZ3RoKCkpKTsKICAgICAgICAgaWYgKCFzcGFjZVZhbHVlKQotICAgICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNwYWNlVmFsdWUuZXJyb3IoKSk7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoc3BhY2VWYWx1ZS5lcnJvcigpKTsKICAgICAgICAgc3Bh
Y2UgPSAqc3BhY2VWYWx1ZTsKICAgICB9CiAKQEAgLTcyNCw3ICs3MzcsNyBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VTdGFnZUluT3V0U2VtYW50aWMoKSAtPiBFeHBlY3RlZDxBU1Q6OlN0YWdlSW5PdXRT
ZW1hbnRpYywgRXJybwogCiAgICAgYXV0byBpbmRleCA9IGNvbnN1bWVOb25OZWdhdGl2ZUludGVn
cmFsTGl0ZXJhbCgpOwogICAgIGlmICghaW5kZXgpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihpbmRleC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGlu
ZGV4LmVycm9yKCkpOwogCiAgICAgQ09OU1VNRV9UWVBFKHJpZ2h0UGFyZW50aGVzaXMsIFJpZ2h0
UGFyZW50aGVzaXMpOwogCkBAIC04MjEsNyArODM0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRW51
bWVyYXRpb25EZWZpbml0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24KICAgICAgICAgcmV0dXJuIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjpjcmVhdGUoKm9yaWdpbiwg
ImludCJfc3RyLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkgfTsKICAgICB9KSgpOwogICAgIGlmICgh
dHlwZSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh0eXBlLmVycm9yKCkpOwogCiAgICAgQ09OU1VN
RV9UWVBFKGxlZnRDdXJseUJyYWNrZXQsIExlZnRDdXJseUJyYWNrZXQpOwogCkBAIC04NjgsNyAr
ODgxLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25NZW1iZXIoaW50NjRfdCBkZWZh
dWx0VmFsdWUpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWUKICAgICAgICAgfSkpOwogCiAgICAgICAg
IGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oImVudW0g
aW5pdGlhbGl6YXRpb24gdmFsdWVzIGNhbiBvbmx5IGJlIGFuIGludCBvciB1aW50IGNvbnN0YW50
LiIpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yKCJlbnVtIGluaXRp
YWxpemF0aW9uIHZhbHVlcyBjYW4gb25seSBiZSBhbiBpbnQgb3IgdWludCBjb25zdGFudC4iKSk7
CiAgICAgICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKCppZGVudGlmaWVyLCBXVEZN
b3ZlKG5hbWUpLCAqdmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gQVNUOjpFbnVtZXJhdGlvbk1l
bWJlcigqaWRlbnRpZmllciwgV1RGTW92ZShuYW1lKSwgZGVmYXVsdFZhbHVlKTsKQEAgLTg5Miwx
OSArOTA1LDE5IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0
ZSgpIC0+IEV4cGVjdGVkPEFTVDo6TnVtVGhyZWFkc0Z1bmN0CiAKICAgICBhdXRvIHdpZHRoID0g
Y29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFsKCk7CiAgICAgaWYgKCF3aWR0aCkKLSAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHdpZHRoLmVycm9yKCkpOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQod2lkdGguZXJyb3IoKSk7CiAKICAgICBDT05TVU1FX1RZUEUo
Y29tbWEsIENvbW1hKTsKIAogICAgIGF1dG8gaGVpZ2h0ID0gY29uc3VtZU5vbk5lZ2F0aXZlSW50
ZWdyYWxMaXRlcmFsKCk7CiAgICAgaWYgKCFoZWlnaHQpCi0gICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihoZWlnaHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChoZWlnaHQuZXJyb3IoKSk7CiAKICAgICBDT05TVU1FX1RZUEUoc2Vjb25kQ29tbWEsIENvbW1h
KTsKIAogICAgIGF1dG8gZGVwdGggPSBjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbExpdGVyYWwo
KTsKICAgICBpZiAoIWRlcHRoKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZGVw
dGguZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChkZXB0aC5lcnJvcigp
KTsKIAogICAgIENPTlNVTUVfVFlQRShyaWdodFBhcmVudGhlc2lzLCBSaWdodFBhcmVudGhlc2lz
KTsKIApAQCAtOTQwLDcgKzk1Myw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+
IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+CiAKICAgICBhdXRvIGVu
ZE9mZnNldCA9IG1fbGV4ZXIucGVlaygpLnN0YXJ0T2Zmc2V0KCk7CiAKLSAgICByZXR1cm4gQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uKHsgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9LCBXVEZNb3Zl
KHF1YWxpZmllcnMpLCB7IFdURk1vdmUoKnR5cGUpIH0sIFdURk1vdmUobmFtZSksIFdURk1vdmUo
KnNlbWFudGljKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bih7IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIG1fbGV4ZXIubmFtZVNwYWNlKCkgfSwgV1RGTW92
ZShxdWFsaWZpZXJzKSwgeyBXVEZNb3ZlKCp0eXBlKSB9LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3Zl
KCpzZW1hbnRpYyksIG51bGxwdHIpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJz
KCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucywgRXJyb3I+CkBAIC05ODYs
MTQgKzk5OSwxNCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VDb21wdXRlRnVuY3Rpb25EZWNsYXJhdGlv
bigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdAogICAgIGF1dG8gZW5kT2Zmc2V0
ID0gbV9sZXhlci5wZWVrKCkuc3RhcnRPZmZzZXQoKTsKIAogICAgIGJvb2wgaXNPcGVyYXRvciA9
IGZhbHNlOwotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oeyBvcmlnaW4tPnN0
YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCB9LCBXVEZNb3ZlKCphdHRyaWJ1dGVCbG9jayksIEFTVDo6
RW50cnlQb2ludFR5cGU6OkNvbXB1dGUsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3
KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1h
bnRpYyksIGlzT3BlcmF0b3IsIG1fbW9kZSk7CisgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbih7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0LCBtX2xleGVyLm5hbWVT
cGFjZSgpIH0sIFdURk1vdmUoKmF0dHJpYnV0ZUJsb2NrKSwgQVNUOjpFbnRyeVBvaW50VHlwZTo6
Q29tcHV0ZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJp
bmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRv
ciwgbV9tb2RlKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlVmVydGV4T3JGcmFnbWVudEZ1bmN0
aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVy
cm9yPgogewogICAgIGF1dG8gZW50cnlQb2ludCA9IGNvbnN1bWVUeXBlczxUb2tlbjo6VHlwZTo6
VmVydGV4LCBUb2tlbjo6VHlwZTo6RnJhZ21lbnQ+KCk7CiAgICAgaWYgKCFlbnRyeVBvaW50KQot
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZW50cnlQb2ludC5lcnJvcigpKTsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVudHJ5UG9pbnQuZXJyb3IoKSk7CiAgICAgYXV0
byBlbnRyeVBvaW50VHlwZSA9IChlbnRyeVBvaW50LT50eXBlID09IFRva2VuOjpUeXBlOjpWZXJ0
ZXgpID8gQVNUOjpFbnRyeVBvaW50VHlwZTo6VmVydGV4IDogQVNUOjpFbnRyeVBvaW50VHlwZTo6
RnJhZ21lbnQ7CiAKICAgICBQQVJTRSh0eXBlLCBUeXBlKTsKQEAgLTEwMDQsNyArMTAxNyw3IEBA
IGF1dG8gUGFyc2VyOjpwYXJzZVZlcnRleE9yRnJhZ21lbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCkg
LT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvCiAgICAgYXV0byBlbmRPZmZzZXQgPSBtX2xleGVyLnBl
ZWsoKS5zdGFydE9mZnNldCgpOwogCiAgICAgYm9vbCBpc09wZXJhdG9yID0gZmFsc2U7Ci0gICAg
cmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbih7IGVudHJ5UG9pbnQtPnN0YXJ0T2Zmc2V0
KCksIGVuZE9mZnNldCB9LCB7IH0sIGVudHJ5UG9pbnRUeXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFt
ZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwg
V1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJhdG9yLCBtX21vZGUpOworICAgIHJldHVybiBBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oeyBlbnRyeVBvaW50LT5zdGFydE9mZnNldCgpLCBlbmRPZmZz
ZXQsIG1fbGV4ZXIubmFtZVNwYWNlKCkgfSwgeyB9LCBlbnRyeVBvaW50VHlwZSwgV1RGTW92ZSgq
dHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFy
YW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvciwgbV9tb2RlKTsKIH0KIAog
YXV0byBQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3Rl
ZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPgpAQCAtMTAxNSw3ICsxMDI4LDcgQEAg
YXV0byBQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3Rl
ZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXQKIAogICAgIGF1dG8gbmFtZSA9IGNvbnN1bWVUeXBlczxU
b2tlbjo6VHlwZTo6SWRlbnRpZmllciwgVG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZT4oKTsKICAg
ICBpZiAoIW5hbWUpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9y
KCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobmFtZS5lcnJvcigpKTsKICAgICBh
dXRvIGlzT3BlcmF0b3IgPSBuYW1lLT50eXBlID09IFRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWU7
CiAKICAgICBQQVJTRShwYXJhbWV0ZXJzLCBQYXJhbWV0ZXJzKTsKQEAgLTEwMjMsNyArMTAzNiw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0CiAKICAgICBhdXRvIGVuZE9mZnNldCA9IG1fbGV4
ZXIucGVlaygpLnN0YXJ0T2Zmc2V0KCk7CiAKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKHsgb3JpZ2luLT5zdGFydE9mZnNldCgpLCBlbmRPZmZzZXQgfSwgeyB9LCBXVEY6Om51
bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5n
KCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3Is
IG1fbW9kZSk7CisgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbih7IG9yaWdpbi0+
c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0LCBtX2xleGVyLm5hbWVTcGFjZSgpIH0sIHsgfSwgV1RG
OjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0
cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJh
dG9yLCBtX21vZGUpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVj
bGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPgpA
QCAtMTAzNiw3ICsxMDQ5LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlvbkRl
Y2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmEKICAgICBhdXRvIGVu
ZE9mZnNldCA9IG1fbGV4ZXIucGVlaygpLnN0YXJ0T2Zmc2V0KCk7CiAKICAgICBib29sIGlzT3Bl
cmF0b3IgPSB0cnVlOwotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oeyBvcmln
aW4tPnN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCB9LCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92
ZSgqdHlwZSksICJvcGVyYXRvciBjYXN0Il9zdHIsIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZN
b3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IsIG1fbW9kZSk7CisgICAgcmV0dXJuIEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbih7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0LCBtX2xl
eGVyLm5hbWVTcGFjZSgpIH0sIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgIm9w
ZXJhdG9yIGNhc3QiX3N0ciwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGlj
KSwgaXNPcGVyYXRvciwgbV9tb2RlKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlRnVuY3Rpb25E
ZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+
CkBAIC0xMDg1LDcgKzEwOTgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VCbG9ja0JvZHkoKSAtPiBF
eHBlY3RlZDxBU1Q6OkJsb2NrLCBFcnJvcj4KIAogICAgIGF1dG8gZW5kT2Zmc2V0ID0gbV9sZXhl
ci5wZWVrKCkuc3RhcnRPZmZzZXQoKTsKIAotICAgIHJldHVybiBBU1Q6OkJsb2NrKHsgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldH0sIFdURk1vdmUoc3RhdGVtZW50cykpOworICAgIHJldHVybiBBU1Q6
OkJsb2NrKHsgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbV9sZXhlci5uYW1lU3BhY2UoKSB9LCBX
VEZNb3ZlKHN0YXRlbWVudHMpKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQo
KSAtPiBFeHBlY3RlZDxBU1Q6OklmU3RhdGVtZW50LCBFcnJvcj4KQEAgLTExMDcsNyArMTEyMCw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUlmU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8QVNUOjpJZlN0
YXRlbWVudCwgRXJyb3I+CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBj
YXN0QXJndW1lbnRzOwogICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKmNvbmRpdGlv
bmFsKSk7CiAgICAgYXV0byBib29sQ2FzdCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVz
c2lvbj4oVG9rZW4oKm9yaWdpbiksICJib29sIl9zdHIsIFdURk1vdmUoY2FzdEFyZ3VtZW50cykp
OwotICAgIHJldHVybiBBU1Q6OklmU3RhdGVtZW50KHsgb3JpZ2luLT5zdGFydE9mZnNldCgpLCBl
bmRPZmZzZXQgfSwgV1RGTW92ZShib29sQ2FzdCksIFdURk1vdmUoKmJvZHkpLCBXVEZNb3ZlKGVs
c2VCb2R5KSk7CisgICAgcmV0dXJuIEFTVDo6SWZTdGF0ZW1lbnQoeyBvcmlnaW4tPnN0YXJ0T2Zm
c2V0KCksIGVuZE9mZnNldCwgbV9sZXhlci5uYW1lU3BhY2UoKSB9LCBXVEZNb3ZlKGJvb2xDYXN0
KSwgV1RGTW92ZSgqYm9keSksIFdURk1vdmUoZWxzZUJvZHkpKTsKIH0KIAogYXV0byBQYXJzZXI6
OnBhcnNlU3dpdGNoU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQs
IEVycm9yPgpAQCAtMTEzNiw3ICsxMTQ5LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlU3dpdGNoQ2Fz
ZSgpIC0+IEV4cGVjdGVkPEFTVDo6U3dpdGNoQ2FzZSwgRXJyb3I+CiB7CiAgICAgYXV0byBvcmln
aW4gPSBjb25zdW1lVHlwZXM8VG9rZW46OlR5cGU6OkNhc2UsIFRva2VuOjpUeXBlOjpEZWZhdWx0
PigpOwogICAgIGlmICghb3JpZ2luKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
b3JpZ2luLmVycm9yKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQob3JpZ2luLmVy
cm9yKCkpOwogCiAgICAgc3dpdGNoIChvcmlnaW4tPnR5cGUpIHsKICAgICBjYXNlIFRva2VuOjpU
eXBlOjpDYXNlOiB7CkBAIC0xMTcxLDcgKzExODQsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VGb3JM
b29wKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGb3JMb29wLCBFcnJvcj4KICAgICAgICAgICAgIGlmIChh
dXRvIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKSkKICAgICAgICAgICAgICAgICBjb25k
aXRpb24gPSAoKmV4cHJlc3Npb24pLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihleHByZXNzaW9uLmVy
cm9yKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChleHByZXNzaW9u
LmVycm9yKCkpOwogICAgICAgICAgICAgQ09OU1VNRV9UWVBFKHNlY29uZFNlbWljb2xvbiwgU2Vt
aWNvbG9uKTsKICAgICAgICAgfQogCkBAIC0xMTgwLDEyICsxMTkzLDEyIEBAIGF1dG8gUGFyc2Vy
OjpwYXJzZUZvckxvb3AoKSAtPiBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPgogICAgICAg
ICAgICAgaWYgKGF1dG8gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpKQogICAgICAgICAg
ICAgICAgIGluY3JlbWVudCA9ICgqZXhwcmVzc2lvbikubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGV4
cHJlc3Npb24uZXJyb3IoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGV4cHJlc3Npb24uZXJyb3IoKSk7CiAgICAgICAgICAgICBDT05TVU1FX1RZUEUocmlnaHRQYXJl
bnRoZXNpcywgUmlnaHRQYXJlbnRoZXNpcyk7CiAgICAgICAgIH0KIAogICAgICAgICBQQVJTRShi
b2R5LCBTdGF0ZW1lbnQpOwotICAgICAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24ob3JpZ2luLT5j
b2RlTG9jYXRpb24sICAoKmJvZHkpLT5jb2RlTG9jYXRpb24oKSk7CisgICAgICAgIENvZGVMb2Nh
dGlvbiBsb2NhdGlvbihvcmlnaW4tPmNvZGVMb2NhdGlvbiwgKCpib2R5KS0+Y29kZUxvY2F0aW9u
KCkpOwogICAgICAgICByZXR1cm4gQVNUOjpGb3JMb29wKGxvY2F0aW9uLCBXVEZNb3ZlKGluaXRp
YWxpemF0aW9uKSwgV1RGTW92ZShjb25kaXRpb24pLCBXVEZNb3ZlKGluY3JlbWVudCksIFdURk1v
dmUoKmJvZHkpKTsKICAgICB9OwogCkBAIC0xMjQzLDcgKzEyNTYsNyBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKFJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpIC0+
IEV4cGVjdGVkPAogICAgIH0KIAogICAgIGF1dG8gZW5kT2Zmc2V0ID0gbV9sZXhlci5wZWVrKCku
c3RhcnRPZmZzZXQoKTsKLSAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKHsgb3Jp
Z2luLT5zdGFydE9mZnNldCgpLCBlbmRPZmZzZXQgfSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgeyBX
VEZNb3ZlKHR5cGUpIH0sIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RG
TW92ZSgqc2VtYW50aWMpLCBXVEZNb3ZlKGluaXRpYWxpemVyKSk7CisgICAgcmV0dXJuIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbih7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0LCBt
X2xleGVyLm5hbWVTcGFjZSgpIH0sIFdURk1vdmUocXVhbGlmaWVycyksIHsgV1RGTW92ZSh0eXBl
KSB9LCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnNlbWFu
dGljKSwgV1RGTW92ZShpbml0aWFsaXplcikpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQsIEVycm9yPgpAQCAtMTI1NCw3ICsxMjY3LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zU3QKIAogICAgIGF1dG8gZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uKHR5cGUtPmNvcHlSZWYoKSk7CiAgICAgaWYgKCFmaXJzdFZhcmlhYmxlRGVj
bGFyYXRpb24pCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJzdFZhcmlhYmxl
RGVjbGFyYXRpb24uZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChmaXJz
dFZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAKICAgICBWZWN0b3I8VW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+IHJlc3VsdDsKICAgICByZXN1bHQuYXBwZW5kKG1ha2VV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihXVEZNb3ZlKCpmaXJzdFZhcmlhYmxl
RGVjbGFyYXRpb24pKSk7CkBAIC0xMjYyLDEyICsxMjc1LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uc1N0CiAgICAgd2hpbGUgKHRyeVR5cGUoVG9rZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAg
ICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24odHlw
ZS0+Y29weVJlZigpKTsKICAgICAgICAgaWYgKCF2YXJpYWJsZURlY2xhcmF0aW9uKQotICAgICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3Io
KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodmFyaWFibGVEZWNsYXJhdGlv
bi5lcnJvcigpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4oV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpKTsKICAgICB9
CiAKICAgICBhdXRvIGVuZE9mZnNldCA9IG1fbGV4ZXIucGVlaygpLnN0YXJ0T2Zmc2V0KCk7Ci0g
ICAgcmV0dXJuIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoeyBvcmlnaW4tPnN0
YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCB9LCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIHJldHVybiBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KHsgb3JpZ2luLT5zdGFydE9mZnNldCgp
LCBlbmRPZmZzZXQsIG1fbGV4ZXIubmFtZVNwYWNlKCkgfSwgV1RGTW92ZShyZXN1bHQpKTsKIH0K
IAogYXV0byBQYXJzZXI6OnBhcnNlU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFT
VDo6U3RhdGVtZW50PiwgRXJyb3I+CkBAIC0xMzg4LDcgKzE0MDEsNyBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VFZmZlY3RmdWxFeHByZXNzaW9uKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6U3Rh
dGVtZW50PiwgRQogICAgIGlmIChleHByZXNzaW9ucy5zaXplKCkgPT0gMSkKICAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KFdU
Rk1vdmUoZXhwcmVzc2lvbnNbMF0pKSB9OwogICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG1fbGV4
ZXIucGVlaygpLnN0YXJ0T2Zmc2V0KCk7Ci0gICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKG9yaWdp
bi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KTsKKyAgICBDb2RlTG9jYXRpb24gbG9jYXRpb24o
b3JpZ2luLT5zdGFydE9mZnNldCgpLCBlbmRPZmZzZXQsIG1fbGV4ZXIubmFtZVNwYWNlKCkpOwog
ICAgIGF1dG8gY29tbWFFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNvbW1hRXhwcmVz
c2lvbj4obG9jYXRpb24sIFdURk1vdmUoZXhwcmVzc2lvbnMpKTsKICAgICByZXR1cm4geyBtYWtl
VW5pcXVlUmVmPEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oV1RGTW92ZShjb21t
YUV4cHJlc3Npb24pKSB9OwogfQpAQCAtMTUzMCw3ICsxNTQzLDcgQEAgYXV0byBQYXJzZXI6OnBh
cnNlRXhwcmVzc2lvbigpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBF
cnJvcj4KICAgICBpZiAoZXhwcmVzc2lvbnMuc2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybiBX
VEZNb3ZlKGV4cHJlc3Npb25zWzBdKTsKICAgICBhdXRvIGVuZE9mZnNldCA9IG1fbGV4ZXIucGVl
aygpLnN0YXJ0T2Zmc2V0KCk7Ci0gICAgQ29kZUxvY2F0aW9uIGxvY2F0aW9uKHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpOworICAgIENvZGVMb2NhdGlvbiBsb2NhdGlvbihzdGFydE9mZnNldCwgZW5k
T2Zmc2V0LCBtX2xleGVyLm5hbWVTcGFjZSgpKTsKICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVm
PEFTVDo6Q29tbWFFeHByZXNzaW9uPihsb2NhdGlvbiwgV1RGTW92ZShleHByZXNzaW9ucykpIH07
CiB9CiAKQEAgLTE1NjQsNyArMTU3Nyw3IEBAIGF1dG8gUGFyc2VyOjpjb21wbGV0ZUFzc2lnbm1l
bnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiBsZWZ0KSAtPiBFeHBlY3RlZDxVCiAgICAg
ICAgIFRva2VuOjpUeXBlOjpSaWdodFNoaWZ0RXF1YWxzLAogICAgICAgICBUb2tlbjo6VHlwZTo6
TGVmdFNoaWZ0RXF1YWxzPigpOwogICAgIGlmICghYXNzaWdubWVudE9wZXJhdG9yKQotICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYXNzaWdubWVudE9wZXJhdG9yLmVycm9yKCkpOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoYXNzaWdubWVudE9wZXJhdG9yLmVycm9yKCkp
OwogCiAgICAgUEFSU0UocmlnaHQsIFBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKTsKICAgICBD
b2RlTG9jYXRpb24gbG9jYXRpb24gPSB7IGxlZnQtPmNvZGVMb2NhdGlvbigpLCAoKnJpZ2h0KS0+
Y29kZUxvY2F0aW9uKCkgfTsKQEAgLTE2MzYsMjMgKzE2NDksMjMgQEAgYXV0byBQYXJzZXI6OnBh
cnNlUG9zc2libGVUZXJuYXJ5Q29uZGl0aW9uYWwoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNU
OjpFeHByZXMKIAogICAgIGV4cHJlc3Npb24gPSBjb21wbGV0ZVBvc3NpYmxlU2hpZnQoV1RGTW92
ZSgqZXhwcmVzc2lvbikpOwogICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KGV4cHJlc3Npb24uZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChleHByZXNzaW9uLmVycm9yKCkpOwogCiAgICAgZXhwcmVzc2lvbiA9IGNvbXBs
ZXRlUG9zc2libGVNdWx0aXBseShXVEZNb3ZlKCpleHByZXNzaW9uKSk7CiAgICAgaWYgKCFleHBy
ZXNzaW9uKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJv
cigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGV4cHJlc3Npb24uZXJyb3IoKSk7
CiAKICAgICBleHByZXNzaW9uID0gY29tcGxldGVQb3NzaWJsZUFkZChXVEZNb3ZlKCpleHByZXNz
aW9uKSk7CiAgICAgaWYgKCFleHByZXNzaW9uKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGV4cHJlc3Npb24uZXJyb3IoKSk7CiAKICAgICBleHByZXNzaW9uID0gY29tcGxldGVQb3NzaWJs
ZVJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24oV1RGTW92ZSgqZXhwcmVzc2lvbikpOwogICAgIGlm
ICghZXhwcmVzc2lvbikKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGV4cHJlc3Np
b24uZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChleHByZXNzaW9uLmVy
cm9yKCkpOwogCiAgICAgZXhwcmVzc2lvbiA9IGNvbXBsZXRlUG9zc2libGVMb2dpY2FsQmluYXJ5
T3BlcmF0aW9uKFdURk1vdmUoKmV4cHJlc3Npb24pKTsKICAgICBpZiAoIWV4cHJlc3Npb24pCi0g
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihleHByZXNzaW9uLmVycm9yKCkpOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXhwcmVzc2lvbi5lcnJvcigpKTsKIAogICAgIFBF
RUsobmV4dFRva2VuKTsKICAgICBpZiAobmV4dFRva2VuLT50eXBlID09IFRva2VuOjpUeXBlOjpR
dWVzdGlvbk1hcmspCkBAIC0yMDI4LDI1ICsyMDQxLDI1IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVRl
cm0oKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+CiAgICAg
ICAgIFRva2VuOjpUeXBlOjpJZGVudGlmaWVyLAogICAgICAgICBUb2tlbjo6VHlwZTo6TGVmdFBh
cmVudGhlc2lzPigpOwogICAgIGlmICghdHlwZSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KHR5cGUuZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh0eXBl
LmVycm9yKCkpOwogCiAgICAgc3dpdGNoICh0eXBlLT50eXBlKSB7CiAgICAgY2FzZSBUb2tlbjo6
VHlwZTo6SW50TGl0ZXJhbDogewogICAgICAgICBhdXRvIHZhbHVlID0gaW50TGl0ZXJhbFRvSW50
KHR5cGUtPnN0cmluZ1ZpZXcobV9sZXhlcikpOwogICAgICAgICBpZiAoIXZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHZhbHVlLmVycm9yKCkpOwogICAgICAgICByZXR1cm4g
eyBtYWtlVW5pcXVlUmVmPEFTVDo6SW50ZWdlckxpdGVyYWw+KCp0eXBlLCAqdmFsdWUpIH07CiAg
ICAgfQogICAgIGNhc2UgVG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsOiB7CiAgICAgICAgIGF1dG8g
dmFsdWUgPSB1aW50TGl0ZXJhbFRvVWludCh0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAg
ICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2
YWx1ZS5lcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh2YWx1ZS5l
cnJvcigpKTsKICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlVuc2lnbmVkSW50
ZWdlckxpdGVyYWw+KCp0eXBlLCAqdmFsdWUpIH07CiAgICAgfQogICAgIGNhc2UgVG9rZW46OlR5
cGU6OkZsb2F0TGl0ZXJhbDogewogICAgICAgICBhdXRvIHZhbHVlID0gZmxvYXRMaXRlcmFsVG9G
bG9hdCh0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigpKTsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh2YWx1ZS5lcnJvcigpKTsKICAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkZsb2F0TGl0ZXJhbD4oKnR5cGUsICp2YWx1ZSkgfTsK
ICAgICB9CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6TnVsbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCmluZGV4IGJlMDUzMmRlYmQxZTU5
ZTgzNmMwNTcxMjRlZjRiNzA0MjgyOGU1NDEuLjZjMDdjMjI2OWU4NTZiNGJmMmZmMDdlOGM4MTZm
M2Y1NDA3MzQzZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuaApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIldITFNMRXJyb3Iu
aCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQYXJzaW5nTW9kZS5o
IgotI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgogI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpA
QCAtNDAsOSArMzksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wg
ewogCitjbGFzcyBQcm9ncmFtOworCiBjbGFzcyBQYXJzZXIgewogcHVibGljOgotICAgIEV4cGVj
dGVkPHZvaWQsIEVycm9yPiBwYXJzZShQcm9ncmFtJiwgU3RyaW5nVmlldywgUGFyc2luZ01vZGUp
OworICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBwYXJzZShQcm9ncmFtJiwgU3RyaW5nVmlldywg
UGFyc2luZ01vZGUsIEFTVDo6TmFtZVNwYWNlKTsKIAogcHJpdmF0ZToKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5vdCBuZWVkIHRoaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCmluZGV4IDczZjQ4MzIwM2EwNGE0ODMzYzE1
NDUzODBkYjFlODVkYzJiMmE0ODAuLjExOTU4ODhiZWNhNWVjYTkzZTIzOGY1MDQ1MjI5NzI0Y2Iz
ZDA5ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIldITFNMTGl0ZXJh
bFR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgorI2luY2x1ZGUgIldITFNMTmFtZVNwYWNlLmgi
CiAjaW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByZXNlcnZlVmFyaWFi
bGVMaWZldGltZXMuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKQEAgLTU5LDYgKzYwLDM1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAorc3RydWN0IFNo
YWRlck1vZHVsZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAg
ICBTaGFkZXJNb2R1bGUoY29uc3QgU3RyaW5nJiB3aGxzbFNvdXJjZSkKKyAgICAgICAgOiB3aGxz
bFNvdXJjZSh3aGxzbFNvdXJjZSkKKyAgICB7CisgICAgfQorCisgICAgU3RyaW5nIHdobHNsU291
cmNlOworfTsKKworfQorCit9CisKK25hbWVzcGFjZSBzdGQgeworCit2b2lkIGRlZmF1bHRfZGVs
ZXRlPFdlYkNvcmU6OldITFNMOjpTaGFkZXJNb2R1bGU+OjpvcGVyYXRvcigpKFdlYkNvcmU6OldI
TFNMOjpTaGFkZXJNb2R1bGUqIHNoYWRlck1vZHVsZSkgY29uc3QKK3sKKyAgICBkZWxldGUgc2hh
ZGVyTW9kdWxlOworfQorCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKwogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RCZWZvcmVFYWNoUGFzcyA9IGZh
bHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RBZnRlclBhcnNpbmcgPSBmYWxzZTsK
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQXRFbmQgPSBmYWxzZTsKQEAgLTEyNCwxMyAr
MTU0LDE4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotCiBwcml2YXRlOgogICAgIFN0
cmluZyBtX3BoYXNlTmFtZTsKICAgICBQaGFzZVRpbWVzJiBtX3BoYXNlVGltZXM7CiAgICAgTW9u
b3RvbmljVGltZSBtX3N0YXJ0OwogfTsKIAorVW5pcXVlUmVmPFNoYWRlck1vZHVsZT4gY3JlYXRl
U2hhZGVyTW9kdWxlKGNvbnN0IFN0cmluZyYgd2hsc2xTb3VyY2UpCit7CisgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4NzIgV2Ugc2hvdWxk
IGNvbnNpZGVyIG1vdmluZyBhcyBtdWNoIHdvcmsgZnJvbSBwcmVwYXJlKCkgaW50byBoZXJlIGFz
IHBvc3NpYmxlLgorICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFNoYWRlck1vZHVsZT4od2hsc2xT
b3VyY2UpOworfQorCiAjZGVmaW5lIENIRUNLX1BBU1MocGFzcywgLi4uKSBcCiAgICAgZG8geyBc
CiAgICAgICAgIGR1bXBBU1RCZXR3ZWVuRWFjaFBhc3NJZk5lZWRlZChwcm9ncmFtLCAiQVNUIGJl
Zm9yZSAiICMgcGFzcyk7IFwKQEAgLTEzOCw4ICsxNzMsOCBAQCBwcml2YXRlOgogICAgICAgICBh
dXRvIHJlc3VsdCA9IHBhc3MoX19WQV9BUkdTX18pOyBcCiAgICAgICAgIGlmICghcmVzdWx0KSB7
IFwKICAgICAgICAgICAgIGlmIChkdW1wUGFzc0ZhaWx1cmUpIFwKLSAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oImZhaWxlZCBwYXNzOiAiICMgcGFzcywgTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNs
U291cmNlLCByZXN1bHQuZXJyb3IoKSkpOyBcCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCByZXN1bHQuZXJyb3IoKSkpOyBc
CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgcGFzczogIiAjIHBhc3MsIExleGVy
OjplcnJvclN0cmluZyhyZXN1bHQuZXJyb3IoKSwgd2hsc2xTb3VyY2UxLCB3aGxzbFNvdXJjZTIp
KTsgXAorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmlu
ZyhyZXN1bHQuZXJyb3IoKSwgd2hsc2xTb3VyY2UxLCB3aGxzbFNvdXJjZTIpKTsgXAogICAgICAg
ICB9IFwKICAgICB9IHdoaWxlICgwKQogCkBAIC0xNTAsMTkgKzE4NSwzMSBAQCBwcml2YXRlOgog
ICAgICAgICBwYXNzKF9fVkFfQVJHU19fKTsgXAogICAgIH0gd2hpbGUgKDApCiAKLXN0YXRpYyBF
eHBlY3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBhcmVTaGFyZWQoUGhhc2VUaW1lcyYgcGhhc2VU
aW1lcywgU3RyaW5nJiB3aGxzbFNvdXJjZSkKK3N0YXRpYyBFeHBlY3RlZDxQcm9ncmFtLCBTdHJp
bmc+IHByZXBhcmVTaGFyZWQoUGhhc2VUaW1lcyYgcGhhc2VUaW1lcywgY29uc3QgU3RyaW5nJiB3
aGxzbFNvdXJjZTEsIGNvbnN0IFN0cmluZyogd2hsc2xTb3VyY2UyID0gbnVsbHB0cikKIHsKICAg
ICBQcm9ncmFtIHByb2dyYW07CiAgICAgUGFyc2VyIHBhcnNlcjsKIAogICAgIHsKKyAgICAgICAg
cHJvZ3JhbS5uYW1lQ29udGV4dCgpLnNldEN1cnJlbnROYW1lU3BhY2UoQVNUOjpOYW1lU3BhY2U6
Ok5hbWVTcGFjZTEpOworCiAgICAgICAgIFBoYXNlVGltZXIgcGhhc2VUaW1lcigicGFyc2UiLCBw
aGFzZVRpbWVzKTsKLSAgICAgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZShwcm9n
cmFtLCB3aGxzbFNvdXJjZSwgUGFyc2luZ01vZGU6OlVzZXIpOworICAgICAgICBhdXRvIHBhcnNl
UmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHdobHNsU291cmNlMSwgUGFyc2luZ01vZGU6
OlVzZXIsIEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UxKTsKICAgICAgICAgaWYgKCFwYXJzZVJl
c3VsdCkgewogICAgICAgICAgICAgaWYgKGR1bXBQYXNzRmFpbHVyZSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTogIiwgTGV4ZXI6OmVycm9y
U3RyaW5nKHdobHNsU291cmNlLCBwYXJzZVJlc3VsdC5lcnJvcigpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCBwYXJz
ZVJlc3VsdC5lcnJvcigpKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8g
cGFyc2UgdGhlIHByb2dyYW06ICIsIExleGVyOjplcnJvclN0cmluZyhwYXJzZVJlc3VsdC5lcnJv
cigpLCB3aGxzbFNvdXJjZTEsIHdobHNsU291cmNlMikpOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyhwYXJzZVJlc3VsdC5lcnJvcigpLCB3aGxz
bFNvdXJjZTEsIHdobHNsU291cmNlMikpOworICAgICAgICB9CisgICAgICAgIGlmICh3aGxzbFNv
dXJjZTIpIHsKKyAgICAgICAgICAgIHByb2dyYW0ubmFtZUNvbnRleHQoKS5zZXRDdXJyZW50TmFt
ZVNwYWNlKEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UyKTsKKyAgICAgICAgICAgIGF1dG8gcGFy
c2VSZXN1bHQgPSBwYXJzZXIucGFyc2UocHJvZ3JhbSwgKndobHNsU291cmNlMiwgUGFyc2luZ01v
ZGU6OlVzZXIsIEFTVDo6TmFtZVNwYWNlOjpOYW1lU3BhY2UyKTsKKyAgICAgICAgICAgIGlmICgh
cGFyc2VSZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoZHVtcFBhc3NGYWlsdXJlKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgcHJvZ3JhbTog
IiwgTGV4ZXI6OmVycm9yU3RyaW5nKHBhcnNlUmVzdWx0LmVycm9yKCksIHdobHNsU291cmNlMSwg
d2hsc2xTb3VyY2UyKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKExl
eGVyOjplcnJvclN0cmluZyhwYXJzZVJlc3VsdC5lcnJvcigpLCB3aGxzbFNvdXJjZTEsIHdobHNs
U291cmNlMikpOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHByb2dyYW0ubmFt
ZUNvbnRleHQoKS5zZXRDdXJyZW50TmFtZVNwYWNlKEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExp
YnJhcnkpOwogICAgIH0KIAogICAgIHsKQEAgLTIwMCwyMyArMjQ3LDI5IEBAIHN0YXRpYyBFeHBl
Y3RlZDxQcm9ncmFtLCBTdHJpbmc+IHByZXBhcmVTaGFyZWQoUGhhc2VUaW1lcyYgcGhhc2VUaW1l
cywgU3RyaW5nJiB3CiAgICAgcmV0dXJuIHByb2dyYW07CiB9CiAKLUV4cGVjdGVkPFJlbmRlclBy
ZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3ImIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcikKK0V4cGVjdGVkPFJl
bmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShjb25zdCBTaGFkZXJNb2R1bGUmIHZl
cnRleFNoYWRlck1vZHVsZSwgY29uc3QgU2hhZGVyTW9kdWxlKiBmcmFnbWVudFNoYWRlck1vZHVs
ZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpCiB7
CiAgICAgUGhhc2VUaW1lcyBwaGFzZVRpbWVzOwogICAgIE1ldGFsOjpSZW5kZXJNZXRhbENvZGUg
Z2VuZXJhdGVkQ29kZTsKIAogICAgIHsKICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJw
cmVwYXJlIHRvdGFsIiwgcGhhc2VUaW1lcyk7Ci0gICAgICAgIGF1dG8gcHJvZ3JhbSA9IHByZXBh
cmVTaGFyZWQocGhhc2VUaW1lcywgd2hsc2xTb3VyY2UpOworICAgICAgICBjb25zdCBTdHJpbmcq
IHNlY29uZFNoYWRlciA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgZGlzdGluY3RGcmFnbWVudFNo
YWRlciA9IGZhbHNlOworICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXJNb2R1bGUgJiYgZnJhZ21l
bnRTaGFkZXJNb2R1bGUgIT0gJnZlcnRleFNoYWRlck1vZHVsZSkgeworICAgICAgICAgICAgc2Vj
b25kU2hhZGVyID0gJmZyYWdtZW50U2hhZGVyTW9kdWxlLT53aGxzbFNvdXJjZTsKKyAgICAgICAg
ICAgIGRpc3RpbmN0RnJhZ21lbnRTaGFkZXIgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGF1
dG8gcHJvZ3JhbSA9IHByZXBhcmVTaGFyZWQocGhhc2VUaW1lcywgdmVydGV4U2hhZGVyTW9kdWxl
LndobHNsU291cmNlLCBzZWNvbmRTaGFkZXIpOwogICAgICAgICBpZiAoIXByb2dyYW0pCiAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocHJvZ3JhbS5lcnJvcigpKTsKIAogICAgICAg
ICBPcHRpb25hbDxNYXRjaGVkUmVuZGVyU2VtYW50aWNzPiBtYXRjaGVkU2VtYW50aWNzOwogICAg
ICAgICB7CiAgICAgICAgICAgICBQaGFzZVRpbWVyIHBoYXNlVGltZXIoIm1hdGNoU2VtYW50aWNz
IiwgcGhhc2VUaW1lcyk7Ci0gICAgICAgICAgICBtYXRjaGVkU2VtYW50aWNzID0gbWF0Y2hTZW1h
bnRpY3MoKnByb2dyYW0sIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisgICAgICAgICAgICBt
YXRjaGVkU2VtYW50aWNzID0gbWF0Y2hTZW1hbnRpY3MoKnByb2dyYW0sIHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciwgZGlzdGluY3RGcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJNb2R1bGUp
OwogICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2VtYW50aWNzKQotICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcod2hsc2xTb3VyY2UsIEVycm9y
KCJDb3VsZCBub3QgbWF0Y2ggc2VtYW50aWNzIl9zdHIpKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKExleGVyOjplcnJvclN0cmluZyhFcnJvcigiQ291bGQgbm90IG1h
dGNoIHNlbWFudGljcyJfc3RyKSwgdmVydGV4U2hhZGVyTW9kdWxlLndobHNsU291cmNlLCBzZWNv
bmRTaGFkZXIpKTsKICAgICAgICAgfQogCiAgICAgICAgIHsKQEAgLTIzNCw3ICsyODcsNyBAQCBF
eHBlY3RlZDxSZW5kZXJQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxz
bFNvdXJjZSwgUmVuZGVyUGlwZWxpbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUV4cGVjdGVk
PENvbXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJj
ZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcikK
K0V4cGVjdGVkPENvbXB1dGVQcmVwYXJlUmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoY29uc3QgU2hh
ZGVyTW9kdWxlJiBzaGFkZXJNb2R1bGUsIENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGNvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3IpCiB7CiAgICAgUGhhc2VUaW1lcyBwaGFzZVRpbWVzOwogICAg
IE1ldGFsOjpDb21wdXRlTWV0YWxDb2RlIGdlbmVyYXRlZENvZGU7CkBAIC0yNDIsNyArMjk1LDcg
QEAgRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcm
IHdobHNsU291cmNlLCBDb21wdXRlUGlwZWwKIAogICAgIHsKICAgICAgICAgUGhhc2VUaW1lciBw
aGFzZVRpbWVyKCJwcmVwYXJlIHRvdGFsIiwgcGhhc2VUaW1lcyk7Ci0gICAgICAgIGF1dG8gcHJv
Z3JhbSA9IHByZXBhcmVTaGFyZWQocGhhc2VUaW1lcywgd2hsc2xTb3VyY2UpOworICAgICAgICBh
dXRvIHByb2dyYW0gPSBwcmVwYXJlU2hhcmVkKHBoYXNlVGltZXMsIHNoYWRlck1vZHVsZS53aGxz
bFNvdXJjZSk7CiAgICAgICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChwcm9ncmFtLmVycm9yKCkpOwogCkBAIC0yNTEsMTQgKzMwNCwxNCBAQCBFeHBl
Y3RlZDxDb21wdXRlUHJlcGFyZVJlc3VsdCwgU3RyaW5nPiBwcmVwYXJlKFN0cmluZyYgd2hsc2xT
b3VyY2UsIENvbXB1dGVQaXBlbAogICAgICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJt
YXRjaFNlbWFudGljcyIsIHBoYXNlVGltZXMpOwogICAgICAgICAgICAgbWF0Y2hlZFNlbWFudGlj
cyA9IG1hdGNoU2VtYW50aWNzKCpwcm9ncmFtLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsK
ICAgICAgICAgICAgIGlmICghbWF0Y2hlZFNlbWFudGljcykKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNlLCBFcnJvcigi
Q291bGQgbm90IG1hdGNoIHNlbWFudGljcyJfc3RyKSkpOworICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcoRXJyb3IoIkNvdWxkIG5vdCBtYXRj
aCBzZW1hbnRpY3MiX3N0ciksIHNoYWRlck1vZHVsZS53aGxzbFNvdXJjZSkpOwogICAgICAgICB9
CiAKICAgICAgICAgewogICAgICAgICAgICAgUGhhc2VUaW1lciBwaGFzZVRpbWVyKCJjb21wdXRl
RGltZW5zaW9ucyIsIHBoYXNlVGltZXMpOwogICAgICAgICAgICAgY29tcHV0ZURpbWVuc2lvbnMg
PSBXSExTTDo6Y29tcHV0ZURpbWVuc2lvbnMoKnByb2dyYW0sICptYXRjaGVkU2VtYW50aWNzLT5z
aGFkZXIpOwogICAgICAgICAgICAgaWYgKCFjb21wdXRlRGltZW5zaW9ucykKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoTGV4ZXI6OmVycm9yU3RyaW5nKHdobHNsU291cmNl
LCBFcnJvcigiQ291bGQgbm90IG1hdGNoIGNvbXB1dGUgZGltZW5zaW9ucyJfc3RyKSkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChMZXhlcjo6ZXJyb3JTdHJpbmcoRXJy
b3IoIkNvdWxkIG5vdCBtYXRjaCBjb21wdXRlIGRpbWVuc2lvbnMiX3N0ciksIHNoYWRlck1vZHVs
ZS53aGxzbFNvdXJjZSkpOwogICAgICAgICB9CiAKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAppbmRleCA1ZGE3N2Y1
ZjJlZGRiOTUwOTc0ODM0N2U5NGNhN2I1OWNlYjRhNWI0Li42OTdmOWJlZDVhMDUxY2JlYTE2YjFj
NmQ4NzNjMTQ1Yjc1MzQ3ZGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXBhcmUuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldI
TFNMRXJyb3IuaCIKICNpbmNsdWRlICJXSExTTE1hbmdsZWROYW1lcy5oIgogI2luY2x1ZGUgIldI
TFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzcsMTQgKzM4LDM1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFt
ZXNwYWNlIFdITFNMIHsKIAorLy8gSGlkZSB0aGUgY29udGVudHMgb2YgdGhlIFNoYWRlck1vZHVs
ZS4gQ2xpZW50cyBvZiB0aGUgY29tcGlsZXIgc2hvdWxkbid0IGNhcmUgd2hhdCdzIGluc2lkZSBp
dC4KK3N0cnVjdCBTaGFkZXJNb2R1bGU7CisKK30KKworfQorCituYW1lc3BhY2Ugc3RkIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgZGVmYXVsdF9kZWxldGU8V2ViQ29yZTo6V0hMU0w6OlNoYWRlck1v
ZHVsZT4geworICAgIHZvaWQgb3BlcmF0b3IoKShXZWJDb3JlOjpXSExTTDo6U2hhZGVyTW9kdWxl
KikgY29uc3Q7Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKwogY29uc3RleHByIGJvb2wgZHVtcE1ldGFsQ29tcGlsZVRpbWVzID0gZmFsc2U7CiAK
K1VuaXF1ZVJlZjxTaGFkZXJNb2R1bGU+IGNyZWF0ZVNoYWRlck1vZHVsZShjb25zdCBTdHJpbmcm
IHdobHNsU291cmNlKTsKKwogc3RydWN0IFJlbmRlclByZXBhcmVSZXN1bHQgewogICAgIFN0cmlu
Z0J1aWxkZXIgbWV0YWxTb3VyY2U7CiAgICAgTWV0YWw6Ok1hbmdsZWRGdW5jdGlvbk5hbWUgbWFu
Z2xlZFZlcnRleEVudHJ5UG9pbnROYW1lOwogICAgIE1ldGFsOjpNYW5nbGVkRnVuY3Rpb25OYW1l
IG1hbmdsZWRGcmFnbWVudEVudHJ5UG9pbnROYW1lOwogfTsKLUV4cGVjdGVkPFJlbmRlclByZXBh
cmVSZXN1bHQsIFN0cmluZz4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBSZW5kZXJQaXBl
bGluZURlc2NyaXB0b3ImKTsKK0V4cGVjdGVkPFJlbmRlclByZXBhcmVSZXN1bHQsIFN0cmluZz4g
cHJlcGFyZShjb25zdCBTaGFkZXJNb2R1bGUmIHZlcnRleFNoYWRlck1vZHVsZSwgY29uc3QgU2hh
ZGVyTW9kdWxlKiBmcmFnbWVudFNoYWRlck1vZHVsZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
Jik7CiAKIHN0cnVjdCBDb21wdXRlRGltZW5zaW9ucyB7CiAgICAgdW5zaWduZWQgd2lkdGg7CkBA
IC01Nyw3ICs3OSw3IEBAIHN0cnVjdCBDb21wdXRlUHJlcGFyZVJlc3VsdCB7CiAgICAgTWV0YWw6
Ok1hbmdsZWRGdW5jdGlvbk5hbWUgbWFuZ2xlZEVudHJ5UG9pbnROYW1lOwogICAgIENvbXB1dGVE
aW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zOwogfTsKLUV4cGVjdGVkPENvbXB1dGVQcmVwYXJl
UmVzdWx0LCBTdHJpbmc+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVs
aW5lRGVzY3JpcHRvciYpOworRXhwZWN0ZWQ8Q29tcHV0ZVByZXBhcmVSZXN1bHQsIFN0cmluZz4g
cHJlcGFyZShjb25zdCBTaGFkZXJNb2R1bGUmLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7
CiAKIH0gLy8gbmFtZXNwYWNlIFdITFNMCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKaW5kZXggNDBiYWYwOTQyZWFmNmFmZmU0MWI2
MjU0NDY4OTBlMzJhY2MxYTBiNS4uOTA4NjFlYzJhYTRjYzQ4ZTIxNGFkMTgzMTg5ZjFlNDA1NmM5
OTMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcm9ncmFtLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5j
bHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEVycm9y
LmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKICNpbmNsdWRlICJXSExT
TEludHJpbnNpY3MuaCIKICNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCkBAIC00NiwzOCAr
NDcsMzggQEAgcHVibGljOgogICAgIFByb2dyYW0oKSA9IGRlZmF1bHQ7CiAgICAgUHJvZ3JhbShQ
cm9ncmFtJiYpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgYXBwZW5kKEFTVDo6VHlwZURlZmluaXRp
b24mJiB0eXBlRGVmaW5pdGlvbikKKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gYXBwZW5kKEFT
VDo6VHlwZURlZmluaXRpb24mJiB0eXBlRGVmaW5pdGlvbikKICAgICB7CiAgICAgICAgIG1fdHlw
ZURlZmluaXRpb25zLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZURlZmluaXRpb24+KFdU
Rk1vdmUodHlwZURlZmluaXRpb24pKSk7CiAgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFk
ZChtX3R5cGVEZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KIAotICAgIGJvb2wgYXBwZW5kKEFT
VDo6U3RydWN0dXJlRGVmaW5pdGlvbiYmIHN0cnVjdHVyZURlZmluaXRpb24pCisgICAgRXhwZWN0
ZWQ8dm9pZCwgRXJyb3I+IGFwcGVuZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mJiBzdHJ1Y3R1
cmVEZWZpbml0aW9uKQogICAgIHsKICAgICAgICAgbV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5hcHBl
bmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KFdURk1vdmUoc3RydWN0
dXJlRGVmaW5pdGlvbikpKTsKICAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKG1fc3Ry
dWN0dXJlRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9CiAKLSAgICBib29sIGFwcGVuZChBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKKyAgICBFeHBl
Y3RlZDx2b2lkLCBFcnJvcj4gYXBwZW5kKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiYgZW51
bWVyYXRpb25EZWZpbml0aW9uKQogICAgIHsKICAgICAgICAgbV9lbnVtZXJhdGlvbkRlZmluaXRp
b25zLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihXVEZN
b3ZlKGVudW1lcmF0aW9uRGVmaW5pdGlvbikpKTsKICAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRl
eHQuYWRkKG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KIAotICAgIGJv
b2wgYXBwZW5kKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiYgZnVuY3Rpb25EZWZpbml0aW9uKQor
ICAgIEV4cGVjdGVkPHZvaWQsIEVycm9yPiBhcHBlbmQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
JiBmdW5jdGlvbkRlZmluaXRpb24pCiAgICAgewogICAgICAgICBtX2Z1bmN0aW9uRGVmaW5pdGlv
bnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KFdURk1vdmUo
ZnVuY3Rpb25EZWZpbml0aW9uKSkpOwogICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQo
bV9mdW5jdGlvbkRlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAgYm9vbCBhcHBlbmQo
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bikKKyAgICBFeHBlY3RlZDx2b2lkLCBFcnJvcj4gYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBt
X25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KSkpOwogICAgICAgICBtX2ludHJpbnNpY3MuYWRkKG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMubGFzdCgpKTsKICAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKG1fbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnMubGFzdCgpKTsKICAgICB9CiAKLSAgICBib29sIGFwcGVuZChBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYmIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKKyAgICBFeHBl
Y3RlZDx2b2lkLCBFcnJvcj4gYXBwZW5kKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uKQogICAgIHsKICAgICAgICAgbV9uYXRpdmVUeXBlRGVjbGFyYXRp
b25zLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihXVEZN
b3ZlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpKTsKICAgICAgICAgbV9pbnRyaW5zaWNzLmFkZCht
X25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMubGFzdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZElt
cGwuY3BwCmluZGV4IDQyNGU3OTUxNWU3OTMxYWZlODQ2MzRlYzRiNmVjNmMzOTc3Mzg2ZjguLjdj
NjU2OTc4ODQ5ZGZiMGI5ZjVmMTEwZmRlZDRjZGVjMTgyZmRhNDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZl
T3ZlcmxvYWRJbXBsLmNwcApAQCAtNTIsMTIgKzUyLDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBjb252
ZXJzaW9uQ29zdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGNhbmRpZGF0ZSwgY29uc3QgVmVj
dG9yCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlS2luZD4KLUFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9u
cywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVu
dFR5cGVzLCBUeXBlS2luZCogY2FzdFJldHVyblR5cGUpCitzdGF0aWMgQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rp
b25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3Vt
ZW50VHlwZXMsIFR5cGVLaW5kKiBjYXN0UmV0dXJuVHlwZSwgQVNUOjpOYW1lU3BhY2UgbmFtZVNw
YWNlKQogewogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+IGNhbmRpZGF0ZXM7CiAgICAgZm9yIChhdXRvJiBwb3NzaWJsZUZ1bmN0
aW9uIDogcG9zc2libGVGdW5jdGlvbnMpIHsKICAgICAgICAgaWYgKHBvc3NpYmxlRnVuY3Rpb24u
Z2V0KCkuZW50cnlQb2ludFR5cGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAobmFtZVNwYWNlID09IEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpIHsKKyAgICAg
ICAgICAgIGlmIChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLm5hbWVTcGFjZSgpICE9IEFTVDo6TmFt
ZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocG9zc2libGVGdW5jdGlvbi5nZXQoKS5uYW1l
U3BhY2UoKSAhPSBBU1Q6Ok5hbWVTcGFjZTo6U3RhbmRhcmRMaWJyYXJ5ICYmIHBvc3NpYmxlRnVu
Y3Rpb24uZ2V0KCkubmFtZVNwYWNlKCkgIT0gbmFtZVNwYWNlKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CiAgICAgICAgIGlmIChpbmZlclR5cGVzRm9yQ2FsbChwb3NzaWJs
ZUZ1bmN0aW9uLmdldCgpLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSkpCiAgICAgICAg
ICAgICBjYW5kaWRhdGVzLmFwcGVuZChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpKTsKICAgICB9CkBA
IC03NywxOSArODQsMTkgQEAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rp
b25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXAKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVy
bG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcykKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIEFT
VDo6TmFtZVNwYWNlIG5hbWVTcGFjZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBzdGF0aWNfY2FzdDxB
U1Q6Ok5hbWVkVHlwZSo+KG51bGxwdHIpKTsKKyAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWRJbXBsKHBvc3NpYmxlRnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBzdGF0aWNfY2FzdDxB
U1Q6Ok5hbWVkVHlwZSo+KG51bGxwdHIpLCBuYW1lU3BhY2UpOwogfQogCi1BU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9u
cywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVu
dFR5cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUpCitBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5
cGVzLCBBU1Q6Ok5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUsIEFTVDo6TmFtZVNwYWNlIG5hbWVT
cGFjZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxl
RnVuY3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7CisgICAgcmV0dXJuIHJl
c29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwb3NzaWJsZUZ1bmN0aW9ucywgYXJndW1lbnRUeXBl
cywgY2FzdFJldHVyblR5cGUsIG5hbWVTcGFjZSk7CiB9CiAKLUFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMs
IEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlKQorQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywg
QVNUOjpVbm5hbWVkVHlwZSogY2FzdFJldHVyblR5cGUsIEFTVDo6TmFtZVNwYWNlIG5hbWVTcGFj
ZSkKIHsKLSAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHBvc3NpYmxlRnVu
Y3Rpb25zLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7CisgICAgcmV0dXJuIHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwb3NzaWJsZUZ1bmN0aW9ucywgYXJndW1lbnRUeXBlcywg
Y2FzdFJldHVyblR5cGUsIG5hbWVTcGFjZSk7CiB9CiAKIEFTVDo6TmFtZWRUeXBlKiByZXNvbHZl
VHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVk
VHlwZT4sIDE+JiBwb3NzaWJsZVR5cGVzLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVu
dHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFJlc29sdmVPdmVybG9hZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCmluZGV4IDNkMzRhYjZmMzhkNDk5YzlkMzU4
NmNkMTMwYTczYTI5MWU3ZDBkMTIuLjNiMTk1YTIxYzU3MmUwZjcyMGZhZGFkZmRhMWExN2RhNDYw
NDEyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCkBAIC00Myw5ICs0Myw5IEBAIGNs
YXNzIE5hbWVkVHlwZTsKIAogfQogCi1BU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVG
dW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzKTsKLUFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rp
b25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3Vt
ZW50VHlwZXMsIEFTVDo6TmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSk7Ci1BU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9u
cywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVu
dFR5cGVzLCBBU1Q6OlVubmFtZWRUeXBlKiBjYXN0UmV0dXJuVHlwZSk7CitBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9u
cywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVu
dFR5cGVzLCBBU1Q6Ok5hbWVTcGFjZSk7CitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBBU1Q6Ok5hbWVk
VHlwZSogY2FzdFJldHVyblR5cGUsIEFTVDo6TmFtZVNwYWNlKTsKK0FTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiogcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlw
ZXMsIEFTVDo6VW5uYW1lZFR5cGUqIGNhc3RSZXR1cm5UeXBlLCBBU1Q6Ok5hbWVTcGFjZSk7CiBB
U1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYsIEFTVDo6VHlwZUFyZ3VtZW50cyYpOwog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFNlbWFudGljTWF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFNlbWFudGljTWF0Y2hlci5jcHAKaW5kZXggMTU3YTRiZmM5MjMzMWQ3ZTdjZDViY2Uz
MjBkNDExOGRjMDA4NzAyYi4uMmNjN2Q3ZGJiNTQzNTlhMTg0ZWU3ZjliNTE5NGRiN2FjZDlhZjAy
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
ZW1hbnRpY01hdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmNwcApAQCAtNDUsMTYgKzQ1LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi1zdGF0aWMgQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24qIGZpbmRFbnRyeVBvaW50KFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24+PiYgZnVuY3Rpb25EZWZpbml0aW9ucywgU3RyaW5nJiBuYW1lKQotewotICAgIGF1
dG8gaXRlcmF0b3IgPSBzdGQ6OmZpbmRfaWYoZnVuY3Rpb25EZWZpbml0aW9ucy5iZWdpbigpLCBm
dW5jdGlvbkRlZmluaXRpb25zLmVuZCgpLCBbJl0oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1
bmN0aW9uRGVmaW5pdGlvbikgewotICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLmVu
dHJ5UG9pbnRUeXBlKCkgJiYgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSBuYW1lOwotICAg
IH0pOwotICAgIGlmIChpdGVyYXRvciA9PSBmdW5jdGlvbkRlZmluaXRpb25zLmVuZCgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gJippdGVyYXRvcjsKLX07Ci0KIHN0YXRp
YyBib29sIG1hdGNoTW9kZShCaW5kaW5nOjpCaW5kaW5nRGV0YWlscyBiaW5kaW5nVHlwZSwgQVNU
OjpSZXNvdXJjZVNlbWFudGljOjpNb2RlIG1vZGUpCiB7CiAgICAgcmV0dXJuIFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pZm9ybUJ1ZmZlckJpbmRpbmcpIC0+IGJvb2wgewpAQCAt
MjkwLDQ2ICsyODAsNTkgQEAgc3RhdGljIGJvb2wgbWF0Y2hEZXB0aEF0dGFjaG1lbnQoVmVjdG9y
PEVudHJ5UG9pbnRJdGVtPiYgZnJhZ21lbnRPdXRwdXRzLCBPcHRpb24KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLU9wdGlvbmFsPE1hdGNoZWRSZW5kZXJTZW1hbnRpY3M+IG1hdGNoU2VtYW50aWNz
KFByb2dyYW0mIHByb2dyYW0sIFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKQorT3B0aW9uYWw8TWF0Y2hlZFJlbmRlclNlbWFudGljcz4gbWF0Y2hTZW1h
bnRpY3MoUHJvZ3JhbSYgcHJvZ3JhbSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IsIGJvb2wgZGlzdGluY3RGcmFnbWVudFNoYWRlciwgYm9vbCBmcmFn
bWVudFNoYWRlckV4aXN0cykKIHsKLSAgICBhdXRvIHZlcnRleFNoYWRlckVudHJ5UG9pbnQgPSBm
aW5kRW50cnlQb2ludChwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSwgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yLnZlcnRleEVudHJ5UG9pbnROYW1lKTsKLSAgICBhdXRvIGZyYWdtZW50U2hh
ZGVyRW50cnlQb2ludCA9IGZpbmRFbnRyeVBvaW50KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9u
cygpLCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IuZnJhZ21lbnRFbnRyeVBvaW50TmFtZSk7Ci0g
ICAgaWYgKCF2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50IHx8ICFmcmFnbWVudFNoYWRlckVudHJ5UG9p
bnQpCisgICAgYXV0byB2ZXJ0ZXhGdW5jdGlvbnMgPSBwcm9ncmFtLm5hbWVDb250ZXh0KCkuZ2V0
RnVuY3Rpb25zKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci52ZXJ0ZXhFbnRyeVBvaW50TmFtZSwg
QVNUOjpOYW1lU3BhY2U6Ok5hbWVTcGFjZTEpOworICAgIGlmICh2ZXJ0ZXhGdW5jdGlvbnMuc2l6
ZSgpICE9IDEgfHwgIXZlcnRleEZ1bmN0aW9uc1swXS5nZXQoKS5lbnRyeVBvaW50VHlwZSgpIHx8
ICFpczxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4odmVydGV4RnVuY3Rpb25zWzBdLmdldCgpKSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIHZlcnRleFNoYWRlckVudHJ5
UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhwcm9ncmFtLmludHJpbnNpY3MoKSwg
KnZlcnRleFNoYWRlckVudHJ5UG9pbnQpOwotICAgIGF1dG8gZnJhZ21lbnRTaGFkZXJFbnRyeVBv
aW50SXRlbXMgPSBnYXRoZXJFbnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksICpm
cmFnbWVudFNoYWRlckVudHJ5UG9pbnQpOwotICAgIGlmICghdmVydGV4U2hhZGVyRW50cnlQb2lu
dEl0ZW1zIHx8ICFmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcykKKyAgICBhdXRvJiB2ZXJ0
ZXhTaGFkZXJFbnRyeVBvaW50ID0gZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KHZl
cnRleEZ1bmN0aW9uc1swXS5nZXQoKSk7CisgICAgYXV0byB2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50
SXRlbXMgPSBnYXRoZXJFbnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHZlcnRl
eFNoYWRlckVudHJ5UG9pbnQpOworICAgIGlmICghdmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1z
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGF1dG8gdmVydGV4U2hhZGVyUmVz
b3VyY2VNYXAgPSBtYXRjaFJlc291cmNlcyh2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMtPmlu
cHV0cywgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmxheW91dCwgU2hhZGVyU3RhZ2U6OlZlcnRl
eCk7Ci0gICAgYXV0byBmcmFnbWVudFNoYWRlclJlc291cmNlTWFwID0gbWF0Y2hSZXNvdXJjZXMo
ZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMtPmlucHV0cywgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yLmxheW91dCwgU2hhZGVyU3RhZ2U6OkZyYWdtZW50KTsKLSAgICBpZiAoIXZlcnRleFNo
YWRlclJlc291cmNlTWFwIHx8ICFmcmFnbWVudFNoYWRlclJlc291cmNlTWFwKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghbWF0Y2hJbnB1dHNPdXRwdXRzKHZlcnRleFNo
YWRlckVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0cywgZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRl
bXMtPmlucHV0cykpCisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcCkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBhdXRvIG1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzID0g
bWF0Y2hWZXJ0ZXhBdHRyaWJ1dGVzKHZlcnRleFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRz
LCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IudmVydGV4QXR0cmlidXRlcywgcHJvZ3JhbS5pbnRy
aW5zaWNzKCkpOwogICAgIGlmICghbWF0Y2hlZFZlcnRleEF0dHJpYnV0ZXMpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFmcmFnbWVudFNoYWRlckV4aXN0cykKKyAgICAg
ICAgcmV0dXJuIHt7ICZ2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50LCBudWxscHRyLCAqdmVydGV4U2hh
ZGVyRW50cnlQb2ludEl0ZW1zLCBFbnRyeVBvaW50SXRlbXMoKSwgKnZlcnRleFNoYWRlclJlc291
cmNlTWFwLCBIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+KCksICptYXRjaGVkVmVydGV4QXR0cmli
dXRlcywgSGFzaE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNpemVfdD4oKSB9fTsKKworICAg
IGF1dG8gZnJhZ21lbnROYW1lU3BhY2UgPSBkaXN0aW5jdEZyYWdtZW50U2hhZGVyID8gQVNUOjpO
YW1lU3BhY2U6Ok5hbWVTcGFjZTIgOiBBU1Q6Ok5hbWVTcGFjZTo6TmFtZVNwYWNlMTsKKyAgICBh
dXRvIGZyYWdtZW50RnVuY3Rpb25zID0gcHJvZ3JhbS5uYW1lQ29udGV4dCgpLmdldEZ1bmN0aW9u
cyhyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IuZnJhZ21lbnRFbnRyeVBvaW50TmFtZSwgZnJhZ21l
bnROYW1lU3BhY2UpOworICAgIGlmIChmcmFnbWVudEZ1bmN0aW9ucy5zaXplKCkgIT0gMSB8fCAh
ZnJhZ21lbnRGdW5jdGlvbnNbMF0uZ2V0KCkuZW50cnlQb2ludFR5cGUoKSB8fCAhaXM8QVNUOjpG
dW5jdGlvbkRlZmluaXRpb24+KGZyYWdtZW50RnVuY3Rpb25zWzBdLmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvJiBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQg
PSBkb3duY2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oZnJhZ21lbnRGdW5jdGlvbnNbMF0u
Z2V0KCkpOworICAgIGF1dG8gZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50SXRlbXMgPSBnYXRoZXJF
bnRyeVBvaW50SXRlbXMocHJvZ3JhbS5pbnRyaW5zaWNzKCksIGZyYWdtZW50U2hhZGVyRW50cnlQ
b2ludCk7CisgICAgaWYgKCFmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcykKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIGZyYWdtZW50U2hhZGVyUmVzb3VyY2VNYXAg
PSBtYXRjaFJlc291cmNlcyhmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCBy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0LCBTaGFkZXJTdGFnZTo6RnJhZ21lbnQpOwor
ICAgIGlmICghZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcCkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBpZiAoIW1hdGNoSW5wdXRzT3V0cHV0cyh2ZXJ0ZXhTaGFkZXJFbnRyeVBv
aW50SXRlbXMtPm91dHB1dHMsIGZyYWdtZW50U2hhZGVyRW50cnlQb2ludEl0ZW1zLT5pbnB1dHMp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGF1dG8gbWF0Y2hlZENvbG9yQXR0
YWNobWVudHMgPSBtYXRjaENvbG9yQXR0YWNobWVudHMoZnJhZ21lbnRTaGFkZXJFbnRyeVBvaW50
SXRlbXMtPm91dHB1dHMsIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5hdHRhY2htZW50c1N0YXRl
RGVzY3JpcHRvci5hdHRhY2htZW50RGVzY3JpcHRvcnMsIHByb2dyYW0uaW50cmluc2ljcygpKTsK
ICAgICBpZiAoIW1hdGNoZWRDb2xvckF0dGFjaG1lbnRzKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIGlmICghbWF0Y2hEZXB0aEF0dGFjaG1lbnQoZnJhZ21lbnRTaGFkZXJFbnRy
eVBvaW50SXRlbXMtPm91dHB1dHMsIHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5hdHRhY2htZW50
c1N0YXRlRGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50RGVzY3JpcHRvciwgcHJvZ3Jh
bS5pbnRyaW5zaWNzKCkpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVy
biB7eyB2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50LCBmcmFnbWVudFNoYWRlckVudHJ5UG9pbnQsICp2
ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50SXRlbXMsICpmcmFnbWVudFNoYWRlckVudHJ5UG9pbnRJdGVt
cywgKnZlcnRleFNoYWRlclJlc291cmNlTWFwLCAqZnJhZ21lbnRTaGFkZXJSZXNvdXJjZU1hcCwg
Km1hdGNoZWRWZXJ0ZXhBdHRyaWJ1dGVzLCAqbWF0Y2hlZENvbG9yQXR0YWNobWVudHMgfX07Cisg
ICAgcmV0dXJuIHt7ICZ2ZXJ0ZXhTaGFkZXJFbnRyeVBvaW50LCAmZnJhZ21lbnRTaGFkZXJFbnRy
eVBvaW50LCAqdmVydGV4U2hhZGVyRW50cnlQb2ludEl0ZW1zLCAqZnJhZ21lbnRTaGFkZXJFbnRy
eVBvaW50SXRlbXMsICp2ZXJ0ZXhTaGFkZXJSZXNvdXJjZU1hcCwgKmZyYWdtZW50U2hhZGVyUmVz
b3VyY2VNYXAsICptYXRjaGVkVmVydGV4QXR0cmlidXRlcywgKm1hdGNoZWRDb2xvckF0dGFjaG1l
bnRzIH19OwogfQogCiBPcHRpb25hbDxNYXRjaGVkQ29tcHV0ZVNlbWFudGljcz4gbWF0Y2hTZW1h
bnRpY3MoUHJvZ3JhbSYgcHJvZ3JhbSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYgY29tcHV0
ZVBpcGVsaW5lRGVzY3JpcHRvcikKIHsKLSAgICBhdXRvIGVudHJ5UG9pbnQgPSBmaW5kRW50cnlQ
b2ludChwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSwgY29tcHV0ZVBpcGVsaW5lRGVzY3Jp
cHRvci5lbnRyeVBvaW50TmFtZSk7Ci0gICAgaWYgKCFlbnRyeVBvaW50KQorICAgIGF1dG8gZnVu
Y3Rpb25zID0gcHJvZ3JhbS5uYW1lQ29udGV4dCgpLmdldEZ1bmN0aW9ucyhjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yLmVudHJ5UG9pbnROYW1lLCBBU1Q6Ok5hbWVTcGFjZTo6TmFtZVNwYWNlMSk7
CisgICAgaWYgKGZ1bmN0aW9ucy5zaXplKCkgIT0gMSB8fCAhZnVuY3Rpb25zWzBdLmdldCgpLmVu
dHJ5UG9pbnRUeXBlKCkgfHwgIWlzPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihmdW5jdGlvbnNb
MF0uZ2V0KCkpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gZW50cnlQ
b2ludEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCAq
ZW50cnlQb2ludCk7CisgICAgYXV0byYgZW50cnlQb2ludCA9IGRvd25jYXN0PEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uPihmdW5jdGlvbnNbMF0uZ2V0KCkpOworICAgIGF1dG8gZW50cnlQb2ludEl0
ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKHByb2dyYW0uaW50cmluc2ljcygpLCBlbnRyeVBv
aW50KTsKICAgICBpZiAoIWVudHJ5UG9pbnRJdGVtcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICBBU1NFUlQoZW50cnlQb2ludEl0ZW1zLT5vdXRwdXRzLmlzRW1wdHkoKSk7CiAg
ICAgYXV0byByZXNvdXJjZU1hcCA9IG1hdGNoUmVzb3VyY2VzKGVudHJ5UG9pbnRJdGVtcy0+aW5w
dXRzLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yLmxheW91dCwgU2hhZGVyU3RhZ2U6OkNvbXB1
dGUpOwogICAgIGlmICghcmVzb3VyY2VNYXApCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgcmV0dXJuIHt7IGVudHJ5UG9pbnQsICplbnRyeVBvaW50SXRlbXMsICpyZXNvdXJjZU1h
cCB9fTsKKyAgICByZXR1cm4ge3sgJmVudHJ5UG9pbnQsICplbnRyeVBvaW50SXRlbXMsICpyZXNv
dXJjZU1hcCB9fTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV0hMU0wKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5o
CmluZGV4IGJkZmY0YmJmZjc4ODA4NGY3N2RjNmU2OGRhZWNkNjg5N2NiMWNjNzAuLjM2OWJlNGI4
ZTg1NTExN2Q0OWU4NzdjYzU0MWVmYmMwMjNmMTdhMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuaApA
QCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgTWF0Y2hlZFJlbmRlclNlbWFudGljcyB7CiAgICAgSGFz
aE1hcDxBdHRhY2htZW50RGVzY3JpcHRvciosIHNpemVfdD4gbWF0Y2hlZENvbG9yQXR0YWNobWVu
dHM7CiB9OwogCi1PcHRpb25hbDxNYXRjaGVkUmVuZGVyU2VtYW50aWNzPiBtYXRjaFNlbWFudGlj
cyhQcm9ncmFtJiwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7CitPcHRpb25hbDxNYXRjaGVk
UmVuZGVyU2VtYW50aWNzPiBtYXRjaFNlbWFudGljcyhQcm9ncmFtJiwgUmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yJiwgYm9vbCBkaXN0aW5jdEZyYWdtZW50U2hhZGVyLCBib29sIGZyYWdtZW50U2hh
ZGVyRXhpc3RzKTsKIAogc3RydWN0IE1hdGNoZWRDb21wdXRlU2VtYW50aWNzIHsKICAgICBBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiogc2hhZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlV
dGlsaXRpZXMuY3BwCmluZGV4IDI0MDY5ZWM1NTNhZThhYzU3NzJlZjdmYzM4OWU2MDY1YTdkOWVj
ZDEuLjMzMTkzMmY4ODNiYmQ0NmY2MzM1M2I0MTM5ZGM5ZDQzOWNmYjllOTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5
VXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGllcy5jcHAKQEAgLTc3LDIzICs3NywyMiBAQCBwcml2
YXRlOgogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Z1bmN0aW9uTmFtZXM7CiB9OwogCi12b2lkIGlu
Y2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYgcHJvZ3JhbSwgUGFyc2VyJiBwYXJzZXIsIGJv
b2wgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5KQorRXhwZWN0ZWQ8dm9pZCwgRXJyb3I+IGluY2x1
ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYgcHJvZ3JhbSwgUGFyc2VyJiBwYXJzZXIsIGJvb2wg
cGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxT
dHJpbmc+IHN0YW5kYXJkTGlicmFyeShkZWNvbXByZXNzQW5kRGVjb2RlU3RhbmRhcmRMaWJyYXJ5
KCkpOwogICAgIGlmIChwYXJzZUZ1bGxTdGFuZGFyZExpYnJhcnkpIHsKLSAgICAgICAgYXV0byBw
YXJzZVJlc3VsdCA9IHBhcnNlci5wYXJzZShwcm9ncmFtLCBzdGFuZGFyZExpYnJhcnkuZ2V0KCks
IFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpOwotICAgICAgICBpZiAoIXBhcnNlUmVzdWx0
KSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBwYXJzZSB0aGUgKGZ1bGwpIHN0
YW5kYXJkIGxpYnJhcnk6ICIsIExleGVyOjplcnJvclN0cmluZyhTdHJpbmdWaWV3KHN0YW5kYXJk
TGlicmFyeSksIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBwYXJz
ZVJlc3VsdCA9IHBhcnNlci5wYXJzZShwcm9ncmFtLCBzdGFuZGFyZExpYnJhcnkuZ2V0KCksIFBh
cnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnksIEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJh
cnkpOworICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKHBhcnNlUmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgU3Vic3RyaW5n
TG9jYXRpb24+PiBzdGFuZGFyZExpYnJhcnlGdW5jdGlvbk1hcChjb21wdXRlU3RhbmRhcmRMaWJy
YXJ5RnVuY3Rpb25NYXAoKSk7CiAKICAgICBhdXRvIHN0cmluZ1ZpZXcgPSBTdHJpbmdWaWV3KHN0
YW5kYXJkTGlicmFyeS5nZXQoKSkuc3Vic3RyaW5nKDAsIGZpcnN0RnVuY3Rpb25PZmZzZXRJblN0
YW5kYXJkTGlicmFyeSgpKTsKLSAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHBy
b2dyYW0sIHN0cmluZ1ZpZXcsIFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpOwotICAgIEFT
U0VSVF9VTlVTRUQocGFyc2VSZXN1bHQsIHBhcnNlUmVzdWx0KTsKKyAgICBhdXRvIHBhcnNlUmVz
dWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcsIFBhcnNpbmdNb2RlOjpTdGFu
ZGFyZExpYnJhcnksIEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExpYnJhcnkpOworICAgIGlmICgh
cGFyc2VSZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChwYXJzZVJlc3VsdC5l
cnJvcigpKTsKIAogICAgIE5hbWVGaW5kZXIgbmFtZUZpbmRlcjsKICAgICBuYW1lRmluZGVyLlZp
c2l0b3I6OnZpc2l0KHByb2dyYW0pOwpAQCAtMTAyLDYgKzEwMSwxMCBAQCB2b2lkIGluY2x1ZGVT
dGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYgcHJvZ3JhbSwgUGFyc2VyJiBwYXJzZXIsIGJvb2wgcGFy
c2VGdWxsU3RhbgogICAgIC8vIFRoZSBuYW1lIG9mIGEgY2FsbCB0byBhIGNhc3Qgb3BlcmF0b3Ig
aXMgdGhlIG5hbWUgb2YgdGhlIHR5cGUsIHNvIHdlIGNhbid0IG1hdGNoIHRoZW0gdXAgY29ycmVj
dGx5LgogICAgIC8vIEluc3RlYWQsIGp1c3QgaW5jbHVkZSBhbGwgY2FzdGluZyBvcGVyYXRvcnMu
CiAgICAgZnVuY3Rpb25OYW1lcy5hZGQoIm9wZXJhdG9yIGNhc3QiX3N0cik7CisgICAgLy8gV2Ug
bmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhbiBhdXRob3IgY2FuJ3Qgd3JpdGUgYSBmdW5jdGlvbiB3
aXRoIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyBhbnl0aGluZyBpbiB0aGUgc3RhbmRhcmQgbGlicmFy
eS4KKyAgICAvLyBJZiB0aGV5IGRvIHNvLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBjb2xsaWRl
cywgc28gd2UgaW5jbHVkZSBhbGwgcG90ZW50aWFsIGR1cGxpY2F0ZXMgaGVyZSwgYW5kIHRoZSAi
Y2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMiIHBhc3MgZW5mb3JjZXMgaXQuCisgICAgZm9yIChhdXRv
JiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAg
ICAgICAgZnVuY3Rpb25OYW1lcy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLT5uYW1lKCkpOwogICAg
IHdoaWxlICghZnVuY3Rpb25OYW1lcy5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0byBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uc0NvdW50ID0gcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9ucygpLnNpemUoKTsKICAgICAgICAgYXV0byBmdW5jdGlvbkRlZmluaXRpb25zQ291bnQgPSBw
cm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKS5zaXplKCk7CkBAIC0xMTgsMTIgKzEyMSw5IEBA
IHZvaWQgaW5jbHVkZVN0YW5kYXJkTGlicmFyeShQcm9ncmFtJiBwcm9ncmFtLCBQYXJzZXImIHBh
cnNlciwgYm9vbCBwYXJzZUZ1bGxTdGFuCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGF1
dG8gc3RhcnQgPSBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKS5zaXplKCk7Ci0gICAgICAg
ICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcs
IFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnkpOwotICAgICAgICAgICAgaWYgKCFwYXJzZVJl
c3VsdCkgewotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZmFpbGVkIHRvIHBhcnNlIHRoZSAo
cGFydGlhbCkgc3RhbmRhcmQgbGlicmFyeTogIiwgTGV4ZXI6OmVycm9yU3RyaW5nKHN0cmluZ1Zp
ZXcsIHBhcnNlUmVzdWx0LmVycm9yKCkpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0cmluZ1ZpZXcs
IFBhcnNpbmdNb2RlOjpTdGFuZGFyZExpYnJhcnksIEFTVDo6TmFtZVNwYWNlOjpTdGFuZGFyZExp
YnJhcnkpOworICAgICAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQocGFyc2VSZXN1bHQuZXJyb3IoKSk7CiAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGlmIChwcm9ncmFtLmZ1bmN0aW9uRGVmaW5p
dGlvbnMoKS5zaXplKCkgIT0gc3RhcnQpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
bm9uIG5hdGl2ZSBzdGRsaWIgZnVuY3Rpb246ICciLCBuYW1lLCAiJyIpOwpAQCAtMTM2LDYgKzEz
Niw3IEBAIHZvaWQgaW5jbHVkZVN0YW5kYXJkTGlicmFyeShQcm9ncmFtJiBwcm9ncmFtLCBQYXJz
ZXImIHBhcnNlciwgYm9vbCBwYXJzZUZ1bGxTdGFuCiAgICAgICAgICAgICBuYW1lRmluZGVyLlZp
c2l0b3I6OnZpc2l0KHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpW2Z1bmN0aW9uRGVmaW5p
dGlvbnNDb3VudF0pOwogICAgICAgICBmdW5jdGlvbk5hbWVzID0gbmFtZUZpbmRlci50YWtlRnVu
Y3Rpb25OYW1lcygpOwogICAgIH0KKyAgICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXSExTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5VXRpbGl0aWVzLmgKaW5kZXggY2FmNmE0
MWUyM2I5Y2JlMTgzNDQ4MGI0ZmNhYmYxMGNjYWMwZTYzNy4uMDE4Y2U3Yzk2Yzg0MGJkOTdlZjg0
MWYyYzQxYjQ0ZDQ5MjU1NDBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnlVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeVV0aWxpdGll
cy5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAi
V0hMU0xFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw3ICszOCw3IEBA
IG5hbWVzcGFjZSBXSExTTCB7CiBjbGFzcyBQYXJzZXI7CiBjbGFzcyBQcm9ncmFtOwogCi12b2lk
IGluY2x1ZGVTdGFuZGFyZExpYnJhcnkoUHJvZ3JhbSYsIFBhcnNlciYsIGJvb2wgcGFyc2VGdWxs
U3RhbmRhcmRMaWJyYXJ5KTsKK0V4cGVjdGVkPHZvaWQsIEVycm9yPiBpbmNsdWRlU3RhbmRhcmRM
aWJyYXJ5KFByb2dyYW0mLCBQYXJzZXImLCBib29sIHBhcnNlRnVsbFN0YW5kYXJkTGlicmFyeSk7
CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGI0YWI1MDkzMGQyNDU1MjFkMGMwMjVlYjhhNTg3NDMwZDM0OTQwMmQuLjM4
NTJkM2QzOTM3ZDY2ZTlkZmYxMjkwZDMxY2NjZDg0NmY5Y2I1ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMzM5LDYgKzEz
MzM5LDcgQEAKIAkJQzIzNEE5QjUyMUU5MkMyMzAwM0M5ODREIC8qIFdITFNMU3ludGhlc2l6ZVN0
cnVjdHVyZUFjY2Vzc29ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1
cmVBY2Nlc3NvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIzNEE5QjYyMUU5
MkNDMDAwM0M5ODREIC8qIFdITFNMSW50cmluc2ljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTElu
dHJpbnNpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIzNEE5QjcyMUU5MkND
MTAwM0M5ODREIC8qIFdITFNMSW50cmluc2ljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExT
TEludHJpbnNpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM5OEVCRDIz
MEExQjc2MDA2NDE1MDcgLyogV0hMU0xOYW1lU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xO
YW1lU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0NThFNjExRkU4OTc5
RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNo
ZUNvcmVUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEE1N0FGMjFGQUQ1
M0YwMDRDNkREMSAvKiBXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTFBpcGVsaW5lRGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjRBNTdCMjIxRkI4RERBMDA0QzZERDEgLyogV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTcxMDUsNiArMTcxMDYsNyBAQAogCQkJCUMyMUJGNzJEMjFDRDg5RTkw
MDIyNzk3OSAvKiBXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCAqLywKIAkJCQlD
MjFCRjcyQzIxQ0Q4OUU5MDAyMjc5NzkgLyogV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCAq
LywKIAkJCQkxQzMzMjc3MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xOYW1lZFR5cGUuaCAqLywK
KwkJCQlDMjM5OEVCRDIzMEExQjc2MDA2NDE1MDcgLyogV0hMU0xOYW1lU3BhY2UuaCAqLywKIAkJ
CQlDMjFCRjcyMzIxQ0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLmggKi8sCiAJCQkJQzIxQkY3MkEyMUNEODlFNzAwMjI3OTc5IC8qIFdITFNMTmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmggKi8sCiAJCQkJQzIxQkY3MDcyMUNEODlDODAwMjI3OTc5IC8qIFdITFNM
TnVsbExpdGVyYWwuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9HUFVTaGFkZXJNb2R1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9HUFVTaGFkZXJNb2R1bGUuaAppbmRleCBjZTMzNDFlNGZhNzc0MjFhODNlZjEw
ZjY4MTRhMTlmODNkYzk4ZWFjLi44ODMwOGQ2OWUyMzM2NjdjOGRhZjZlMDM0Y2ZlOTAwMjc3MDBj
Y2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
U2hhZGVyTW9kdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0dQVVNoYWRlck1vZHVsZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCisjaW5jbHVkZSAiV0hMU0xQcmVwYXJlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpA
QCAtNDYsMTUgKzQ3LDE1IEBAIGNsYXNzIEdQVVNoYWRlck1vZHVsZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEdQVVNoYWRlck1vZHVsZT4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8R1BVU2hh
ZGVyTW9kdWxlPiB0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiwgY29uc3QgR1BVU2hhZGVyTW9k
dWxlRGVzY3JpcHRvciYpOwogCi0gICAgUGxhdGZvcm1TaGFkZXJNb2R1bGUqIHBsYXRmb3JtU2hh
ZGVyTW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV93aGxzbFNvdXJjZS5pc051bGwoKSA/IG1fcGxh
dGZvcm1TaGFkZXJNb2R1bGUuZ2V0KCkgOiBudWxscHRyOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB3
aGxzbFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2hsc2xTb3VyY2U7IH0KKyAgICBQbGF0Zm9y
bVNoYWRlck1vZHVsZSogcGxhdGZvcm1TaGFkZXJNb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX3do
bHNsTW9kdWxlID8gbnVsbHB0ciA6IG1fcGxhdGZvcm1TaGFkZXJNb2R1bGUuZ2V0KCk7IH0KKyAg
ICBjb25zdCBXSExTTDo6U2hhZGVyTW9kdWxlKiB3aGxzbE1vZHVsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fd2hsc2xNb2R1bGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBHUFVTaGFkZXJNb2R1bGUo
UGxhdGZvcm1TaGFkZXJNb2R1bGVTbWFydFB0ciYmKTsKLSAgICBHUFVTaGFkZXJNb2R1bGUoU3Ry
aW5nJiYgd2hsc2xTb3VyY2UpOworICAgIEdQVVNoYWRlck1vZHVsZShVbmlxdWVSZWY8V0hMU0w6
OlNoYWRlck1vZHVsZT4mJiB3aGxzbE1vZHVsZSk7CiAKICAgICBQbGF0Zm9ybVNoYWRlck1vZHVs
ZVNtYXJ0UHRyIG1fcGxhdGZvcm1TaGFkZXJNb2R1bGU7Ci0gICAgU3RyaW5nIG1fd2hsc2xTb3Vy
Y2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdITFNMOjpTaGFkZXJNb2R1bGU+IG1fd2hsc2xNb2R1
bGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0
ZVBpcGVsaW5lTWV0YWwubW0KaW5kZXggMWNlZmVlZGI5ODVlNGE3Njc0NTMyZmQyODM0NjA3YTk3
OWEwMGI1OS4uZTAxYjc1YWY5NTE3NWMwNDk2NTU4MDg5M2Y2MTYwMGQ1NmU1MmQ1NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1
dGVQaXBlbGluZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQpAQCAtNzAsMTMgKzcwLDExIEBA
IHN0YXRpYyBPcHRpb25hbDxXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnM+IHRyeVNldEZ1bmN0aW9u
cyhjb25zdCBHUFVQaXBlbGluZVN0YWdlCiAgICAgV0hMU0w6OkNvbXB1dGVEaW1lbnNpb25zIGNv
bXB1dGVEaW1lbnNpb25zIHsgMSwgMSwgMSB9OwogCiAgICAgaWYgKHdobHNsRGVzY3JpcHRvcikg
ewotICAgICAgICAvLyBXSExTTCBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkIHRvIE1TTCBmaXJzdC4K
LSAgICAgICAgU3RyaW5nIHdobHNsU291cmNlID0gY29tcHV0ZVN0YWdlLm1vZHVsZS0+d2hsc2xT
b3VyY2UoKTsKLSAgICAgICAgQVNTRVJUKCF3aGxzbFNvdXJjZS5pc051bGwoKSk7CisgICAgICAg
IEFTU0VSVChjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpKTsKIAogICAgICAgICB3
aGxzbERlc2NyaXB0b3ItPmVudHJ5UG9pbnROYW1lID0gY29tcHV0ZVN0YWdlLmVudHJ5UG9pbnQ7
CiAKLSAgICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSh3aGxz
bFNvdXJjZSwgKndobHNsRGVzY3JpcHRvcik7CisgICAgICAgIGF1dG8gd2hsc2xDb21waWxlUmVz
dWx0ID0gV0hMU0w6OnByZXBhcmUoKmNvbXB1dGVTdGFnZS5tb2R1bGUtPndobHNsTW9kdWxlKCks
ICp3aGxzbERlc2NyaXB0b3IpOwogICAgICAgICBpZiAoIXdobHNsQ29tcGlsZVJlc3VsdCkgewog
ICAgICAgICAgICAgZXJyb3JTY29wZXMuZ2VuZXJhdGVQcmVmaXhlZEVycm9yKG1ha2VTdHJpbmco
IldITFNMIGNvbXBpbGUgZXJyb3I6ICIsIHdobHNsQ29tcGlsZVJlc3VsdC5lcnJvcigpKSk7CiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMTM0LDcgKzEzMiw3IEBAIHN0YXRp
YyBPcHRpb25hbDxDb252ZXJ0UmVzdWx0PiBjb252ZXJ0Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
cihjb25zdCBHUFVDb21wdXRlCiAKICAgICBjb25zdCBhdXRvJiBjb21wdXRlU3RhZ2UgPSBkZXNj
cmlwdG9yLmNvbXB1dGVTdGFnZTsKIAotICAgIGJvb2wgaXNXaGxzbCA9ICFjb21wdXRlU3RhZ2Uu
bW9kdWxlLT53aGxzbFNvdXJjZSgpLmlzTnVsbCgpOworICAgIGJvb2wgaXNXaGxzbCA9IGNvbXB1
dGVTdGFnZS5tb2R1bGUtPndobHNsTW9kdWxlKCk7CiAKICAgICBPcHRpb25hbDxXSExTTDo6Q29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvcj4gd2hsc2xEZXNjcmlwdG9yOwogICAgIGlmIChpc1dobHNs
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29h
L0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQppbmRleCA4NmFhZGQ4NDIw
ODEyNTVjZDM1ODFkMjQ4MjIwZmVkNTBiMjU3YTEwLi5mNGEwMzcxZmM5NTY5ZTg0ODRhM2M0YmE0
NzdlMjg4NDgyNTIzNTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5t
bQpAQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyBib29sIHRyeVNldE1ldGFsRnVuY3Rpb25zKE1U
TExpYnJhcnkgKnZlcnRleE1ldGFsTGlicmFyeSwgTVRMTGlicmFyeSAqZnJhCiAgICAgICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgICAgICAvLyBIb3dldmVyLCBmcmFnbWVu
dCBzaGFkZXJzIGFyZSBvcHRpb25hbC4KLSAgICAgICAgaWYgKCFmcmFnbWVudE1ldGFsTGlicmFy
eSkKKyAgICAgICAgaWYgKCFmcmFnbWVudE1ldGFsTGlicmFyeSB8fCBmcmFnbWVudEVudHJ5UG9p
bnROYW1lLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgYXV0
byBmdW5jdGlvbiA9IGFkb3B0TlMoW2ZyYWdtZW50TWV0YWxMaWJyYXJ5IG5ld0Z1bmN0aW9uV2l0
aE5hbWU6ZnJhZ21lbnRFbnRyeVBvaW50TmFtZV0pOwpAQCAtMzgyLDE1ICszODIsMTQgQEAgc3Rh
dGljIGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBpcGVsaW5lU3RhZ2VEZXNjcmlwdG9y
JiB2ZXJ0ZXhTdGFnZSwgY29uc3QKICAgICBTdHJpbmcgdmVydGV4RW50cnlQb2ludCwgZnJhZ21l
bnRFbnRyeVBvaW50OwogCiAgICAgaWYgKHdobHNsRGVzY3JpcHRvcikgewotICAgICAgICAvLyBX
SExTTCBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkIHRvIE1TTCBmaXJzdC4KLSAgICAgICAgU3RyaW5n
IHdobHNsU291cmNlID0gdmVydGV4U3RhZ2UubW9kdWxlLT53aGxzbFNvdXJjZSgpOwotICAgICAg
ICBBU1NFUlQoIXdobHNsU291cmNlLmlzTnVsbCgpKTsKKyAgICAgICAgQVNTRVJUKHZlcnRleFN0
YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSk7CisgICAgICAgIEFTU0VSVCghZnJhZ21lbnRTdGFn
ZSB8fCBmcmFnbWVudFN0YWdlLT5tb2R1bGUtPndobHNsTW9kdWxlKCkpOwogCiAgICAgICAgIHdo
bHNsRGVzY3JpcHRvci0+dmVydGV4RW50cnlQb2ludE5hbWUgPSB2ZXJ0ZXhTdGFnZS5lbnRyeVBv
aW50OwogICAgICAgICBpZiAoZnJhZ21lbnRTdGFnZSkKICAgICAgICAgICAgIHdobHNsRGVzY3Jp
cHRvci0+ZnJhZ21lbnRFbnRyeVBvaW50TmFtZSA9IGZyYWdtZW50U3RhZ2UtPmVudHJ5UG9pbnQ7
CiAKLSAgICAgICAgYXV0byB3aGxzbENvbXBpbGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSh3aGxz
bFNvdXJjZSwgKndobHNsRGVzY3JpcHRvcik7CisgICAgICAgIGF1dG8gd2hsc2xDb21waWxlUmVz
dWx0ID0gV0hMU0w6OnByZXBhcmUoKnZlcnRleFN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSwg
ZnJhZ21lbnRTdGFnZSA/IGZyYWdtZW50U3RhZ2UtPm1vZHVsZS0+d2hsc2xNb2R1bGUoKSA6IG51
bGxwdHIsICp3aGxzbERlc2NyaXB0b3IpOwogICAgICAgICBpZiAoIXdobHNsQ29tcGlsZVJlc3Vs
dCkgewogICAgICAgICAgICAgZXJyb3JTY29wZXMuZ2VuZXJhdGVQcmVmaXhlZEVycm9yKG1ha2VT
dHJpbmcoIldITFNMIGNvbXBpbGUgZXJyb3I6ICIsIHdobHNsQ29tcGlsZVJlc3VsdC5lcnJvcigp
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MjAsNyArNDE5LDggQEAgc3RhdGlj
IGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IEdQVVBpcGVsaW5lU3RhZ2VEZXNjcmlwdG9yJiB2
ZXJ0ZXhTdGFnZSwgY29uc3QKIAogICAgICAgICBmcmFnbWVudExpYnJhcnkgPSB2ZXJ0ZXhMaWJy
YXJ5OwogICAgICAgICB2ZXJ0ZXhFbnRyeVBvaW50ID0gd2hsc2xDb21waWxlUmVzdWx0LT5tYW5n
bGVkVmVydGV4RW50cnlQb2ludE5hbWUudG9TdHJpbmcoKTsKLSAgICAgICAgZnJhZ21lbnRFbnRy
eVBvaW50ID0gd2hsc2xDb21waWxlUmVzdWx0LT5tYW5nbGVkRnJhZ21lbnRFbnRyeVBvaW50TmFt
ZS50b1N0cmluZygpOworICAgICAgICBpZiAoZnJhZ21lbnRTdGFnZSkKKyAgICAgICAgICAgIGZy
YWdtZW50RW50cnlQb2ludCA9IHdobHNsQ29tcGlsZVJlc3VsdC0+bWFuZ2xlZEZyYWdtZW50RW50
cnlQb2ludE5hbWUudG9TdHJpbmcoKTsKICAgICB9IGVsc2UgewogICAgICAgICB2ZXJ0ZXhMaWJy
YXJ5ID0gdmVydGV4U3RhZ2UubW9kdWxlLT5wbGF0Zm9ybVNoYWRlck1vZHVsZSgpOwogICAgICAg
ICB2ZXJ0ZXhFbnRyeVBvaW50ID0gdmVydGV4U3RhZ2UuZW50cnlQb2ludDsKQEAgLTQ1Miw4ICs0
NTIsOSBAQCBzdGF0aWMgUmV0YWluUHRyPE1UTFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcj4gY29u
dmVydFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcihjbwogICAgIGNvbnN0IGF1dG8mIHZlcnRleFN0
YWdlID0gZGVzY3JpcHRvci52ZXJ0ZXhTdGFnZTsKICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN0
YWdlID0gZGVzY3JpcHRvci5mcmFnbWVudFN0YWdlOwogCi0gICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU0NDYgQWxsb3cgV0hMU0wgc2hhZGVy
cyB0byBjb21lIGZyb20gZGlmZmVyZW50IHByb2dyYW1zLgotICAgIGJvb2wgaXNXaGxzbCA9ICF2
ZXJ0ZXhTdGFnZS5tb2R1bGUtPndobHNsU291cmNlKCkuaXNOdWxsKCkgJiYgKCFmcmFnbWVudFN0
YWdlIHx8IHZlcnRleFN0YWdlLm1vZHVsZS5wdHIoKSA9PSBmcmFnbWVudFN0YWdlLT5tb2R1bGUu
cHRyKCkpOworICAgIGlmIChmcmFnbWVudFN0YWdlICYmIHN0YXRpY19jYXN0PGJvb2w+KHZlcnRl
eFN0YWdlLm1vZHVsZS0+d2hsc2xNb2R1bGUoKSkgIT0gc3RhdGljX2Nhc3Q8Ym9vbD4oZnJhZ21l
bnRTdGFnZS0+bW9kdWxlLT53aGxzbE1vZHVsZSgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgYm9vbCBpc1dobHNsID0gdmVydGV4U3RhZ2UubW9kdWxlLT53aGxzbE1vZHVsZSgpOwog
CiAgICAgLy8gU2V0IGRhdGEgZm9yIHRoZSBNZXRhbCBwaXBlbGluZSBkZXNjcmlwdG9yIChhbmQg
V0hMU0wncywgaWYgbmVlZGVkKS4KICAgICBPcHRpb25hbDxXSExTTDo6UmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yPiB3aGxzbERlc2NyaXB0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0YWwubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVU2hhZGVyTW9kdWxlTWV0
YWwubW0KaW5kZXggYjdmNTZjODMyN2NhYWJiMTQyNDk1MDA0YTYyZTkyYzVkNzA4OWJkMS4uYjg2
ZjA1MTU3NTdjMjVhMTVhNzQ0ZGE4MzUzMjA2YzZmYzc1OGExYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVNoYWRlck1vZHVsZU1ldGFs
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVT
aGFkZXJNb2R1bGVNZXRhbC5tbQpAQCAtNDUsNyArNDUsNyBAQCBSZWZQdHI8R1BVU2hhZGVyTW9k
dWxlPiBHUFVTaGFkZXJNb2R1bGU6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwg
Y29ucwogICAgIH0KICAgICAKICAgICBpZiAoZGVzY3JpcHRvci5pc1dITFNMKQotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdQVVNoYWRlck1vZHVsZShTdHJpbmcoZGVzY3JpcHRvci5jb2Rl
KSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVVNoYWRlck1vZHVsZShXSExTTDo6
Y3JlYXRlU2hhZGVyTW9kdWxlKGRlc2NyaXB0b3IuY29kZSkpKTsKIAogICAgIFBsYXRmb3JtU2hh
ZGVyTW9kdWxlU21hcnRQdHIgbW9kdWxlOwogCkBAIC02Niw4ICs2Niw4IEBAIEdQVVNoYWRlck1v
ZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHImJiBtb2R1
bGUpCiB7CiB9CiAKLUdQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFN0cmluZyYmIHdo
bHNsU291cmNlKQotICAgIDogbV93aGxzbFNvdXJjZShXVEZNb3ZlKHdobHNsU291cmNlKSkKK0dQ
VVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKFVuaXF1ZVJlZjxXSExTTDo6U2hhZGVyTW9k
dWxlPiYmIHdobHNsTW9kdWxlKQorICAgIDogbV93aGxzbE1vZHVsZSh3aGxzbE1vZHVsZS5tb3Zl
VG9VbmlxdWVQdHIoKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGExM2ViYjFjN2YxZGI3ZTJiZjExYzgxM2Q2
YTM5NDNiOWIwYzdmY2UuLmNkNDNkMzdmMzdjMGVjMjlhYmJmYjlhN2NlOWIzZjE4MWMxOThkYjIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2NSBAQAorMjAxOS0wOC0yMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gVmVydGV4IHNoYWRlciBhbmQg
ZnJhZ21lbnQgc2hhZGVyIG5lZWQgdG8gYmUgYWJsZSB0byBjb21lIGZyb20gdHdvIGRpZmZlcmVu
dCBwcm9ncmFtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk1NDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMTAtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEwLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0xMS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTEuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEyLWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0xMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTMtZXhwZWN0
ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0xNC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTE1LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0xNS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTYtZXhwZWN0ZWQuaHRtbDogQWRkZWQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTE2Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNy1leHBlY3Rl
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTcuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTE4LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMTktZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTE5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MjEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjEuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTIyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIyLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0yMy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjQtZXhwZWN0ZWQuaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTI0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMjYtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI2Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0yNy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy00LWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtNi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy02Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy03Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy04LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzLTguaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTktZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
ZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLmh0bWw6IEFkZGVkLgorCiAyMDE5
LTA4LTIxICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgdGVzdCBnYXJkZW5pbmcsIGxhbmQgdGVzdCBleHBlY3RhdGlvbnMgZm9yIHJkYXI6
Ly81NDU2MTY3My4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMC1leHBlY3RlZC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTEwLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRkMTg0ZGJm
ZWJhNDNjOGEyNzIxNWE0Yjk2ZmYxMThiYjc3MDczNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0xMC1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25C
bHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEwLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Yjk0OTU2OTZjZWUwMDEwODVlZmI2NjcwZTkxZjcwNzA5
MmY2YjhiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEwLmh0bWwKQEAgLTAs
MCArMSwxMDUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2
ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9u
IHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBgCit0eXBlZGVmIEZvbyA9IGludDsKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRl
cihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgRm9v
IHg7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24g
c3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAg
IGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6
IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAg
ICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3Qg
cmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07
CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxl
bmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxM
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0
dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29u
c3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAg
Y29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhC
dWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmlj
ZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJy
YXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBz
d2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAg
IGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRl
c2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVu
dFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUu
Y3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNl
LmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6
IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1l
bnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVh
ciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9y
ID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0
IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRl
clBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5k
ZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5j
dGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTExLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTEt
ZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRiOTZmZjEx
OGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTExLWV4cGVjdGVk
Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2Fy
ZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMtMTEuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQxZGExNTlkNGZlYmVhYTMwMWFlM2JkNGQxMDc5Nzg5NGU3NmY0ODIKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMTEuaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5j
dGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMi
IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0
ZXhTaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9z
aXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlv
bjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBGb28gewor
ICAgIGludCB4OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBv
c2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIEZvbyBmOworICAgIHJl
dHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmlj
ZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJN
b2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNv
bnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29k
ZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0
ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRl
eFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7
c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0g
e3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0
cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5w
dXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBM
YXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlw
ZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0
aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNp
bFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlv
dXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVs
aW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJE
ZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1
ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVz
Y3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsK
KyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7
CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1
bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21t
YW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBh
OiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRU
ZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9w
OiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRh
Y2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0
dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3Jp
cHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZl
cl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7Cisg
ICAgZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0xMi1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEyLWV4cGVjdGVkLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmRkMTg0ZGJmZWJhNDNjOGEyNzIxNWE0Yjk2ZmYxMThiYjc3MDczNQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMi1leHBlY3RlZC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTEyLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41M2EyZjQ4MDQ2
MTVmNjFlMGM3MGIyZDkzNTIyMmFhZjgwMTA2MzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTEyLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAw
IiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291
cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0
cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKwor
Y29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitlbnVtIEZvbyB7CisgICAgdgorfQorZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9u
KSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28gZiA9IEZvby52OworICAgIHJldHVybiBmbG9hdDQo
MSwgMSwgMSwgMSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNv
bnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50
U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRT
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHtt
b2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9Owor
ICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xv
Z3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtm
cm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQg
PSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMg
PSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1h
c2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNp
bFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRp
b246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYs
IGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07
CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0g
e3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0
b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVm
ZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkg
PSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0g
MTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtk
ZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250
ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBv
dXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisK
KyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBj
b25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywg
cmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBj
bGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVs
bDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNv
bW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVy
LmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0p
OworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0
KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRl
U3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMy1l
eHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEzLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmRkMTg0ZGJmZWJhNDNjOGEyNzIxNWE0Yjk2ZmYxMThiYjc3MDczNQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xMy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBp
ZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0Pgor
Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1do
aXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEzLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMTMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NGIyZDkxNmM3M2FmNWEyNjY1NjI0
ZTUyNTczYjgxZmVhOGVhOTNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTEz
Lmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordHlw
ZWRlZiBGb28gPSBpbnQ7Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRp
b24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsK
K31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gaW50
OworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bv
c2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOwor
fQorYDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFk
ZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBp
c1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhT
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJm
cmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xl
LXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ci
LCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJy
Z2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBH
UFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7
CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6
ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6
IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZl
cnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBp
cGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVy
dGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9u
U3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBs
ZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZF
UlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFz
eW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJB
cnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
N10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4
QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQo
ImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6
ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVT
d2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9
IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVW
aWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29t
bWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBj
b25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRh
Y2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6
IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVk
fV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3Qg
cmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0
YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5i
ZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5z
ZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygp
OworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAg
ICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2lj
RGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4o
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJh
Y2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTQtZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0xNC1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmVi
YTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMTQtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1
ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTE0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGI1ZTFhYmExNTdkZTI3MWEyNTQ0MTA1MmRmYmFjOGY0NGVl
Y2YxNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNC5odG1sCkBAIC0wLDAg
KzEsMTA5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBGb28geworICAg
IGludCB4OworfQordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsK
KworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitzdHJ1Y3QgRm9vIHsKKyAgICBpbnQg
eDsKK30KK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBT
Vl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAx
KTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52
YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4
U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1
bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVy
dGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3Qg
ZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlh
bmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTog
ImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0
OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsg
Ly8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBu
dWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9y
bWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRl
U2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25z
dCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAg
Y29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3Jp
dGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAx
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZl
cnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250
ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9y
bWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmln
dXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1
cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0
dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0
IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Cisg
ICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9y
QXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFy
Z2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6
IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNv
bnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29k
ZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQ
YXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBh
c3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7
CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRC
YXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50
aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJs
dWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE1LWV4cGVjdGVkLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMTUtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRk
YmZlYmE0M2M4YTI3MjE1YTRiOTZmZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTE1LWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5j
dGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMi
IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVP
bkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTUuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0xNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1N2M5NjRhZDU2ZDQxOGM1YTgzZmI3YjkwYjI4YzFm
ZGIzNmY2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTUuaHRtbApAQCAt
MCwwICsxLDEwOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgCitlbnVtIEZvbyB7Cisg
ICAgeAorfQordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0
cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKwor
Y29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitlbnVtIEZvbyB7CisgICAgeAorfQorZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9u
KSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsK
KworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCith
c3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1
bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2Us
IGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmlj
ZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0
YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVu
dFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlw
IjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxs
TW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29s
b3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVu
b3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xv
cldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAg
CisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9h
dDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRy
aWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElu
cHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3Rh
Z2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUs
IGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50
OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2
ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAx
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
MF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVy
LnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIp
OworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3Jh
OHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hh
aW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBD
aGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0g
b3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVu
Y29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCBy
ZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50
cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGws
IGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Cisg
ICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVy
UGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJl
bmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNl
dFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0
ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAg
IGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZp
Y2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNl
KCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91
bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTYtZXhwZWN0ZWQuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0xNi1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmViYTQzYzhh
MjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMTYtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE2Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjlhNGY0YTM5ZjA5Y2Y3ZjcxZDZjYmJjYzM5N2YzNDgyZWZhNmJiMQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNi5odG1sCkBAIC0wLDAgKzEsMTA5
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK2Zsb2F0NCBoZWxwZXIoKSB7CisgICAg
cmV0dXJuIGZsb2F0NCgwLCAwLCAwLCAwKTsKK30KK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0
dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZmxv
YXQ0IGhlbHBlcigpIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorZnJhZ21l
bnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6
IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KDEsIDEsIDEsIDEpOworfQorYDsKKwor
Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3lu
YyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUg
PSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlz
V0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0
cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdl
ID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNo
YWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsK
KyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9k
ZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3Jt
IiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldy
aXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisg
ICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
fTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1
dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0
ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERl
c2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2Us
IGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNv
bG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAx
LCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisg
ICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0
ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVu
bWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwor
ICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVu
b3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4o
c3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFp
bi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0
cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29k
ZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQg
PSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9
IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxv
YWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAg
Y29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFz
c0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07
CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRl
clBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBp
cGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhC
dWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRy
YXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCku
dGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9
KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJ
blNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTctZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0xNy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmViYTQzYzhhMjcy
MTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MTctZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91
bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE3Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2M5YmY0NzQzYjRiODQxMmE5NTViMGQ5ZmM0ODgzZmIzYmY3MjdjNwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xNy5odG1sCkBAIC0wLDAgKzEsMTA2IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gZmxvYXQ7Cit2ZXJ0
ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDog
U1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVu
dFNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gZmxvYXQ7CitmcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0
IDAgeworICAgIEZvbyB4ID0gMTsKKyAgICByZXR1cm4gZmxvYXQ0KHgsIDEsIDEsIDEpOworfQor
YDsKKworY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
Cithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRl
dmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dI
TFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVu
dFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFn
bWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0
cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBj
dWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2Jh
OHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVD
b2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Cisg
ICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJm
bG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFth
dHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRl
eElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4
U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3Rh
dGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNv
dW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRF
WCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10g
PSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdw
dSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJi
Z3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2Fw
Q2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3
YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3
ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFu
ZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25z
dCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2ht
ZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51
bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVu
ZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNo
bWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdp
blJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRW
ZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwor
ICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBk
ZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2
aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tn
cm91bmRJblNvZnR3YXJlKGNhbnZhcyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTgtZXhwZWN0ZWQuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0xOC1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmViYTQz
YzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtMTgtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9
IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJh
Y2tncm91bmRJblNvZnR3YXJlKGNhbnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE4
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODEzN2U2NWIzNjcxMzkxZjI3MDlkM2EwMWU1NmMwNmQ5NDNhODc3
YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOC5odG1sCkBAIC0wLDAgKzEs
MTExIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNj
cmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBGb28geworICAgIGZs
b2F0IHg7Cit9Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBh
dHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOwor
Citjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBGb28geworICAgIGZsb2F0
IHg7Cit9CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
U1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIEZvbyBmOworICAgIGYueCA9IDE7Cisg
ICAgcmV0dXJuIGZsb2F0NChmLngsIDEsIDEsIDEpOworfQorYDsKKworY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworCithc3luYyBmdW5jdGlvbiBzdGFy
dChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsK
KyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29u
c3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJh
Z21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNv
bnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0
ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAg
ICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwg
Y29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmli
dXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBp
bnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25z
dCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZl
cnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2Us
IHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0
aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5k
ZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4
QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2
ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZl
ciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1
ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBj
b25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBD
aGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29u
c3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3Jp
cHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4
dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVh
dGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3Jl
YXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwg
YjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDog
b3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwg
c3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7
Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVu
ZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFz
c0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0
ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihk
ZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9u
KCkgeworICAgIGRyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNhbnZh
cyk7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMTktZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0xOS1leHBl
Y3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmViYTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3
NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMTktZXhwZWN0ZWQuaHRt
bApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKK2RyYXdXaGl0ZVNxdWFyZU9uQmx1ZUJhY2tncm91bmRJblNvZnR3YXJlKGNh
bnZhcyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy0xOS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTE5Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIz
MzJhNTBkNTdkMzhiMGFjNWYwNTUzZmE2ODk1M2I1MTA5MTU1MwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0xOS5odG1sCkBAIC0wLDAgKzEsMTExIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9u
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNo
YWRlclNvdXJjZSA9IGAKK2VudW0gRm9vIHsKKyAgICB4Cit9Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24gewor
ICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9
IGAKK2VudW0gRm9vIHsKKyAgICB4ID0gMCwKKyAgICB5ID0gMQorfQorZnJhZ21lbnQgZmxvYXQ0
IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1Rhcmdl
dCAwIHsKKyAgICBpbnQgeSA9IGludChGb28ueSk7CisgICAgcmV0dXJuIGZsb2F0NChmbG9hdCh5
KSwgMSwgMSwgMSk7Cit9CitgOworCitjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2FudmFzIik7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNv
bnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50
U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRT
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHtt
b2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9Owor
ICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xv
Z3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtm
cm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQg
PSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMg
PSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1h
c2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNp
bFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRp
b246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYs
IGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07
CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0g
e3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0
b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVm
ZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkg
PSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0g
MTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtk
ZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250
ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBv
dXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisK
KyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBj
b25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywg
cmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBj
bGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVs
bDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNv
bW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVy
LmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0p
OworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0
KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgZHJhd1doaXRl
U3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKyAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yLWV4
cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMi1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZkZDE4NGRiZmViYTQzYzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2Vw
YXJhdGUtc2hhZGVyLW1vZHVsZXMtMi1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0i
Y2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29u
c3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRl
U3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTVkMjZiMzc4ZTZmZjAzNTA1MmFjMTNlNDcx
ZTU2MWQ1YzgxZDJjNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yLmh0bWwK
QEAgLTAsMCArMSwxMDYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9j
YW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZs
b2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bv
c2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPSBgCitmbG9hdDQgaGVscGVyKCkgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwg
MSwgMSk7Cit9CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9u
IDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBoZWxwZXIoKTsKK30K
K2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
KworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVy
TW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNX
SExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJh
Z21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1z
dHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3Iiwg
Y3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0
IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdi
YTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BV
Q29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOwor
ICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAi
ZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBb
YXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0
ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERl
c2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRl
eFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0
YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVD
b3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJU
RVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9
IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3lu
YygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJy
YXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5Wzdd
ID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1
ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJn
cHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAi
YmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dh
cENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBz
d2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmll
dyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1h
bmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29u
c3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNo
bWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBu
dWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1d
OworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJl
bmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFj
aG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVn
aW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsK
KyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAg
ZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0Rl
dmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1
bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNr
Z3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIwLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy0yMC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1
NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0yMC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0yMC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIwLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDljOGFiNmY4MzRkNTA3ZjViNmU3ZDc1NTgyNjAzODcyYjQ3NWY0MAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0yMC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rp
b25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3QgdmVy
dGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBv
c2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRp
b247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmbG9hdDQgaGVscGVy
KCkgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitmbG9hdDQgaGVscGVyKCkg
eworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitmcmFnbWVudCBmbG9hdDQgZnJh
Z21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAg
eworICAgIHJldHVybiBoZWxwZXIoKTsKK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRl
dmljZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFk
ZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAg
IGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2
ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZl
cnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVu
dFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3Qg
cHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6
YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNv
bnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xv
ckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNv
bnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUg
PSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0
ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0IGlu
cHV0cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczog
aW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3Jv
dXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
UGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGRldmljZS5w
dXNoRXJyb3JTY29wZSgidmFsaWRhdGlvbiIpOworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7CisgICAgcmV0dXJuIGRldmljZS5wb3BFcnJvclNjb3BlKCk7Cit9
Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVu
Y3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKHgpIHsKKyAg
ICAgICAgaWYgKHgpCisgICAgICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
IH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCk7Cisg
ICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIxLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9k
dWxlcy0yMS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0
ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMS1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy0yMS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTAzMmZlOGFm
YTQwYmUzMjAyNDMzOTc4ZmJmY2MwYjI0ZWRjOTkwZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0yMS5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVy
U291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsK
KworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCit0eXBlZGVmIEZvbyA9IGludDsKK3R5
cGVkZWYgRm9vID0gaW50OworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBw
b3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0
KDEsIDEsIDEsIDEpOworfQorYDsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJh
Z21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFn
bWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdl
ID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVy
In07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJM
b2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRl
OiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lu
cHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9Owor
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNj
b3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKyAgICByZXR1cm4gZGV2aWNlLnBvcEVycm9yU2NvcGUoKTsKK30KK3dpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZp
Y2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oeCkgeworICAgICAgICBpZiAo
eCkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoKTsKKyAgICBmaW5pc2hK
U1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMjItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIyLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYy
MzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIyLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
L3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTIyLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtMjIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjRmYzljZDJlODNmNzMzM2Q0
YzAzZDBhMDJjM2Y1YTlkN2NlNjIyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTIyLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBg
Cit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUo
MCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31gOworCitjb25zdCBm
cmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBGb28geworICAgIGludCB4OworfQorc3Ry
dWN0IEZvbyB7CisgICAgaW50IHg7Cit9CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVy
biBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZp
Y2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2Nv
ZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVy
dGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRT
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHBy
aW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0
aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25z
dCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0
IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JC
bGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25z
dCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0g
e3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9
IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlu
cHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVz
aEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCBy
YXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4
SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQor
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0
aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAg
ICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpT
VGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAg
IGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtMjMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQy
N2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjMtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMt
MjMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkZGMxZjA3Yjkw
YTg0NTY3Y2U2YWU2MDIyYmRhODY2Y2E3MGJkODgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVy
LW1vZHVsZXMtMjMuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNv
dXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0
dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisK
K2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZW51bSBGb28geworICAgIHgKK30KK2Vu
dW0gRm9vIHsKKyAgICB4Cit9CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0
IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9h
dDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsK
KyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBm
cmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZy
YWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3Rh
Z2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFk
ZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2
ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3Rh
dGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBo
YUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
U3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwg
d3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRl
ckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJp
ZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBb
aW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307
CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVycm9y
U2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ig
PSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJp
emF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQs
IHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURl
c2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRl
dmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAgIGlm
ICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlz
aEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0yNC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI0
LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRkMTg0ZGJmZWJhNDNjOGEyNzIxNWE0Yjk2ZmYx
MThiYjc3MDczNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNC1leHBlY3Rl
ZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdh
cmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNo
YWRlci1tb2R1bGVzLTI0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtMjQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xNGEyZDA3ZTc4ZjUzMDllMGU2ZGI1Y2E5NjBlMWQzZmYxMmJhNDQwCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTI0Lmh0bWwKQEAgLTAsMCArMSwxMDYgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVu
Y3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVy
dGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBv
c2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRp
b247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmbG9hdCBzYXR1cmF0
ZShmbG9hdCB4LCBmbG9hdCB5KSB7CisgICAgcmV0dXJuIDE7Cit9CitmcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0
IDAgeworICAgIHJldHVybiBmbG9hdDQoc2F0dXJhdGUoMywgNCksIHNhdHVyYXRlKDIpLCAxLCAx
KTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52
YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4
U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1
bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVy
dGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3Qg
ZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlh
bmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTog
ImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0
OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsg
Ly8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBu
dWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9y
bWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRl
U2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25z
dCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAg
Y29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3Jp
dGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAx
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZl
cnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250
ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9y
bWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmln
dXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1
cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0
dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0
IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9Cisg
ICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9y
QXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFy
Z2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6
IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNv
bnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29k
ZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQ
YXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBh
c3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7
CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRC
YXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50
aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJs
dWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI1LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0yNS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4MmY5MDQ1
OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy0yNS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy0yNS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI1Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTM0MjM0ZGU3NmI5Nzg2NTkxNjczNWRjM2Y0Nzk2YTNiM2M2YmNjNQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNS5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUt
ZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29u
c3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxv
YXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4g
cG9zaXRpb247Cit9CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0
aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwg
MSwgMSwgMSk7Cit9CitgOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2ZyYWdt
ZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcjIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24p
IDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOwor
Cithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRl
dmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dI
TFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVu
dFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFn
bWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0
cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBj
dWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2Jh
OHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVD
b2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Cisg
ICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJm
bG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFth
dHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRl
eElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAg
ICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50
U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVz
LCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6
IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVh
dGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBk
ZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwor
Z2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmlj
ZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBh
c3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAg
ICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZh
aWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24o
KSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNi1l
eHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI2LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmRkMTg0ZGJmZWJhNDNjOGEyNzIxNWE0Yjk2ZmYxMThiYjc3MDczNQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNi1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93
ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBp
ZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0Pgor
Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1do
aXRlU3F1YXJlT25CbHVlQmFja2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI2Lmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMjYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZjgwYTc1Y2M2Mjc1OWMzYjRiODg4
OTk3MWU3NmJhYTIwODc5YTg3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTI2
Lmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVy
dGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6
IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CitmcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0
IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCitjb25zdCBmcmFn
bWVudFNoYWRlclNvdXJjZSA9IGAKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9h
dDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZs
b2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7Cisg
ICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7
Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgZnJh
Z21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBmcmFn
bWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdl
ID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVy
In07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZyYWdtZW50U2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHtzaGFkZXJM
b2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQgPSB7c3RyaWRl
OiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lu
cHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9Owor
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3Bv
bG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUs
IHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVz
Y3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0
ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
OF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
NV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9y
ID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9
IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNv
bnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBj
b25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXco
KTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9Owor
ICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVW
aWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9y
ZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQg
PSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVu
dHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBd
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVu
Y29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVm
ZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAg
c3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICBkcmF3
V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52YXMpOworICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTI3LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDg4MmY5MDQ1OGE1NmY1NDVlYjE5Yzc0ZDI3ZjhmNmFmMjMxODJkNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxl
cy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBA
CitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVz
LTI3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzkxYzE1NGFmNDM2NTBmNWQ1YzVkNTljNzU4MjIwMjc5MmNm
YjczZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0yNy5odG1sCkBAIC0wLDAg
KzEsNjggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2
ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9u
IHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CitgOworCitjb25zdCBmcmFnbWVudFNoYWRlclNv
dXJjZSA9IGAKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24g
OiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAx
LCAxKTsKK30KK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24g
OiBTVl9Qb3NpdGlvbiwgYm9vbCBpc0ZvbnRGYWNlIDogU1ZfSXNGcm9udEZhY2UpIDogU1ZfVGFy
Z2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBm
dW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hM
U0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVh
dGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0g
e21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRl
ciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAg
ICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTog
Im5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwg
YWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRl
Qml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAg
Y29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsK
KyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVd
fTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0g
e3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7
CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCBy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHBy
aW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0
ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5l
TGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQ
aXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9w
RXJyb3JTY29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNE
ZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihm
dW5jdGlvbih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7
CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAg
dGVzdFBhc3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy0zLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBh
cmF0ZS1zaGFkZXItbW9kdWxlcy0zLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4
YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtMy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRl
LXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTMuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mZTRmMjQ0NjMyOGNlYmI2MzQzNGQ4NTFkNDRhNDNjOTllYWVlMjkzCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3Nl
cGFyYXRlLXNoYWRlci1tb2R1bGVzLTMuaHRtbApAQCAtMCwwICsxLDY3IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0
aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZl
cnRleFNoYWRlclNvdXJjZSA9IGAKK2Zsb2F0NCBoZWxwZXIoKSB7CisgICAgcmV0dXJuIGZsb2F0
NCgxLCAxLCAxLCAxKTsKK30KK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9u
OworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291cmNlID0gYAorZnJhZ21lbnQgZmxvYXQ0
IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1Rhcmdl
dCAwIHsKKyAgICByZXR1cm4gaGVscGVyKCk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFy
dChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsK
KyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29u
c3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJh
Z21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNv
bnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0
ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAg
ICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwg
Y29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmli
dXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBp
bnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25z
dCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZl
cnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZp
Y2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9s
b2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwg
dmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAg
ICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgp
OworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVu
KGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7
CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgp
OworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy00LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy00LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTlj
NzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTQt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVs
ZXMtNC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NGVjOGJiMWM3
MTA1YmJlNWEwYWQ4NDg1OWExZjYyNTBmYjI1NzI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRl
ci1tb2R1bGVzLTQuaHRtbApAQCAtMCwwICsxLDY2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNv
dXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gaW50OwordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1
cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmcmFn
bWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24p
IDogU1ZfVGFyZ2V0IDAgeworICAgIEZvbyB4OworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwg
MSk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2
ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0
ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxl
OiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBj
b25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0g
InRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRG
YWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tm
b3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAx
NX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0
ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAw
LCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRy
aWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAg
IGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlk
YXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3Rh
Z2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUs
IGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50
OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwor
ICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAg
IHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAg
ICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWls
ZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOwor
fSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOwor
fSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy01LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy01LWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNS5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZGMxOGZlODc0NWUxMjVkOGJlNjZlNWU0ZGY4YjA2ZjM1
N2Q4NWVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTUuaHRtbApAQCAtMCww
ICsxLDY5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3N0cnVjdCBGb28gewor
ICAgIGludCB4OworfQorCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRp
b24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsK
K31gOworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2ZyYWdtZW50IGZsb2F0NCBm
cmFnbWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQg
MCB7CisgICAgRm9vIHg7CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisK
K2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1v
ZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hM
U0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50
U3RhZ2UgPSB7bW9kdWxlOiBmcmFnbWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdt
ZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3Ry
aXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1
bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBj
b2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4
dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNv
bG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAg
ICAKKyAgICBjb25zdCBhdHRyaWJ1dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZs
b2F0NCJ9OworICAgIGNvbnN0IGlucHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0
dHJpYnV0ZV19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4
SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yKTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlvbiIpOworICAg
IGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRT
dGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMs
IGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDog
cGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0
ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisgICAgcmV0dXJuIGRl
dmljZS5wb3BFcnJvclNjb3BlKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Citn
ZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNl
KS50aGVuKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgaWYgKHgpCisgICAgICAgICAgICB0ZXN0UGFz
c2VkKCIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFp
bGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICB0ZXN0UGFzc2VkKCk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTYtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTYtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4
ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIzMTgyZDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMtNi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitQQVNTIAor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy02Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wv
c2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNi5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmUwNWU0Njg0YzgwNmY0OGE0YjZiMjA4ZGNlMTI1MGVjZmU2NjE5MDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtNi5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJn
cHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0Pgor
Y29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAorZW51bSBGb28geworICAgIHYKK30KK3ZlcnRl
eCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBT
Vl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50
U2hhZGVyU291cmNlID0gYAorZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKGZsb2F0NCBw
b3NpdGlvbiA6IFNWX1Bvc2l0aW9uKSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28geCA9IEZvby52
OworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitgOworCithc3luYyBmdW5jdGlv
biBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2Uu
Y3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRy
dWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFk
ZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Cisg
ICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVs
ZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9Owor
ICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25z
dCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUi
fTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9
OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFC
bGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5B
TEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3Qg
YXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBj
b25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAg
ICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3Ig
PSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2
aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAg
ICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2
ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxT
dGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JT
Y29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2Uo
KS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlv
bih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBh
c3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03LWV4cGVjdGVkLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtNy1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDE4NGRiZmViYTQz
YzhhMjcyMTVhNGI5NmZmMTE4YmI3NzA3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtNy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworZHJhd1doaXRlU3F1YXJlT25CbHVlQmFj
a2dyb3VuZEluU29mdHdhcmUoY2FudmFzKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTcuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93
aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmNkMWI0Zjk2NzJiOGIxZmM5NWYzOTA5MjcwNmIwNWI5OWE2NTdhMQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFk
ZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy03Lmh0bWwKQEAgLTAsMCArMSwxMDkg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0
PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAorZmxvYXQ0IGhlbHBlcigpIHsKKyAgICBy
ZXR1cm4gZmxvYXQ0KDAsIDAsIDAsIDApOworfQordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIo
ZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1
cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgCitmbG9h
dDQgaGVscGVyKCkgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwgMSk7Cit9CitmcmFnbWVu
dCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogU1ZfUG9zaXRpb24pIDog
U1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBoZWxwZXIoKTsKK30KK2A7CisKK2NvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24g
c3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAg
IGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6
IGZyYWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAg
ICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3Qg
cmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07
CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxl
bmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxM
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0
dHJpYnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29u
c3QgaW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAg
Y29uc3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhC
dWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmlj
ZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJy
YXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBz
d2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAg
IGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRl
c2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVu
dFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUu
Y3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNl
LmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6
IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1l
bnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVh
ciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9y
ID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0
IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRl
clBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5k
ZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rp
b24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5j
dGlvbigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShj
YW52YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzLTgtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTgtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ODJmOTA0NThhNTZmNTQ1ZWIxOWM3NGQyN2Y4ZjZhZjIz
MTgyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOC1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9z
ZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy04Lmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMtOC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxMmE0ZmQwYzI2ZGZmYWUzNjc0NzVj
Mzg1NzVmYmQ1YjFiOTc5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOC5o
dG1sCkBAIC0wLDAgKzEsNjcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3QgdmVydGV4U2hhZGVyU291cmNlID0gYAordmVy
dGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6
IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9YDsKKworY29uc3QgZnJhZ21l
bnRTaGFkZXJTb3VyY2UgPSBgCitmbG9hdCBzYXR1cmF0ZShmbG9hdCB4KSB7CisgICAgcmV0dXJu
IDA7Cit9CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
U1ZfUG9zaXRpb24pIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoMSwgMSwgMSwg
MSk7Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCB2
ZXJ0ZXhTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiB2ZXJ0
ZXhTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBmcmFnbWVudFNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IGZyYWdtZW50U2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxl
OiB2ZXJ0ZXhTaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBj
b25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogZnJhZ21lbnRTaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0g
InRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRG
YWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tm
b3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAx
NX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0
ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlID0ge3NoYWRlckxvY2F0aW9uOiAw
LCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dCA9IHtzdHJpZGU6IDE2LCBhdHRy
aWJ1dGVTZXQ6IFthdHRyaWJ1dGVdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXRdOworICAg
IGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlk
YXRpb24iKTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3Rh
Z2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUs
IGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50
OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwor
ICAgIHJldHVybiBkZXZpY2UucG9wRXJyb3JTY29wZSgpOworfQord2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAg
IHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbih4KSB7CisgICAgICAgIGlmICh4KQorICAgICAg
ICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWls
ZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOwor
fSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgpOworICAgIGZpbmlzaEpTVGVzdCgpOwor
fSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXIt
bW9kdWxlcy05LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0
ZS1zaGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy05LWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40ODgyZjkwNDU4YTU2ZjU0NWViMTljNzRkMjdmOGY2YWYyMzE4MmQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hh
ZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMtOS5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1
bGVzLTkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYTZjMDk1Mjk0MWQ5MDBmNzVjOTY0YTA5M2ViMDk3YzBk
ZjA0MGQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFy
YXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLTkuaHRtbApAQCAtMCww
ICsxLDY1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdD4KK2NvbnN0IHZlcnRleFNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQg
dmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlv
biB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfWA7CisKK2NvbnN0IGZyYWdtZW50U2hhZGVyU291
cmNlID0gYAordHlwZWRlZiBib29sMiA9IGludDsKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNo
YWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7CisgICAg
cmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0
KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleFNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVT
aGFkZXJNb2R1bGUoe2NvZGU6IHZlcnRleFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVs
ZSh7Y29kZTogZnJhZ21lbnRTaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25z
dCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHZlcnRleFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
InZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBmcmFn
bWVudFNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29u
c3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rl
cml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAg
IGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAg
Y29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBj
b2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAg
IGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1
dGUgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlu
cHV0ID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZV19OworICAgIGNvbnN0
IGlucHV0cyA9IFtpbnB1dF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
R3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGRldmlj
ZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlvbiIpOworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xv
Z3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2
ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAg
IGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik7CisgICAgcmV0dXJuIGRldmljZS5wb3BFcnJvclNjb3BlKCk7
Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4o
ZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKHgpIHsK
KyAgICAgICAgaWYgKHgpCisgICAgICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOwor
ICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmlu
aXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCk7
CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsL3NlcGFyYXRlLXNoYWRlci1t
b2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUtc2hhZGVyLW1v
ZHVsZXMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQxODRkYmZlYmE0M2M4YTI3MjE1YTRi
OTZmZjExOGJiNzcwNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzL3NlcGFyYXRlLXNoYWRlci1tb2R1bGVzLWV4cGVj
dGVkLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7CitkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0
d2FyZShjYW52YXMpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJhdGUt
c2hhZGVyLW1vZHVsZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC9zZXBhcmF0ZS1z
aGFkZXItbW9kdWxlcy9zZXBhcmF0ZS1zaGFkZXItbW9kdWxlcy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0
MjBhODIyZWNlODNmZjA3NDg3YThmZDQ4ZjJiYzk3NThiZWFiYWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wvc2VwYXJhdGUtc2hhZGVyLW1vZHVsZXMvc2VwYXJh
dGUtc2hhZGVyLW1vZHVsZXMuaHRtbApAQCAtMCwwICsxLDEwMyBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3dlYmdwdS1mdW5jdGlvbnMu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRo
PSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCB2ZXJ0ZXhTaGFk
ZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24g
OiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK31g
OworCitjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGAKK2ZyYWdtZW50IGZsb2F0NCBmcmFn
bWVudFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBTVl9Qb3NpdGlvbikgOiBTVl9UYXJnZXQgMCB7
CisgICAgcmV0dXJuIGZsb2F0NCgxLCAxLCAxLCAxKTsKK30KK2A7CisKK2NvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKworYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoZGV2aWNlKSB7CisgICAgY29uc3QgdmVydGV4U2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogdmVydGV4U2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBmcmFnbWVudFNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNv
bnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogdmVydGV4U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IGZy
YWdtZW50U2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBj
b25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFz
dGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07Cisg
ICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQs
IGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisg
ICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJp
YnV0ZSA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3Qg
aW5wdXQgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlXX07CisgICAgY29u
c3QgaW5wdXRzID0gW2lucHV0XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZm
ZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5j
cmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdl
LCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVw
dGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBl
bGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVu
ZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5U
ICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIo
dmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZm
ZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlC
dWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5Wzld
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAg
Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNv
bnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2Ny
aXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRl
eHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3Jl
YXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNy
ZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAs
IGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6
IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIs
IHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0g
e2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJl
bmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBh
c3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQ
aXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVy
dGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24o
ZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9LCBmdW5jdGlv
bigpIHsKKyAgICBkcmF3V2hpdGVTcXVhcmVPbkJsdWVCYWNrZ3JvdW5kSW5Tb2Z0d2FyZShjYW52
YXMpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Cit9KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>