<?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>115827</bug_id>
          
          <creation_ts>2013-05-08 15:53:20 -0700</creation_ts>
          <short_desc>JSC: There should be a disassembler for ARM Thumb 2</short_desc>
          <delta_ts>2013-05-09 10:39:59 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>886499</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-05-08 15:53:20 -0700</bug_when>
    <thetext>To simplify debugging and profiling of JSC JIT&apos;ed code on ARM devices there should be a disassembler for Thumb2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886560</commentid>
    <comment_count>1</comment_count>
      <attachid>201126</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-05-08 18:25:06 -0700</bug_when>
    <thetext>Created attachment 201126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886561</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-08 18:27:57 -0700</bug_when>
    <thetext>Attachment 201126 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp&apos;, u&apos;Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.h&apos;, u&apos;Source/JavaScriptCore/disassembler/ARMv7Disassembler.cpp&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/Platform.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:30:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:41:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:42:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:160:  Extra space before ( in function call  [whitespace/parens] [4]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:762:  Missing space before ( in switch(  [whitespace/parens] [5]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:1349:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.h:46:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.h:155:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.h:658:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.h:815:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.h:825:  Missing spaces around &gt;&gt;  [whitespace/operators] [3]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.h:829:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.h:849:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.h:866:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/JavaScriptCore/disassembler/ARMv7Disassembler.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 16 in 7 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>886564</commentid>
    <comment_count>3</comment_count>
      <attachid>201126</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-08 18:36:02 -0700</bug_when>
    <thetext>Comment on attachment 201126
Patch

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

r=me, but do the style fixes and such.

&gt;&gt; Source/JavaScriptCore/disassembler/ARMv7Disassembler.cpp:31
&gt;&gt; +#include &quot;MacroAssemblerCodeRef.h&quot;
&gt; 
&gt; Alphabetical sorting problem.  [build/include_order] [4]

Yeah, you should fix this.

&gt;&gt; Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:30
&gt;&gt; +#include &quot;ARMv7DOpcode.h&quot;
&gt; 
&gt; You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]

Actually, this should be included about the &quot;#if USE(...&quot; and immediately after &quot;#include &quot;config.h&quot;&quot;.

&gt; Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:46
&gt; +const char* const ARMv7DOpcode::s_optionName[8] =
&gt; +{ &quot;uxtb&quot;, &quot;uxth&quot;, &quot;uxtw&quot;, &quot;uxtx&quot;, &quot;sxtb&quot;, &quot;sxth&quot;, &quot;sxtw&quot;, &quot;sxtx&quot; };

This is weird, I would put the &apos;{&apos; at end of the previous line.

&gt;&gt; Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:160
&gt;&gt; +    ASSERT (blocksize &gt; 0 &amp;&amp; blocksize &lt;= MaxITBlockSize);
&gt; 
&gt; Extra space before ( in function call  [whitespace/parens] [4]

Word.

&gt; Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:221
&gt; +void ARMv7DOpcode::bufferPrintf(const char* format, ...)
&gt; +{
&gt; +    if (m_bufferOffset &gt;= bufferSize)
&gt; +        return;
&gt; +
&gt; +    va_list argList;
&gt; +    va_start(argList, format);
&gt; +
&gt; +    m_bufferOffset += vsnprintf(m_formatBuffer + m_bufferOffset, bufferSize - m_bufferOffset, format, argList);
&gt; +
&gt; +    va_end(argList);
&gt; +}

You could use the StringPrintStream.  But this is fine.

&gt; Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:227
&gt; +

Weird whitespace.

&gt; Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:246
&gt; +    if (length &gt;= 7)
&gt; +        length = 6;

std::min() ?

&gt; Source/JavaScriptCore/disassembler/ARMv7/ARMv7DOpcode.cpp:1361
&gt; +            return m_formatBuffer;
&gt; +        } else
&gt; +            appendRegisterName(rn());

I think that stylebot doesn&apos;t like you for this else statement.  I agree, it&apos;s weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886943</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-05-09 10:39:59 -0700</bug_when>
    <thetext>Committed r149821: &lt;http://trac.webkit.org/changeset/149821&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201126</attachid>
            <date>2013-05-08 18:25:06 -0700</date>
            <delta_ts>2013-05-08 18:36:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>115827.patch</filename>
            <type>text/plain</type>
            <size>113526</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5Nzg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2MSBA
QAorMjAxMy0wNS0wOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBKU0M6IFRoZXJlIHNob3VsZCBiZSBhIGRpc2Fzc2VtYmxlciBmb3IgQVJNIFRodW1iIDIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTgyNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEg
bmV3IGRpc2Fzc2VtYmxlciBmb3IgQVJNdjcgVGh1bWIyIGluc3RydWN0aW9ucyBmb3IgdXNlIGJ5
IHRoZSBKU0MgZGVidWdnaW5nCisgICAgICAgIGFuZCBwcm9maWxpbmcgY29kZS4gIFRoZSBvcGNv
ZGUgY292ZXJhZ2UgaXMgY3VycmVudGx5IG5vdCBjb21wbGV0ZS4gIEl0IGNvdmVycyBhbGwKKyAg
ICAgICAgb2YgdGhlIGludGVnZXIgaW5zdHJ1Y3Rpb25zIEpTQyBjdXJyZW50bHkgZW1pdHMsIGJ1
dCBvbmx5IGEgbGltaXRlZCBudW1iZXIgb2YKKyAgICAgICAgZmxvYXRpbmcgcG9pbnQgb3Bjb2Rl
cy4gIEN1cnJlbnRseSB0aGF0IGlzIGp1c3QgdGhlIDY0IGJpdCB2bW92IGFuZCB2bXNyIGluc3Ry
dWN0aW9ucy4KKworICAgICAgICBUaGUgZGlzYXNzZW1ibGVyIGlzIHN0cnVjdHVyZWQgYXMgYSBi
YXNlIG9wY29kZSBjbGFzcyBBUk12N0RPcGNvZGUgd2l0aCBzdWItY2xhc3NlcworICAgICAgICBm
b3IgZWFjaCBpbnN0cnVjdGlvbiBncm91cC4gIFRoZXJlIGlzIGEgcHVibGljIGZvcm1hdCBtZXRo
b2QgdGhhdCBkb2VzIHRoZSBidWxrIG9mCisgICAgICAgIHRoZSBkaXNhc3NlbWJseSB3b3JrLiAg
VGhlcmUgYXJlIHR3byBicm9hZCBzdWItY2xhc3NlcywgQVJNdjdEMTZCaXRPcGNvZGUgYW5kCisg
ICAgICAgIEFSTXY3RDMyQml0T3Bjb2RlLCBmb3IgdGhlIDE2IGJpdCBhbmQgMzIgYml0IG9wY29k
ZXMuICBUaGVyZSBhcmUgc3ViLWNsYXNzZXMgdW5kZXIKKyAgICAgICAgdGhvc2UgdHdvIGNsYXNz
ZXMgZm9yIGluZGl2aWR1YWwgYW5kIHJlbGF0ZWQgZ3JvdXBzIG9mIG9wY29kZXMuICBJbnN0cnVj
dGlvbnMgYXJlCisgICAgICAgICJkaXNwYXRjaGVkIiB0byB0aGUgcmlnaHQgc3ViY2xhc3Mgdmlh
IHR3byBhcnJheXMgb2YgbGlua2VkIGxpc3RzIGluIHRoZSBpbm5lciBjbGFzc2VzCisgICAgICAg
IE9wY29kZUdyb3VwLiAgVGhlcmUgaXMgb25lIHN1Y2ggaW5uZXIgY2xhc3MgZm9yIGVhY2ggQVJN
djdEMTZCaXRPcGNvZGUgYW5kIEFSTXY3RDMyQml0T3Bjb2RlLgorICAgICAgICBFYWNoIE9wY29k
ZUdyb3VwIGhhcyBhIG1hc2sgYW5kIGEgcGF0dGVybiB0aGF0IGl0IGFwcGxpZXMgdG8gdGhlIGlu
c3RydWN0aW9uIHRvIGRldGVybWluZQorICAgICAgICB0aGF0IGl0IG1hdGNoZXMgYSBwYXJ0aWN1
bGFyIGdyb3VwLiAgT3Bjb2RlR3JvdXAgdXNlcyBhIHN0YXRpYyBtZXRob2QgdG8gcmVpbnRlcnBy
ZXRfY2FzdAorICAgICAgICB0aGUgT3Bjb2RlIG9iamVjdCB0byB0aGUgcmlnaHQgYmFzZSBjbGFz
cyBmb3IgdGhlIGluc3RydWN0aW9uIGdyb3VwIGZvciBmb3JtYXR0aW5nLgorICAgICAgICBUaGUg
Y2FzdCBlbGltaW5hdGVzIHRoZSBuZWVkIG9mIGFsbG9jYXRpbmcgYW4gb2JqZWN0IGZvciBlYWNo
IGRlY29kZWQgaW5zdHJ1Y3Rpb24uCisgICAgICAgIFVua25vd24gaW5zdHJ1Y3Rpb25zIGFyZSBm
b3JtYXR0ZWQgYXMgIi53b3JkIDEyMzQiIG9yICIubG9uZyAxMjM0NTY3OCIgZGVwZW5kaW5nIHdo
ZXRoZXIKKyAgICAgICAgdGhlIGluc3RydWN0aW9uIGlzIDE2IG9yIDMyIGJpdC4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZGlzYXNzZW1ibGVyL0FSTXY3OiBBZGRlZC4KKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvQVJNdjcv
QVJNdjdET3Bjb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChBUk12N0Rpc2Fzc2VtYmxlcik6Cisg
ICAgICAgIChPcGNvZGVHcm91cEluaXRpYWxpemVyKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNh
c3NlbWJsZXI6OkFSTXY3RE9wY29kZTo6aW5pdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNz
ZW1ibGVyOjpBUk12N0RPcGNvZGU6OnN0YXJ0SVRCbG9jayk6CisgICAgICAgIChKU0M6OkFSTXY3
RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OnNhdmVJVENvbmRpdGlvbkF0KToKKyAgICAgICAg
KEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZTo6ZmV0Y2hPcGNvZGUpOgorICAg
ICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlOjpkaXNhc3NlbWJsZSk6
CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OmJ1ZmZlclBy
aW50Zik6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OmFw
cGVuZEluc3RydWN0aW9uTmFtZSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpB
Uk12N0RPcGNvZGU6OmFwcGVuZFJlZ2lzdGVyTmFtZSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlz
YXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OmFwcGVuZFJlZ2lzdGVyTGlzdCk6CisgICAgICAgIChK
U0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OmFwcGVuZEZQUmVnaXN0ZXJOYW1l
KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDE2Qml0T3Bjb2RlOjpp
bml0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDE2Qml0T3Bjb2Rl
Ojpkb0Rpc2Fzc2VtYmxlKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3
RDE2Qml0T3Bjb2RlOjpkZWZhdWx0Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3Nl
bWJsZXI6OkFSTXY3RE9wY29kZUFkZFJlZ2lzdGVyVDI6OmZvcm1hdCk6CisgICAgICAgIChKU0M6
OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVBZGRTUFBsdXNJbW1lZGlhdGU6OmZvcm1h
dCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVBZGRTdWJ0
cmFjdFQxOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdE
T3Bjb2RlQWRkU3VidHJhY3RJbW1lZGlhdGUzOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12
N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlQWRkU3VidHJhY3RJbW1lZGlhdGU4Ojpmb3JtYXQp
OgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlQnJhbmNoQ29u
ZGl0aW9uYWxUMTo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFS
TXY3RE9wY29kZUJyYW5jaEV4Y2hhbmdlVDE6OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkFSTXY3
RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVCcmFuY2hUMjo6Zm9ybWF0KToKKyAgICAgICAgKEpT
Qzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUNvbXBhcmVJbW1lZGlhdGVUMTo6Zm9y
bWF0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUNvbXBh
cmVSZWdpc3RlclQxOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6
QVJNdjdET3Bjb2RlQ29tcGFyZVJlZ2lzdGVyVDI6OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkFS
TXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ2lzdGVyVDE6OmZv
cm1hdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVHZW5l
cmF0ZVBDUmVsYXRpdmVBZGRyZXNzOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fz
c2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9hZEZyb21MaXRlcmFsUG9vbDo6Zm9ybWF0KToKKyAgICAg
ICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVy
SW1tZWRpYXRlOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJN
djdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJPZmZzZXRUMTo6Zm9ybWF0KToKKyAgICAgICAgKEpT
Qzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVyU1BSZWxh
dGl2ZTo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9w
Y29kZUxvZ2ljYWxJbW1lZGlhdGVUMTo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNh
c3NlbWJsZXI6OkFSTXY3RE9wY29kZU1pc2NBZGRTdWJTUDo6Zm9ybWF0KToKKyAgICAgICAgKEpT
Qzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZU1pc2NCcmVha3BvaW50VDE6OmZvcm1h
dCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVNaXNjQnl0
ZUhhbGZ3b3JkT3BzOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6
QVJNdjdET3Bjb2RlTWlzY0NvbXBhcmVBbmRCcmFuY2g6OmZvcm1hdCk6CisgICAgICAgIChKU0M6
OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVNaXNjSGludDE2Ojpmb3JtYXQpOgorICAg
ICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTWlzY0lmVGhlblQxOjpm
b3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTWlz
Y1B1c2hQb3A6OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12
N0RPcGNvZGVNb3ZlSW1tZWRpYXRlVDE6OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlz
YXNzZW1ibGVyOjpBUk12N0RPcGNvZGVNb3ZlUmVnaXN0ZXJUMTo6Zm9ybWF0KToKKyAgICAgICAg
KEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDMyQml0T3Bjb2RlOjppbml0KToKKyAgICAg
ICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDMyQml0T3Bjb2RlOjpkb0Rpc2Fzc2Vt
YmxlKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDMyQml0T3Bjb2Rl
OjpkZWZhdWx0Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3
RE9wY29kZUNvbmRpdGlvbmFsQnJhbmNoVDM6OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkFSTXY3
RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVCcmFuY2hPckJyYW5jaExpbms6OmZvcm1hdCk6Cisg
ICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2lu
Z01vZGlmaWVkSW1tZWRpYXRlOjphcHBlbmRNb2RpZmllZEltbWVkaWF0ZSk6CisgICAgICAgIChK
U0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ01vZGlmaWVk
SW1tZWRpYXRlOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJN
djdET3Bjb2RlRGF0YVByb2Nlc3NpbmdTaGlmdGVkUmVnOjphcHBlbmRJbW1TaGlmdCk6CisgICAg
ICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1No
aWZ0ZWRSZWc6OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12
N0RPcGNvZGVGUFRyYW5zZmVyOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2Vt
Ymxlcjo6QVJNdjdET3Bjb2RlRlBUcmFuc2Zlcjo6YXBwZW5kRlBSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ1No
aWZ0Ojpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bj
b2RlRGF0YVByb2Nlc3NpbmdSZWdFeHRlbmQ6OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkFSTXY3
RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ1BhcmFsbGVsOjpmb3Jt
YXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlRGF0YVBy
b2Nlc3NpbmdSZWdNaXNjOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxl
cjo6QVJNdjdET3Bjb2RlSGludDMyOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fz
c2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9hZFJlZ2lzdGVyOjpmb3JtYXQpOgorICAgICAgICAoSlND
OjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9hZFNpZ25lZEltbWVkaWF0ZTo6Zm9y
bWF0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvYWRV
bnNpZ25lZEltbWVkaWF0ZTo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJs
ZXI6OkFSTXY3RE9wY29kZUxvbmdNdWx0aXBsZURpdmlkZTo6Zm9ybWF0KToKKyAgICAgICAgKEpT
Qzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZVVubW9kaWZpZWRJbW1lZGlhdGU6OmZv
cm1hdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRh
UHVzaFBvcFNpbmdsZTo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6
OkFSTXY3RE9wY29kZVN0b3JlU2luZ2xlSW1tZWRpYXRlMTI6OmZvcm1hdCk6CisgICAgICAgIChK
U0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVTdG9yZVNpbmdsZUltbWVkaWF0ZTg6
OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVT
dG9yZVNpbmdsZVJlZ2lzdGVyOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2Vt
Ymxlcjo6QVJNdjdET3Bjb2RlVk1PVkRvdWJsZVByZWNpc2lvbjo6Zm9ybWF0KToKKyAgICAgICAg
KEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZVZNT1ZTaW5nbGVQcmVjaXNpb246
OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVW
TVNSOjpmb3JtYXQpOgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9BUk12Ny9BUk12N0RPcGNvZGUu
aDogQWRkZWQuCisgICAgICAgIChBUk12N0Rpc2Fzc2VtYmxlcik6CisgICAgICAgIChBUk12N0RP
cGNvZGUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlOjpB
Uk12N0RPcGNvZGUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bj
b2RlOjppczMyQml0SW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxl
cjo6QVJNdjdET3Bjb2RlOjppc0ZQSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpBUk12N0Rp
c2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlOjpjb25kaXRpb25OYW1lKToKKyAgICAgICAgKEpTQzo6
QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZTo6c2hpZnROYW1lKToKKyAgICAgICAgKEpT
Qzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZTo6aW5JVEJsb2NrKToKKyAgICAgICAg
KEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZTo6c3RhcnRpbmdJVEJsb2NrKToK
KyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZTo6ZW5kSVRCbG9j
ayk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OmFwcGVu
ZEluc3RydWN0aW9uTmFtZU5vSVRCbG9jayk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1i
bGVyOjpBUk12N0RPcGNvZGU6OmFwcGVuZFNlcGFyYXRvcik6CisgICAgICAgIChKU0M6OkFSTXY3
RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OmFwcGVuZENoYXJhY3Rlcik6CisgICAgICAgIChK
U0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OmFwcGVuZFN0cmluZyk6CisgICAg
ICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OmFwcGVuZFNoaWZ0VHlw
ZSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OmFwcGVu
ZFNpZ25lZEltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12
N0RPcGNvZGU6OmFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6QVJNdjdE
aXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZTo6YXBwZW5kUENSZWxhdGl2ZU9mZnNldCk6CisgICAg
ICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGU6OmFwcGVuZFNoaWZ0QW1v
dW50KToKKyAgICAgICAgKEFSTXY3RDE2Qml0T3Bjb2RlKToKKyAgICAgICAgKE9wY29kZUdyb3Vw
KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDE2Qml0T3Bjb2RlOjpP
cGNvZGVHcm91cDo6T3Bjb2RlR3JvdXApOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxl
cjo6QVJNdjdEMTZCaXRPcGNvZGU6Ok9wY29kZUdyb3VwOjpzZXROZXh0KToKKyAgICAgICAgKEpT
Qzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDE2Qml0T3Bjb2RlOjpPcGNvZGVHcm91cDo6bmV4
dCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0QxNkJpdE9wY29kZTo6
T3Bjb2RlR3JvdXA6Om1hdGNoZXMpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6
QVJNdjdEMTZCaXRPcGNvZGU6Ok9wY29kZUdyb3VwOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpB
Uk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdEMTZCaXRPcGNvZGU6OnJtKToKKyAgICAgICAgKEpTQzo6
QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDE2Qml0T3Bjb2RlOjpyZCk6CisgICAgICAgIChKU0M6
OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0QxNkJpdE9wY29kZTo6b3Bjb2RlR3JvdXBOdW1iZXIp
OgorICAgICAgICAoQVJNdjdET3Bjb2RlQWRkUmVnaXN0ZXJUMik6CisgICAgICAgIChKU0M6OkFS
TXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVBZGRSZWdpc3RlclQyOjpyZG4pOgorICAgICAg
ICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlQWRkUmVnaXN0ZXJUMjo6cm0p
OgorICAgICAgICAoQVJNdjdET3Bjb2RlQWRkU1BQbHVzSW1tZWRpYXRlKToKKyAgICAgICAgKEpT
Qzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUFkZFNQUGx1c0ltbWVkaWF0ZTo6cmQp
OgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlQWRkU1BQbHVz
SW1tZWRpYXRlOjppbW1lZGlhdGU4KToKKyAgICAgICAgKEFSTXY3RE9wY29kZUFkZFN1YnRyYWN0
KToKKyAgICAgICAgKEFSTXY3RE9wY29kZUFkZFN1YnRyYWN0VDEpOgorICAgICAgICAoSlNDOjpB
Uk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlQWRkU3VidHJhY3RUMTo6b3BOYW1lKToKKyAg
ICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUFkZFN1YnRyYWN0VDE6
Om9wKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUFkZFN1
YnRyYWN0VDE6OnJtKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9w
Y29kZUFkZFN1YnRyYWN0VDE6OnJuKToKKyAgICAgICAgKEFSTXY3RE9wY29kZUFkZFN1YnRyYWN0
SW1tZWRpYXRlMyk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNv
ZGVBZGRTdWJ0cmFjdEltbWVkaWF0ZTM6Om9wTmFtZSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlz
YXNzZW1ibGVyOjpBUk12N0RPcGNvZGVBZGRTdWJ0cmFjdEltbWVkaWF0ZTM6Om9wKToKKyAgICAg
ICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUFkZFN1YnRyYWN0SW1tZWRp
YXRlMzo6aW1tZWRpYXRlMyk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12
N0RPcGNvZGVBZGRTdWJ0cmFjdEltbWVkaWF0ZTM6OnJuKToKKyAgICAgICAgKEFSTXY3RE9wY29k
ZUFkZFN1YnRyYWN0SW1tZWRpYXRlOCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVy
OjpBUk12N0RPcGNvZGVBZGRTdWJ0cmFjdEltbWVkaWF0ZTg6Om9wTmFtZSk6CisgICAgICAgIChK
U0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVBZGRTdWJ0cmFjdEltbWVkaWF0ZTg6
Om9wKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUFkZFN1
YnRyYWN0SW1tZWRpYXRlODo6cmRuKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6
OkFSTXY3RE9wY29kZUFkZFN1YnRyYWN0SW1tZWRpYXRlODo6aW1tZWRpYXRlOCk6CisgICAgICAg
IChBUk12N0RPcGNvZGVCcmFuY2hDb25kaXRpb25hbFQxKToKKyAgICAgICAgKEpTQzo6QVJNdjdE
aXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUJyYW5jaENvbmRpdGlvbmFsVDE6OmNvbmRpdGlvbik6
CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVCcmFuY2hDb25k
aXRpb25hbFQxOjpvZmZzZXQpOgorICAgICAgICAoQVJNdjdET3Bjb2RlQnJhbmNoRXhjaGFuZ2VU
MSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVCcmFuY2hF
eGNoYW5nZVQxOjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJN
djdET3Bjb2RlQnJhbmNoRXhjaGFuZ2VUMTo6cm0pOgorICAgICAgICAoQVJNdjdET3Bjb2RlQnJh
bmNoVDIpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlQnJh
bmNoVDI6OmltbWVkaWF0ZTExKToKKyAgICAgICAgKEFSTXY3RE9wY29kZUNvbXBhcmVJbW1lZGlh
dGVUMSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVDb21w
YXJlSW1tZWRpYXRlVDE6OnJuKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFS
TXY3RE9wY29kZUNvbXBhcmVJbW1lZGlhdGVUMTo6aW1tZWRpYXRlOCk6CisgICAgICAgIChBUk12
N0RPcGNvZGVDb21wYXJlUmVnaXN0ZXJUMSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1i
bGVyOjpBUk12N0RPcGNvZGVDb21wYXJlUmVnaXN0ZXJUMTo6cm4pOgorICAgICAgICAoQVJNdjdE
T3Bjb2RlQ29tcGFyZVJlZ2lzdGVyVDIpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxl
cjo6QVJNdjdET3Bjb2RlQ29tcGFyZVJlZ2lzdGVyVDI6OnJuKToKKyAgICAgICAgKEpTQzo6QVJN
djdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUNvbXBhcmVSZWdpc3RlclQyOjpybSk6CisgICAg
ICAgIChBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ2lzdGVyVDEpOgorICAgICAgICAoSlND
OjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWdpc3RlclQx
OjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2Rl
RGF0YVByb2Nlc3NpbmdSZWdpc3RlclQxOjpvcCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNz
ZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ2lzdGVyVDE6OnJtKToKKyAgICAg
ICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVn
aXN0ZXJUMTo6cmRuKToKKyAgICAgICAgKEFSTXY3RE9wY29kZUdlbmVyYXRlUENSZWxhdGl2ZUFk
ZHJlc3MpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlR2Vu
ZXJhdGVQQ1JlbGF0aXZlQWRkcmVzczo6cmQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2Vt
Ymxlcjo6QVJNdjdET3Bjb2RlR2VuZXJhdGVQQ1JlbGF0aXZlQWRkcmVzczo6aW1tZWRpYXRlOCk6
CisgICAgICAgIChBUk12N0RPcGNvZGVMb2FkRnJvbUxpdGVyYWxQb29sKToKKyAgICAgICAgKEpT
Qzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvYWRGcm9tTGl0ZXJhbFBvb2w6OnJ0
KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvYWRGcm9t
TGl0ZXJhbFBvb2w6OmltbWVkaWF0ZTgpOgorICAgICAgICAoQVJNdjdET3Bjb2RlTG9hZFN0b3Jl
UmVnaXN0ZXJJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJN
djdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGU6Om9wTmFtZSk6CisgICAgICAgIChK
U0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlckltbWVk
aWF0ZTo6b3ApOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2Rl
TG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGU6OmltbWVkaWF0ZTUpOgorICAgICAgICAoSlNDOjpB
Uk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGU6
OnJuKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvYWRT
dG9yZVJlZ2lzdGVySW1tZWRpYXRlOjpydCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1i
bGVyOjpBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlckltbWVkaWF0ZTo6c2NhbGUpOgorICAg
ICAgICAoQVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGVXb3JkQW5kQnl0ZSk6
CisgICAgICAgIChBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlckltbWVkaWF0ZUhhbGZXb3Jk
KToKKyAgICAgICAgKEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVyT2Zmc2V0VDEpOgorICAg
ICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0
ZXJPZmZzZXRUMTo6b3BOYW1lKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFS
TXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVyT2Zmc2V0VDE6Om9wQik6CisgICAgICAgIChKU0M6
OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3Rlck9mZnNldFQx
OjpybSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVMb2Fk
U3RvcmVSZWdpc3Rlck9mZnNldFQxOjpybik6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1i
bGVyOjpBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3Rlck9mZnNldFQxOjpydCk6CisgICAgICAg
IChBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlclNQUmVsYXRpdmUpOgorICAgICAgICAoSlND
OjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJTUFJlbGF0
aXZlOjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bj
b2RlTG9hZFN0b3JlUmVnaXN0ZXJTUFJlbGF0aXZlOjpvcCk6CisgICAgICAgIChKU0M6OkFSTXY3
RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlclNQUmVsYXRpdmU6OnJ0
KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvYWRTdG9y
ZVJlZ2lzdGVyU1BSZWxhdGl2ZTo6aW1tZWRpYXRlOCk6CisgICAgICAgIChBUk12N0RPcGNvZGVM
b2dpY2FsSW1tZWRpYXRlVDEpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJN
djdET3Bjb2RlTG9naWNhbEltbWVkaWF0ZVQxOjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpBUk12
N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9naWNhbEltbWVkaWF0ZVQxOjpvcCk6CisgICAg
ICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVMb2dpY2FsSW1tZWRpYXRl
VDE6OmltbWVkaWF0ZTUpOgorICAgICAgICAoQVJNdjdET3Bjb2RlTWlzY0FkZFN1YlNQKToKKyAg
ICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZU1pc2NBZGRTdWJTUDo6
b3BOYW1lKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZU1p
c2NBZGRTdWJTUDo6b3ApOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdE
T3Bjb2RlTWlzY0FkZFN1YlNQOjppbW1lZGlhdGU3KToKKyAgICAgICAgKEFSTXY3RE9wY29kZU1p
c2NCeXRlSGFsZndvcmRPcHMpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJN
djdET3Bjb2RlTWlzY0J5dGVIYWxmd29yZE9wczo6b3BOYW1lKToKKyAgICAgICAgKEpTQzo6QVJN
djdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZU1pc2NCeXRlSGFsZndvcmRPcHM6Om9wKToKKyAg
ICAgICAgKEFSTXY3RE9wY29kZU1pc2NCcmVha3BvaW50VDEpOgorICAgICAgICAoSlNDOjpBUk12
N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTWlzY0JyZWFrcG9pbnRUMTo6aW1tZWRpYXRlOCk6
CisgICAgICAgIChBUk12N0RPcGNvZGVNaXNjQ29tcGFyZUFuZEJyYW5jaCk6CisgICAgICAgIChK
U0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVNaXNjQ29tcGFyZUFuZEJyYW5jaDo6
b3BOYW1lKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZU1p
c2NDb21wYXJlQW5kQnJhbmNoOjpvcCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVy
OjpBUk12N0RPcGNvZGVNaXNjQ29tcGFyZUFuZEJyYW5jaDo6aW1tZWRpYXRlNik6CisgICAgICAg
IChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVNaXNjQ29tcGFyZUFuZEJyYW5j
aDo6cm4pOgorICAgICAgICAoQVJNdjdET3Bjb2RlTWlzY0hpbnQxNik6CisgICAgICAgIChKU0M6
OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVNaXNjSGludDE2OjpvcE5hbWUpOgorICAg
ICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTWlzY0hpbnQxNjo6b3BB
KToKKyAgICAgICAgKEFSTXY3RE9wY29kZU1pc2NJZlRoZW5UMSk6CisgICAgICAgIChKU0M6OkFS
TXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVNaXNjSWZUaGVuVDE6OmZpcnN0Q29uZGl0aW9u
KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZU1pc2NJZlRo
ZW5UMTo6bWFzayk6CisgICAgICAgIChBUk12N0RPcGNvZGVNaXNjUHVzaFBvcCk6CisgICAgICAg
IChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVNaXNjUHVzaFBvcDo6b3BOYW1l
KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZU1pc2NQdXNo
UG9wOjpvcCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVN
aXNjUHVzaFBvcDo6cmVnaXN0ZXJNYXNrKToKKyAgICAgICAgKEFSTXY3RE9wY29kZU1vdmVJbW1l
ZGlhdGVUMSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVN
b3ZlSW1tZWRpYXRlVDE6OnJkKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFS
TXY3RE9wY29kZU1vdmVJbW1lZGlhdGVUMTo6aW1tZWRpYXRlOCk6CisgICAgICAgIChBUk12N0RP
cGNvZGVNb3ZlUmVnaXN0ZXJUMSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpB
Uk12N0RPcGNvZGVNb3ZlUmVnaXN0ZXJUMTo6cmQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fz
c2VtYmxlcjo6QVJNdjdET3Bjb2RlTW92ZVJlZ2lzdGVyVDE6OnJtKToKKyAgICAgICAgKEFSTXY3
RDMyQml0T3Bjb2RlKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDMy
Qml0T3Bjb2RlOjpPcGNvZGVHcm91cDo6T3Bjb2RlR3JvdXApOgorICAgICAgICAoSlNDOjpBUk12
N0Rpc2Fzc2VtYmxlcjo6QVJNdjdEMzJCaXRPcGNvZGU6Ok9wY29kZUdyb3VwOjpzZXROZXh0KToK
KyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDMyQml0T3Bjb2RlOjpPcGNv
ZGVHcm91cDo6bmV4dCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0Qz
MkJpdE9wY29kZTo6T3Bjb2RlR3JvdXA6Om1hdGNoZXMpOgorICAgICAgICAoSlNDOjpBUk12N0Rp
c2Fzc2VtYmxlcjo6QVJNdjdEMzJCaXRPcGNvZGU6Ok9wY29kZUdyb3VwOjpmb3JtYXQpOgorICAg
ICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdEMzJCaXRPcGNvZGU6OnJkKToKKyAg
ICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDMyQml0T3Bjb2RlOjpybSk6Cisg
ICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0QzMkJpdE9wY29kZTo6cm4pOgor
ICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdEMzJCaXRPcGNvZGU6OnJ0KToK
KyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RDMyQml0T3Bjb2RlOjpvcGNv
ZGVHcm91cE51bWJlcik6CisgICAgICAgIChBUk12N0RPcGNvZGVCcmFuY2hSZWxhdGl2ZSk6Cisg
ICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVCcmFuY2hSZWxhdGl2
ZTo6c0JpdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVC
cmFuY2hSZWxhdGl2ZTo6ajEpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJN
djdET3Bjb2RlQnJhbmNoUmVsYXRpdmU6OmoyKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3Nl
bWJsZXI6OkFSTXY3RE9wY29kZUJyYW5jaFJlbGF0aXZlOjppbW1lZGlhdGUxMSk6CisgICAgICAg
IChBUk12N0RPcGNvZGVDb25kaXRpb25hbEJyYW5jaFQzKToKKyAgICAgICAgKEpTQzo6QVJNdjdE
aXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUNvbmRpdGlvbmFsQnJhbmNoVDM6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVDb25kaXRpb25hbEJy
YW5jaFQzOjpjb25kaXRpb24pOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJN
djdET3Bjb2RlQ29uZGl0aW9uYWxCcmFuY2hUMzo6aW1tZWRpYXRlNik6CisgICAgICAgIChBUk12
N0RPcGNvZGVCcmFuY2hPckJyYW5jaExpbmspOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2Vt
Ymxlcjo6QVJNdjdET3Bjb2RlQnJhbmNoT3JCcmFuY2hMaW5rOjpvZmZzZXQpOgorICAgICAgICAo
SlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlQnJhbmNoT3JCcmFuY2hMaW5rOjpp
bW1lZGlhdGUxMCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNv
ZGVCcmFuY2hPckJyYW5jaExpbms6OmlzQkwpOgorICAgICAgICAoQVJNdjdET3Bjb2RlRGF0YVBy
b2Nlc3NpbmdMb2dpY2FsQW5kUml0aG1ldGljKToKKyAgICAgICAgKEFSTXY3RE9wY29kZURhdGFQ
cm9jZXNzaW5nTW9kaWZpZWRJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2Vt
Ymxlcjo6QVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdNb2RpZmllZEltbWVkaWF0ZTo6b3BOYW1l
KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZURhdGFQcm9j
ZXNzaW5nTW9kaWZpZWRJbW1lZGlhdGU6Om9wKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3Nl
bWJsZXI6OkFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nTW9kaWZpZWRJbW1lZGlhdGU6OnNCaXQp
OgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlRGF0YVByb2Nl
c3NpbmdNb2RpZmllZEltbWVkaWF0ZTo6aW1tZWRpYXRlMTIpOgorICAgICAgICAoQVJNdjdET3Bj
b2RlRGF0YVByb2Nlc3NpbmdTaGlmdGVkUmVnKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3Nl
bWJsZXI6OkFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nU2hpZnRlZFJlZzo6b3BOYW1lKToKKyAg
ICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5n
U2hpZnRlZFJlZzo6c0JpdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12
N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1NoaWZ0ZWRSZWc6Om9wKToKKyAgICAgICAgKEpTQzo6QVJN
djdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nU2hpZnRlZFJlZzo6aW1t
ZWRpYXRlNSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVE
YXRhUHJvY2Vzc2luZ1NoaWZ0ZWRSZWc6OnR5cGUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fz
c2VtYmxlcjo6QVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdTaGlmdGVkUmVnOjp0YkJpdCk6Cisg
ICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2lu
Z1NoaWZ0ZWRSZWc6OnRCaXQpOgorICAgICAgICAoQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdS
ZWcpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlRGF0YVBy
b2Nlc3NpbmdSZWc6Om9wMSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12
N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZzo6b3AyKToKKyAgICAgICAgKEFSTXY3RE9wY29kZURh
dGFQcm9jZXNzaW5nUmVnU2hpZnQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6
QVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWdTaGlmdDo6b3BOYW1lKToKKyAgICAgICAgKEFS
TXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnRXh0ZW5kKToKKyAgICAgICAgKEpTQzo6QVJNdjdE
aXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnRXh0ZW5kOjpvcEV4dGVu
ZE5hbWUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlRGF0
YVByb2Nlc3NpbmdSZWdFeHRlbmQ6Om9wRXh0ZW5kQW5kQWRkTmFtZSk6CisgICAgICAgIChKU0M6
OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ0V4dGVuZDo6
cm90YXRlKToKKyAgICAgICAgKEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnUGFyYWxsZWwp
OgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlRGF0YVByb2Nl
c3NpbmdSZWdQYXJhbGxlbDo6b3BOYW1lKToKKyAgICAgICAgKEFSTXY3RE9wY29kZURhdGFQcm9j
ZXNzaW5nUmVnTWlzYyk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RP
cGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ01pc2M6Om9wTmFtZSk6CisgICAgICAgIChBUk12N0RPcGNv
ZGVIaW50MzIpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2Rl
SGludDMyOjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdE
T3Bjb2RlSGludDMyOjppc0RlYnVnSGludCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1i
bGVyOjpBUk12N0RPcGNvZGVIaW50MzI6OmRlYnVnT3B0aW9uKToKKyAgICAgICAgKEpTQzo6QVJN
djdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUhpbnQzMjo6b3ApOgorICAgICAgICAoQVJNdjdE
T3Bjb2RlRlBUcmFuc2Zlcik6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12
N0RPcGNvZGVGUFRyYW5zZmVyOjpvcEgpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxl
cjo6QVJNdjdET3Bjb2RlRlBUcmFuc2Zlcjo6b3BMKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNh
c3NlbWJsZXI6OkFSTXY3RE9wY29kZUZQVHJhbnNmZXI6OnJ0KToKKyAgICAgICAgKEpTQzo6QVJN
djdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUZQVHJhbnNmZXI6Om9wQyk6CisgICAgICAgIChK
U0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVGUFRyYW5zZmVyOjpvcEIpOgorICAg
ICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlRlBUcmFuc2Zlcjo6dmQp
OgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlRlBUcmFuc2Zl
cjo6dm4pOgorICAgICAgICAoQVJNdjdET3Bjb2RlRGF0YUxvYWQpOgorICAgICAgICAoSlNDOjpB
Uk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlRGF0YUxvYWQ6Om9wTmFtZSk6CisgICAgICAg
IChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRhTG9hZDo6b3ApOgorICAg
ICAgICAoQVJNdjdET3Bjb2RlTG9hZFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNh
c3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvYWRSZWdpc3Rlcjo6aW1tZWRpYXRlMik6CisgICAgICAg
IChBUk12N0RPcGNvZGVMb2FkU2lnbmVkSW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6QVJNdjdE
aXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvYWRTaWduZWRJbW1lZGlhdGU6OnBCaXQpOgorICAg
ICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9hZFNpZ25lZEltbWVk
aWF0ZTo6dUJpdCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNv
ZGVMb2FkU2lnbmVkSW1tZWRpYXRlOjp3Qml0KToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3Nl
bWJsZXI6OkFSTXY3RE9wY29kZUxvYWRTaWduZWRJbW1lZGlhdGU6OmltbWVkaWF0ZTgpOgorICAg
ICAgICAoQVJNdjdET3Bjb2RlTG9hZFVuc2lnbmVkSW1tZWRpYXRlKToKKyAgICAgICAgKEpTQzo6
QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvYWRVbnNpZ25lZEltbWVkaWF0ZTo6aW1t
ZWRpYXRlMTIpOgorICAgICAgICAoQVJNdjdET3Bjb2RlTG9uZ011bHRpcGxlRGl2aWRlKToKKyAg
ICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvbmdNdWx0aXBsZURp
dmlkZTo6b3BOYW1lKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9w
Y29kZUxvbmdNdWx0aXBsZURpdmlkZTo6c21sYWxPcE5hbWUpOgorICAgICAgICAoSlNDOjpBUk12
N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9uZ011bHRpcGxlRGl2aWRlOjpzbWxhbGRPcE5h
bWUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9uZ011
bHRpcGxlRGl2aWRlOjpzbWxzbGRPcE5hbWUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2Vt
Ymxlcjo6QVJNdjdET3Bjb2RlTG9uZ011bHRpcGxlRGl2aWRlOjpyZExvKToKKyAgICAgICAgKEpT
Qzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZUxvbmdNdWx0aXBsZURpdmlkZTo6cmRI
aSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVMb25nTXVs
dGlwbGVEaXZpZGU6Om9wMSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12
N0RPcGNvZGVMb25nTXVsdGlwbGVEaXZpZGU6Om9wMik6CisgICAgICAgIChKU0M6OkFSTXY3RGlz
YXNzZW1ibGVyOjpBUk12N0RPcGNvZGVMb25nTXVsdGlwbGVEaXZpZGU6Om5CaXQpOgorICAgICAg
ICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlTG9uZ011bHRpcGxlRGl2aWRl
OjptQml0KToKKyAgICAgICAgKEFSTXY3RE9wY29kZURhdGFQdXNoUG9wU2luZ2xlKToKKyAgICAg
ICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZURhdGFQdXNoUG9wU2luZ2xl
OjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2Rl
RGF0YVB1c2hQb3BTaW5nbGU6Om9wKToKKyAgICAgICAgKEFSTXY3RE9wY29kZURhdGFTdG9yZVNp
bmdsZSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVEYXRh
U3RvcmVTaW5nbGU6Om9wTmFtZSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpB
Uk12N0RPcGNvZGVEYXRhU3RvcmVTaW5nbGU6Om9wKToKKyAgICAgICAgKEFSTXY3RE9wY29kZVN0
b3JlU2luZ2xlSW1tZWRpYXRlMTIpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6
QVJNdjdET3Bjb2RlU3RvcmVTaW5nbGVJbW1lZGlhdGUxMjo6aW1tZWRpYXRlMTIpOgorICAgICAg
ICAoQVJNdjdET3Bjb2RlU3RvcmVTaW5nbGVJbW1lZGlhdGU4KToKKyAgICAgICAgKEpTQzo6QVJN
djdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZVN0b3JlU2luZ2xlSW1tZWRpYXRlODo6cEJpdCk6
CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVTdG9yZVNpbmds
ZUltbWVkaWF0ZTg6OnVCaXQpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJN
djdET3Bjb2RlU3RvcmVTaW5nbGVJbW1lZGlhdGU4Ojp3Qml0KToKKyAgICAgICAgKEpTQzo6QVJN
djdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZVN0b3JlU2luZ2xlSW1tZWRpYXRlODo6aW1tZWRp
YXRlOCk6CisgICAgICAgIChBUk12N0RPcGNvZGVTdG9yZVNpbmdsZVJlZ2lzdGVyKToKKyAgICAg
ICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZVN0b3JlU2luZ2xlUmVnaXN0
ZXI6OmltbWVkaWF0ZTIpOgorICAgICAgICAoQVJNdjdET3Bjb2RlVW5tb2RpZmllZEltbWVkaWF0
ZSk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVVbm1vZGlm
aWVkSW1tZWRpYXRlOjpvcE5hbWUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6
QVJNdjdET3Bjb2RlVW5tb2RpZmllZEltbWVkaWF0ZTo6b3ApOgorICAgICAgICAoSlNDOjpBUk12
N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlVW5tb2RpZmllZEltbWVkaWF0ZTo6c2hCaXQpOgor
ICAgICAgICAoSlNDOjpBUk12N0Rpc2Fzc2VtYmxlcjo6QVJNdjdET3Bjb2RlVW5tb2RpZmllZElt
bWVkaWF0ZTo6Yml0TnVtT3JTYXRJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpBUk12N0Rpc2Fz
c2VtYmxlcjo6QVJNdjdET3Bjb2RlVW5tb2RpZmllZEltbWVkaWF0ZTo6aW1tZWRpYXRlNSk6Cisg
ICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVVbm1vZGlmaWVkSW1t
ZWRpYXRlOjppbW1lZGlhdGUxMik6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpB
Uk12N0RPcGNvZGVVbm1vZGlmaWVkSW1tZWRpYXRlOjppbW1lZGlhdGUxNik6CisgICAgICAgIChB
Uk12N0RPcGNvZGVWTU9WRG91YmxlUHJlY2lzaW9uKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNh
c3NlbWJsZXI6OkFSTXY3RE9wY29kZVZNT1ZEb3VibGVQcmVjaXNpb246Om9wKToKKyAgICAgICAg
KEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZVZNT1ZEb3VibGVQcmVjaXNpb246
OnJ0Mik6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVWTU9W
RG91YmxlUHJlY2lzaW9uOjpydCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpB
Uk12N0RPcGNvZGVWTU9WRG91YmxlUHJlY2lzaW9uOjp2bSk6CisgICAgICAgIChBUk12N0RPcGNv
ZGVWTU9WU2luZ2xlUHJlY2lzaW9uKToKKyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6
OkFSTXY3RE9wY29kZVZNT1ZTaW5nbGVQcmVjaXNpb246Om9wKToKKyAgICAgICAgKEpTQzo6QVJN
djdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZVZNT1ZTaW5nbGVQcmVjaXNpb246OnJ0Mik6Cisg
ICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVWTU9WU2luZ2xlUHJl
Y2lzaW9uOjpydCk6CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNv
ZGVWTU9WU2luZ2xlUHJlY2lzaW9uOjp2bSk6CisgICAgICAgIChBUk12N0RPcGNvZGVWTVNSKToK
KyAgICAgICAgKEpTQzo6QVJNdjdEaXNhc3NlbWJsZXI6OkFSTXY3RE9wY29kZVZNU1I6Om9wTCk6
CisgICAgICAgIChKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12N0RPcGNvZGVWTVNSOjpydCk6
CisgICAgICAgICogZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OnRyeVRvRGlzYXNzZW1ibGUpOgorCiAyMDEzLTA1LTA3ICBKdWxpZW4gQnJp
YW5jZWF1ICA8amJyaWFuY2VhdUBuZHMuY29tPgogCiAgICAgICAgIFRha2UgYWR2YW50YWdlIG9m
IHByZS1kZWNyZW1lbnQgYW5kIHBvc3QtaW5jcmVtZW50IG9wY29kZXMgZm9yIHNoNCBiYXNlIEpJ
VC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDk3NzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTIzLDYgKzUyMyw5IEBACiAJCTY1MTEyMzA3MTQw
NDZCMEEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVn
RXhwLmNwcCAqLzsgfTsKIAkJNjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vu
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUzMDNE
NjMxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NUVCMjlCMTBDRTI1ODEwMDFBOTkwRSAv
KiBOb2Rlc0NvZGVnZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjU1RUIyOUExMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdlbi5jcHAgKi87
IH07CisJCTY1QzAyODUwMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUMwMjg0RjE3
MTc5NUUyMDAzNTFFMzUgLyogQVJNdjdEaXNhc3NlbWJsZXIuY3BwICovOyB9OworCQk2NUMwMjg1
QzE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QzAyODVBMTcxNzk2NjgwMDM1MUUzNSAvKiBB
Uk12N0RPcGNvZGUuY3BwICovOyB9OworCQk2NUMwMjg1RDE3MTc5NjY4MDAzNTFFMzUgLyogQVJN
djdET3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUMwMjg1QjE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmggKi87IH07CiAJCTdF
NEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U0RUU3MDgwRUJCNzk2MzAwNTkzNEFB
IC8qIFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWlu
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNEVF
NzBFMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07CiAJCTdFRkYw
MDY0MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VGRjAwNjMwRUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJ
bmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTE0MDksNiArMTQxMiw5IEBACiAJCTY1NjIxRTZDMDg5RTg1OTcwMDc2MEYzNSAvKiBQcm9wZXJ0
eVNsb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHJvcGVydHlTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
fTsKIAkJNjU5ODdGMkMxNjdGRTg0QjAwM0MyRjhEIC8qIERGR09TUkV4aXRDb21waWxhdGlvbklu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGF0
aW9uSW5mby5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU5ODdGMkYxNjgyOEE3RTAwM0MyRjhEIC8qIFVudXNl
ZFBvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW51c2VkUG9pbnRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2NUMwMjg0RjE3MTc5NUUyMDAzNTFF
MzUgLyogQVJNdjdEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQVJNdjdEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0FSTXY3
RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjVDMDI4NUEx
NzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBUk12N0RPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2NUMwMjg1QjE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTXY3RE9wY29kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2NUMwMkZCQjA2Mzc0NjJBMDAzRTdFRTYgLyogUHJvdGVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm90ZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJNjVDN0ExNzEw
QThFQUFDQjAwRkEzN0VBIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNXcmFwcGVyT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNjVDN0ExNzIwQThFQUFDQjAwRkEzN0VBIC8qIEpTV3JhcHBlck9iamVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXcmFwcGVyT2JqZWN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTc3LDggKzE5ODMsMTAgQEAKIAkJfTsK
IAkJMEZGNDI3MkUxNThFQkNDRTAwNENCOUZGIC8qIGRpc2Fzc2VtYmxlciAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCisJCQljaGlsZHJlbiA9ICgJCQkKKwkJCQk2
NUMwMjg1OTE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjcgKi8sCiAJCQkJMEZGNDI3MzMxNThFQkQ2
NDAwNENCOUZGIC8qIHVkaXM4NiAqLywKKwkJCQk2NUMwMjg0RjE3MTc5NUUyMDAzNTFFMzUgLyog
QVJNdjdEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGOUQzMzZFMTY1REJCOEQwMDVBRDM4NyAv
KiBEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzJGMTU4RUJENDQwMDRDQjlGRiAvKiBE
aXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkY0MjczMDE1OEVCRDQ0MDA0Q0I5RkYgLyogVURpczg2
RGlzYXNzZW1ibGVyLmNwcCAqLywKQEAgLTIzMjEsNiArMjMyOSwxNiBAQAogCQkJdGFiV2lkdGgg
PSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQk2NUMwMjg1OTE3MTc5NjY4MDAzNTFFMzUg
LyogQVJNdjcgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJ
CTY1QzAyODVBMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuY3BwICovLAorCQkJCTY1
QzAyODVCMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCAqLywKKwkJCSk7CisJCQlu
YW1lID0gQVJNdjc7CisJCQlwYXRoID0gZGlzYXNzZW1ibGVyL0FSTXY3OworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0UzOUQ4MUQwRUMzOEVGQTAwM0FGMTFBIC8qIGJ5dGVj
b21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0z
MjAxLDYgKzMyMTksNyBAQAogCQkJCUJDODdDREI5MTA3MTJBRDQwMDA2MTRDRiAvKiBKU09OT2Jq
ZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTUzNEFBRkIwRTVCN0E5NjAwQjhBNDVCIC8q
IEpTUHJvZmlsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2MTM2RTFB
MDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjVDMDI4NUQxNzE3OTY2
ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjYw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTUmV0YWluUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg3
NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdD
MEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zODQ1LDYgKzM4NjQsNyBAQAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAv
KiBERkdNaW5pZmllZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMxNkI3MkEw
MzAwNURGOTVCIC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkExNTBF
OTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2NUMw
Mjg1QzE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RUM5RENGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTc5MTE0NkE2RjcxMDBDRjI0NDIgLyogREZHT1NSRXhp
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTM5NTcsNiArMzk3Nyw3IEBACiAJCQkJODZFM0M2MUMx
NjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlBNzQ4MkI5NDExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRo
U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8q
IEFSTXY3RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3QkFC
RUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3
MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzY2RDM0MTVBRTI1MzgwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNh
c3NlbWJsZXIuaCIKKworI2lmIFVTRShBUk1WN19ESVNBU1NFTUJMRVIpCisKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJBUk12Ny9BUk12N0RPcGNvZGUuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgs
IFByaW50U3RyZWFtJiBvdXQpCit7CisgICAgQVJNdjdET3Bjb2RlIGFybU9wY29kZTsKKworICAg
IHVpbnQxNl90KiBjdXJyZW50UEMgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkmfjEpOwor
ICAgIHVpbnQxNl90KiBlbmRQQyA9IGN1cnJlbnRQQyArIChzaXplIC8gc2l6ZW9mKHVpbnQxNl90
KSk7CisKKyAgICB3aGlsZSAoY3VycmVudFBDIDwgZW5kUEMpIHsKKyAgICAgICAgY2hhciBwY1N0
cmluZ1sxMl07CisgICAgICAgIHNucHJpbnRmKHBjU3RyaW5nLCBzaXplb2YocGNTdHJpbmcpLCAi
MHgleCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGN1cnJlbnRQQykpOworICAgICAgICBv
dXQucHJpbnRmKCIlcyUxMHM6ICVzXG4iLCBwcmVmaXgsIHBjU3RyaW5nLCBhcm1PcGNvZGUuZGlz
YXNzZW1ibGUoY3VycmVudFBDKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVVNFKEFSTVY3X0RJU0FTU0VNQkxFUikKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12Ny9BUk12N0RPcGNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
QVJNdjcvQVJNdjdET3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvQVJNdjcvQVJNdjdET3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFSTVY3X0RJU0FTU0VNQkxFUikK
KworI2luY2x1ZGUgIkFSTXY3RE9wY29kZS5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1
ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQVJNdjdEaXNhc3NlbWJsZXIgeworCitBUk12N0QxNkJpdE9wY29kZTo6T3Bjb2RlR3Jv
dXAqIEFSTXY3RDE2Qml0T3Bjb2RlOjpvcGNvZGVUYWJsZVszMl07CitBUk12N0QzMkJpdE9wY29k
ZTo6T3Bjb2RlR3JvdXAqIEFSTXY3RDMyQml0T3Bjb2RlOjpvcGNvZGVUYWJsZVsxNl07CisKK2Nv
bnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29kZTo6c19jb25kaXRpb25OYW1lc1sxNl0gPSB7Cisg
ICAiZXEiLCAibmUiLCAiaHMiLCAibG8iLCAibWkiLCAicGwiLCAidnMiLCAidmMiLAorICAgImhp
IiwgImxzIiwgImdlIiwgImx0IiwgImd0IiwgImxlIiwgImFsIiwgImFsIgorfTsKKworY29uc3Qg
Y2hhciogY29uc3QgQVJNdjdET3Bjb2RlOjpzX29wdGlvbk5hbWVbOF0gPQoreyAidXh0YiIsICJ1
eHRoIiwgInV4dHciLCAidXh0eCIsICJzeHRiIiwgInN4dGgiLCAic3h0dyIsICJzeHR4IiB9Owor
Citjb25zdCBjaGFyKiBjb25zdCBBUk12N0RPcGNvZGU6OnNfc2hpZnROYW1lc1s0XSA9IHsKKyAg
ICAibHNsIiwgImxzciIsICJhc2wiLCAicm9yIgorfTsKKworY29uc3QgY2hhciogY29uc3QgQVJN
djdET3Bjb2RlOjpzX3NwZWNpYWxSZWdpc3Rlck5hbWVzWzNdID0geyAic3AiLCAibHIiLCAicGMi
IH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlv
blR5cGU+CitzdHJ1Y3QgT3Bjb2RlR3JvdXBJbml0aWFsaXplciB7CisgICAgdW5zaWduZWQgbV9v
cGNvZGVHcm91cE51bWJlcjsKKyAgICBJbnN0cnVjdGlvblR5cGUgbV9tYXNrOworICAgIEluc3Ry
dWN0aW9uVHlwZSBtX3BhdHRlcm47CisgICAgY29uc3QgY2hhciogKCptX2Zvcm1hdCkoT3Bjb2Rl
VHlwZSopOworfTsKKworI2RlZmluZSBPUENPREVfR1JPVVBfRU5UUlkoZ3JvdXBJbmRleCwgZ3Jv
dXBDbGFzcykgXAoreyBncm91cEluZGV4LCBncm91cENsYXNzOjpzX21hc2ssIGdyb3VwQ2xhc3M6
OnNfcGF0dGVybiwgZ3JvdXBDbGFzczo6Zm9ybWF0IH0KKwordHlwZWRlZiBPcGNvZGVHcm91cElu
aXRpYWxpemVyPEFSTXY3RDE2Qml0T3Bjb2RlLCB1aW50MTZfdD4gT3Bjb2RlMTZHcm91cEluaXRp
YWxpemVyOwordHlwZWRlZiBPcGNvZGVHcm91cEluaXRpYWxpemVyPEFSTXY3RDMyQml0T3Bjb2Rl
LCB1aW50MzJfdD4gT3Bjb2RlMzJHcm91cEluaXRpYWxpemVyOworCitzdGF0aWMgT3Bjb2RlMTZH
cm91cEluaXRpYWxpemVyIG9wY29kZTE2Qml0R3JvdXBMaXN0W10gPSB7CisgICAgT1BDT0RFX0dS
T1VQX0VOVFJZKDB4MCwgQVJNdjdET3Bjb2RlTG9naWNhbEltbWVkaWF0ZVQxKSwKKyAgICBPUENP
REVfR1JPVVBfRU5UUlkoMHgxLCBBUk12N0RPcGNvZGVMb2dpY2FsSW1tZWRpYXRlVDEpLAorICAg
IE9QQ09ERV9HUk9VUF9FTlRSWSgweDIsIEFSTXY3RE9wY29kZUxvZ2ljYWxJbW1lZGlhdGVUMSks
CisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MywgQVJNdjdET3Bjb2RlQWRkU3VidHJhY3RUMSks
CisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MywgQVJNdjdET3Bjb2RlQWRkU3VidHJhY3RJbW1l
ZGlhdGUzKSwKKyAgICBPUENPREVfR1JPVVBfRU5UUlkoMHg0LCBBUk12N0RPcGNvZGVNb3ZlSW1t
ZWRpYXRlVDEpLAorICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDUsIEFSTXY3RE9wY29kZUNvbXBh
cmVJbW1lZGlhdGVUMSksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4NiwgQVJNdjdET3Bjb2Rl
QWRkU3VidHJhY3RJbW1lZGlhdGU4KSwKKyAgICBPUENPREVfR1JPVVBfRU5UUlkoMHg3LCBBUk12
N0RPcGNvZGVBZGRTdWJ0cmFjdEltbWVkaWF0ZTgpLAorICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgw
eDgsIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnaXN0ZXJUMSksCisgICAgT1BDT0RFX0dS
T1VQX0VOVFJZKDB4OCwgQVJNdjdET3Bjb2RlQWRkUmVnaXN0ZXJUMiksCisgICAgT1BDT0RFX0dS
T1VQX0VOVFJZKDB4OCwgQVJNdjdET3Bjb2RlQ29tcGFyZVJlZ2lzdGVyVDIpLAorICAgIE9QQ09E
RV9HUk9VUF9FTlRSWSgweDgsIEFSTXY3RE9wY29kZUNvbXBhcmVSZWdpc3RlclQxKSwKKyAgICBP
UENPREVfR1JPVVBfRU5UUlkoMHg4LCBBUk12N0RPcGNvZGVNb3ZlUmVnaXN0ZXJUMSksCisgICAg
T1BDT0RFX0dST1VQX0VOVFJZKDB4OCwgQVJNdjdET3Bjb2RlQnJhbmNoRXhjaGFuZ2VUMSksCisg
ICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4OSwgQVJNdjdET3Bjb2RlTG9hZEZyb21MaXRlcmFsUG9v
bCksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4YSwgQVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVn
aXN0ZXJPZmZzZXRUMSksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4YiwgQVJNdjdET3Bjb2Rl
TG9hZFN0b3JlUmVnaXN0ZXJPZmZzZXRUMSksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4Yywg
QVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGVXb3JkQW5kQnl0ZSksCisgICAg
T1BDT0RFX0dST1VQX0VOVFJZKDB4ZCwgQVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJJbW1l
ZGlhdGVXb3JkQW5kQnl0ZSksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4ZSwgQVJNdjdET3Bj
b2RlTG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGVXb3JkQW5kQnl0ZSksCisgICAgT1BDT0RFX0dS
T1VQX0VOVFJZKDB4ZiwgQVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGVXb3Jk
QW5kQnl0ZSksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MTAsIEFSTXY3RE9wY29kZUxvYWRT
dG9yZVJlZ2lzdGVySW1tZWRpYXRlSGFsZldvcmQpLAorICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgw
eDExLCBBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlckltbWVkaWF0ZUhhbGZXb3JkKSwKKyAg
ICBPUENPREVfR1JPVVBfRU5UUlkoMHgxMiwgQVJNdjdET3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJT
UFJlbGF0aXZlKSwKKyAgICBPUENPREVfR1JPVVBfRU5UUlkoMHgxMywgQVJNdjdET3Bjb2RlTG9h
ZFN0b3JlUmVnaXN0ZXJTUFJlbGF0aXZlKSwKKyAgICBPUENPREVfR1JPVVBfRU5UUlkoMHgxNCwg
QVJNdjdET3Bjb2RlR2VuZXJhdGVQQ1JlbGF0aXZlQWRkcmVzcyksCisgICAgT1BDT0RFX0dST1VQ
X0VOVFJZKDB4MTUsIEFSTXY3RE9wY29kZUFkZFNQUGx1c0ltbWVkaWF0ZSksCisgICAgT1BDT0RF
X0dST1VQX0VOVFJZKDB4MTYsIEFSTXY3RE9wY29kZU1pc2NDb21wYXJlQW5kQnJhbmNoKSwKKyAg
ICBPUENPREVfR1JPVVBfRU5UUlkoMHgxNiwgQVJNdjdET3Bjb2RlTWlzY0J5dGVIYWxmd29yZE9w
cyksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MTYsIEFSTXY3RE9wY29kZU1pc2NQdXNoUG9w
KSwKKyAgICBPUENPREVfR1JPVVBfRU5UUlkoMHgxNiwgQVJNdjdET3Bjb2RlTWlzY0FkZFN1YlNQ
KSwKKyAgICBPUENPREVfR1JPVVBfRU5UUlkoMHgxNywgQVJNdjdET3Bjb2RlTWlzY0hpbnQxNiks
IC8vIE5lZWRzIHRvIGJlIGJlZm9yZSBJZlRoZW5UMQorICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgw
eDE3LCBBUk12N0RPcGNvZGVNaXNjSWZUaGVuVDEpLAorICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgw
eDE3LCBBUk12N0RPcGNvZGVNaXNjQnl0ZUhhbGZ3b3JkT3BzKSwKKyAgICBPUENPREVfR1JPVVBf
RU5UUlkoMHgxNywgQVJNdjdET3Bjb2RlTWlzY0NvbXBhcmVBbmRCcmFuY2gpLAorICAgIE9QQ09E
RV9HUk9VUF9FTlRSWSgweDE3LCBBUk12N0RPcGNvZGVNaXNjUHVzaFBvcCksCisgICAgT1BDT0RF
X0dST1VQX0VOVFJZKDB4MTcsIEFSTXY3RE9wY29kZU1pc2NCcmVha3BvaW50VDEpLAorICAgIE9Q
Q09ERV9HUk9VUF9FTlRSWSgweDFhLCBBUk12N0RPcGNvZGVCcmFuY2hDb25kaXRpb25hbFQxKSwK
KyAgICBPUENPREVfR1JPVVBfRU5UUlkoMHgxYiwgQVJNdjdET3Bjb2RlQnJhbmNoQ29uZGl0aW9u
YWxUMSksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MWMsIEFSTXY3RE9wY29kZUJyYW5jaFQy
KQorfTsKKworc3RhdGljIE9wY29kZTMyR3JvdXBJbml0aWFsaXplciBvcGNvZGUzMkJpdEdyb3Vw
TGlzdFtdID0geworICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDUsIEFSTXY3RE9wY29kZURhdGFQ
cm9jZXNzaW5nU2hpZnRlZFJlZyksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4NiwgQVJNdjdE
T3Bjb2RlVk1PVlNpbmdsZVByZWNpc2lvbiksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4Niwg
QVJNdjdET3Bjb2RlVk1PVkRvdWJsZVByZWNpc2lvbiksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZ
KDB4NywgQVJNdjdET3Bjb2RlRlBUcmFuc2ZlciksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4
NywgQVJNdjdET3Bjb2RlVk1TUiksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4OCwgQVJNdjdE
T3Bjb2RlRGF0YVByb2Nlc3NpbmdNb2RpZmllZEltbWVkaWF0ZSksCisgICAgT1BDT0RFX0dST1VQ
X0VOVFJZKDB4OCwgQVJNdjdET3Bjb2RlQ29uZGl0aW9uYWxCcmFuY2hUMyksCisgICAgT1BDT0RF
X0dST1VQX0VOVFJZKDB4OCwgQVJNdjdET3Bjb2RlQnJhbmNoT3JCcmFuY2hMaW5rKSwKKyAgICBP
UENPREVfR1JPVVBfRU5UUlkoMHg5LCBBUk12N0RPcGNvZGVVbm1vZGlmaWVkSW1tZWRpYXRlKSwK
KyAgICBPUENPREVfR1JPVVBfRU5UUlkoMHg5LCBBUk12N0RPcGNvZGVIaW50MzIpLAorICAgIE9Q
Q09ERV9HUk9VUF9FTlRSWSgweDksIEFSTXY3RE9wY29kZUNvbmRpdGlvbmFsQnJhbmNoVDMpLAor
ICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDksIEFSTXY3RE9wY29kZUJyYW5jaE9yQnJhbmNoTGlu
ayksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4YSwgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3Np
bmdNb2RpZmllZEltbWVkaWF0ZSksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4YSwgQVJNdjdE
T3Bjb2RlQ29uZGl0aW9uYWxCcmFuY2hUMyksCisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4YSwg
QVJNdjdET3Bjb2RlQnJhbmNoT3JCcmFuY2hMaW5rKSwKKyAgICBPUENPREVfR1JPVVBfRU5UUlko
MHhiLCBBUk12N0RPcGNvZGVVbm1vZGlmaWVkSW1tZWRpYXRlKSwKKyAgICBPUENPREVfR1JPVVBf
RU5UUlkoMHhiLCBBUk12N0RPcGNvZGVDb25kaXRpb25hbEJyYW5jaFQzKSwKKyAgICBPUENPREVf
R1JPVVBfRU5UUlkoMHhiLCBBUk12N0RPcGNvZGVCcmFuY2hPckJyYW5jaExpbmspLAorICAgIE9Q
Q09ERV9HUk9VUF9FTlRSWSgweGMsIEFSTXY3RE9wY29kZUxvYWRSZWdpc3RlciksCisgICAgT1BD
T0RFX0dST1VQX0VOVFJZKDB4YywgQVJNdjdET3Bjb2RlRGF0YVB1c2hQb3BTaW5nbGUpLCAvLyBT
aG91bGQgYmUgYmVmb3JlIFN0b3JlU2luZ2xlKgorICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweGMs
IEFSTXY3RE9wY29kZVN0b3JlU2luZ2xlUmVnaXN0ZXIpLAorICAgIE9QQ09ERV9HUk9VUF9FTlRS
WSgweGMsIEFSTXY3RE9wY29kZVN0b3JlU2luZ2xlSW1tZWRpYXRlMTIpLAorICAgIE9QQ09ERV9H
Uk9VUF9FTlRSWSgweGMsIEFSTXY3RE9wY29kZVN0b3JlU2luZ2xlSW1tZWRpYXRlOCksCisgICAg
T1BDT0RFX0dST1VQX0VOVFJZKDB4YywgQVJNdjdET3Bjb2RlTG9hZFNpZ25lZEltbWVkaWF0ZSks
CisgICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4YywgQVJNdjdET3Bjb2RlTG9hZFVuc2lnbmVkSW1t
ZWRpYXRlKSwKKyAgICBPUENPREVfR1JPVVBfRU5UUlkoMHhkLCBBUk12N0RPcGNvZGVMb25nTXVs
dGlwbGVEaXZpZGUpLAorICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweGQsIEFSTXY3RE9wY29kZURh
dGFQcm9jZXNzaW5nUmVnU2hpZnQpLAorICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweGQsIEFSTXY3
RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnRXh0ZW5kKSwKKyAgICBPUENPREVfR1JPVVBfRU5UUlko
MHhkLCBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ1BhcmFsbGVsKSwKKyAgICBPUENPREVf
R1JPVVBfRU5UUlkoMHhkLCBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ01pc2MpLAorfTsK
KworYm9vbCBBUk12N0RPcGNvZGU6OnNfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwordm9pZCBBUk12
N0RPcGNvZGU6OmluaXQoKQoreworICAgIGlmIChzX2luaXRpYWxpemVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBBUk12N0QxNkJpdE9wY29kZTo6aW5pdCgpOworICAgIEFSTXY3RDMyQml0T3Bj
b2RlOjppbml0KCk7CisKKyAgICBzX2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKwordm9pZCBBUk12
N0RPcGNvZGU6OnN0YXJ0SVRCbG9jayh1bnNpZ25lZCBibG9ja3NpemUsIHVuc2lnbmVkIGZpcnN0
Q29uZGl0aW9uKQoreworICAgIEFTU0VSVCAoYmxvY2tzaXplID4gMCAmJiBibG9ja3NpemUgPD0g
TWF4SVRCbG9ja1NpemUpOworICAgIG1fSVRCbG9ja3NpemUgPSBibG9ja3NpemU7CisgICAgbV9J
VENvbmRpdGlvbkluZGV4ID0gbV9JVEJsb2Nrc2l6ZSArIDE7CisgICAgbV9jdXJyZW50SVRDb25k
aXRpb24gPSAwOworICAgIG1faWZUaGVuQ29uZGl0aW9uc1swXSA9IGZpcnN0Q29uZGl0aW9uOwor
fQorCit2b2lkIEFSTXY3RE9wY29kZTo6c2F2ZUlUQ29uZGl0aW9uQXQodW5zaWduZWQgYmxvY2tQ
b3NpdGlvbiwgdW5zaWduZWQgY29uZGl0aW9uKQoreworICAgIGlmIChibG9ja1Bvc2l0aW9uIDwg
bV9JVEJsb2Nrc2l6ZSkKKyAgICAgICAgbV9pZlRoZW5Db25kaXRpb25zW2Jsb2NrUG9zaXRpb25d
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY29uZGl0aW9uKTsKK30KKwordm9pZCBBUk12
N0RPcGNvZGU6OmZldGNoT3Bjb2RlKHVpbnQxNl90KiYgbmV3UEMpCit7CisgICAgbV9idWZmZXJP
ZmZzZXQgPSAwOworICAgIG1fZm9ybWF0QnVmZmVyWzBdID0gJ1wwJzsKKyAgICBtX2N1cnJlbnRQ
QyA9IG5ld1BDOworCisgICAgbV9vcGNvZGUgPSAqbmV3UEMrKzsKKworICAgIGlmIChpczMyQml0
SW5zdHJ1Y3Rpb24oKSkgeworICAgICAgICBtX29wY29kZSA8PD0gMTY7CisgICAgICAgIG1fb3Bj
b2RlIHw9ICpuZXdQQysrOworICAgIH0KKworICAgIGlmIChtX0lUQ29uZGl0aW9uSW5kZXggPCBt
X0lUQmxvY2tzaXplKQorICAgICAgICBtX2N1cnJlbnRJVENvbmRpdGlvbiA9IG1faWZUaGVuQ29u
ZGl0aW9uc1ttX0lUQ29uZGl0aW9uSW5kZXhdOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50
SVRDb25kaXRpb24gPSBDb25kTm9uZTsKK30KKworY29uc3QgY2hhciogQVJNdjdET3Bjb2RlOjpk
aXNhc3NlbWJsZSh1aW50MTZfdComIGN1cnJlbnRQQykKK3sKKyAgICBjb25zdCBjaGFyKiByZXN1
bHQ7CisgICAgZmV0Y2hPcGNvZGUoY3VycmVudFBDKTsKKworICAgIGlmIChpczMyQml0SW5zdHJ1
Y3Rpb24oKSkKKyAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxBUk12N0QzMkJpdE9w
Y29kZSo+KHRoaXMpLT5kb0Rpc2Fzc2VtYmxlKCk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQg
PSByZWludGVycHJldF9jYXN0PEFSTXY3RDE2Qml0T3Bjb2RlKj4odGhpcyktPmRvRGlzYXNzZW1i
bGUoKTsKKworICAgIGlmIChzdGFydGluZ0lUQmxvY2soKSkKKyAgICAgICAgbV9JVENvbmRpdGlv
bkluZGV4ID0gMDsKKyAgICBlbHNlIGlmIChpbklUQmxvY2soKSAmJiAoKyttX0lUQ29uZGl0aW9u
SW5kZXggPj0gbV9JVEJsb2Nrc2l6ZSkpCisgICAgICAgIGVuZElUQmxvY2soKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQVJNdjdET3Bjb2RlOjpidWZmZXJQcmludGYoY29uc3Qg
Y2hhciogZm9ybWF0LCAuLi4pCit7CisgICAgaWYgKG1fYnVmZmVyT2Zmc2V0ID49IGJ1ZmZlclNp
emUpCisgICAgICAgIHJldHVybjsKKworICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICB2YV9zdGFy
dChhcmdMaXN0LCBmb3JtYXQpOworCisgICAgbV9idWZmZXJPZmZzZXQgKz0gdnNucHJpbnRmKG1f
Zm9ybWF0QnVmZmVyICsgbV9idWZmZXJPZmZzZXQsIGJ1ZmZlclNpemUgLSBtX2J1ZmZlck9mZnNl
dCwgZm9ybWF0LCBhcmdMaXN0KTsKKworICAgIHZhX2VuZChhcmdMaXN0KTsKK30KKwordm9pZCBB
Uk12N0RPcGNvZGU6OmFwcGVuZEluc3RydWN0aW9uTmFtZShjb25zdCBjaGFyKiBpbnN0cnVjdGlv
bk5hbWUsIGJvb2wgYWRkUykKK3sKKyAgICBpZiAoIWluSVRCbG9jaygpICAmJiAhYWRkUykgewor
ICAgICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWVOb0lUQmxvY2soaW5zdHJ1Y3Rpb25OYW1lKTsK
KworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgY2hhciBzZXZlblNwYWNlc1s4
XSA9ICIgICAgICAgIjsKKworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmxlbihpbnN0cnVjdGlv
bk5hbWUpOworCisgICAgYnVmZmVyUHJpbnRmKCIgICAlcyIsIGluc3RydWN0aW9uTmFtZSk7Cisg
ICAgaWYgKGluSVRCbG9jaygpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiA9IGNv
bmRpdGlvbk5hbWUobV9jdXJyZW50SVRDb25kaXRpb24pOworICAgICAgICBsZW5ndGggKz0gc3Ry
bGVuKGNvbmRpdGlvbik7CisgICAgICAgIGFwcGVuZFN0cmluZyhjb25kaXRpb24pOworICAgIH0g
ZWxzZSBpZiAoYWRkUykgeworICAgICAgICBsZW5ndGgrKzsKKyAgICAgICAgYXBwZW5kQ2hhcmFj
dGVyKCdzJyk7CisgICAgfQorCisgICAgaWYgKGxlbmd0aCA+PSA3KQorICAgICAgICBsZW5ndGgg
PSA2OworCisgICAgYXBwZW5kU3RyaW5nKHNldmVuU3BhY2VzICsgbGVuZ3RoKTsKK30KKwordm9p
ZCBBUk12N0RPcGNvZGU6OmFwcGVuZFJlZ2lzdGVyTmFtZSh1bnNpZ25lZCByZWdpc3Rlck51bWJl
cikKK3sKKyAgICByZWdpc3Rlck51bWJlciAmPSAweGY7CisKKyAgICBpZiAocmVnaXN0ZXJOdW1i
ZXIgPiAxMikgeworICAgICAgICBhcHBlbmRTdHJpbmcoc19zcGVjaWFsUmVnaXN0ZXJOYW1lc1ty
ZWdpc3Rlck51bWJlciAtIDEzXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBidWZm
ZXJQcmludGYoInIldSIsIHJlZ2lzdGVyTnVtYmVyKTsKK30KKwordm9pZCBBUk12N0RPcGNvZGU6
OmFwcGVuZFJlZ2lzdGVyTGlzdCh1bnNpZ25lZCByZWdpc3RlcnMpCit7CisgICAgdW5zaWduZWQg
bnVtYmVyUHJpbnRlZCA9IDA7CisKKyAgICBhcHBlbmRDaGFyYWN0ZXIoJ3snKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgIGlmIChyZWdpc3RlcnMg
JiBpKSB7CisgICAgICAgICAgICBpZiAobnVtYmVyUHJpbnRlZCsrKQorICAgICAgICAgICAgICAg
IGFwcGVuZFNlcGFyYXRvcigpOworICAgICAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKGkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgYXBwZW5kQ2hhcmFjdGVyKCd9Jyk7Cit9CisKK3ZvaWQg
QVJNdjdET3Bjb2RlOjphcHBlbmRGUFJlZ2lzdGVyTmFtZShjaGFyIHJlZ2lzdGVyUHJlZml4LCB1
bnNpZ25lZCByZWdpc3Rlck51bWJlcikKK3sKKyAgICBidWZmZXJQcmludGYoIiVjJXUiLCByZWdp
c3RlclByZWZpeCwgcmVnaXN0ZXJOdW1iZXIpOworfQorCisvLyAxNiBCaXQgSW5zdHJ1Y3Rpb25z
CisKK3ZvaWQgQVJNdjdEMTZCaXRPcGNvZGU6OmluaXQoKQoreworICAgIE9wY29kZUdyb3VwKiBs
YXN0R3JvdXBzW09wY29kZUdyb3VwOjpvcGNvZGVUYWJsZVNpemVdOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IE9wY29kZUdyb3VwOjpvcGNvZGVUYWJsZVNpemU7IGkrKykgeworICAg
ICAgICBvcGNvZGVUYWJsZVtpXSA9IDA7CisgICAgICAgIGxhc3RHcm91cHNbaV0gPSAwOworICAg
IH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2Yob3Bjb2RlMTZCaXRHcm91
cExpc3QpIC8gc2l6ZW9mKE9wY29kZTE2R3JvdXBJbml0aWFsaXplcik7IGkrKykgeworICAgICAg
ICBPcGNvZGVHcm91cCogbmV3T3Bjb2RlR3JvdXAgPSBuZXcgT3Bjb2RlR3JvdXAob3Bjb2RlMTZC
aXRHcm91cExpc3RbaV0ubV9tYXNrLCBvcGNvZGUxNkJpdEdyb3VwTGlzdFtpXS5tX3BhdHRlcm4s
IG9wY29kZTE2Qml0R3JvdXBMaXN0W2ldLm1fZm9ybWF0KTsKKyAgICAgICAgdWludDE2X3Qgb3Bj
b2RlR3JvdXBOdW1iZXIgPSBvcGNvZGUxNkJpdEdyb3VwTGlzdFtpXS5tX29wY29kZUdyb3VwTnVt
YmVyOworCisgICAgICAgIGlmICghb3Bjb2RlVGFibGVbb3Bjb2RlR3JvdXBOdW1iZXJdKQorICAg
ICAgICAgICAgb3Bjb2RlVGFibGVbb3Bjb2RlR3JvdXBOdW1iZXJdID0gbmV3T3Bjb2RlR3JvdXA7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxhc3RHcm91cHNbb3Bjb2RlR3JvdXBOdW1iZXJd
LT5zZXROZXh0KG5ld09wY29kZUdyb3VwKTsKKyAgICAgICAgbGFzdEdyb3Vwc1tvcGNvZGVHcm91
cE51bWJlcl0gPSBuZXdPcGNvZGVHcm91cDsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIEFSTXY3
RDE2Qml0T3Bjb2RlOjpkb0Rpc2Fzc2VtYmxlKCkKK3sKKyAgICBPcGNvZGVHcm91cCogb3BHcm91
cCA9IG9wY29kZVRhYmxlW29wY29kZUdyb3VwTnVtYmVyKG1fb3Bjb2RlKV07CisKKyAgICB3aGls
ZSAob3BHcm91cCkgeworICAgICAgICBpZiAob3BHcm91cC0+bWF0Y2hlcyhzdGF0aWNfY2FzdDx1
aW50MTZfdD4obV9vcGNvZGUpKSkKKyAgICAgICAgICAgIHJldHVybiBvcEdyb3VwLT5mb3JtYXQo
dGhpcyk7CisgICAgICAgIG9wR3JvdXAgPSBvcEdyb3VwLT5uZXh0KCk7CisgICAgfQorCisgICAg
cmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKK30KKworY29uc3QgY2hhciogQVJNdjdEMTZCaXRPcGNv
ZGU6OmRlZmF1bHRGb3JtYXQoKQoreworICAgIGJ1ZmZlclByaW50ZigiICAgLndvcmQgICUwNHgi
LCBtX29wY29kZSk7CisgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworfQorCitjb25zdCBjaGFy
KiBBUk12N0RPcGNvZGVBZGRSZWdpc3RlclQyOjpmb3JtYXQoKQoreworICAgIGFwcGVuZEluc3Ry
dWN0aW9uTmFtZSgiYWRkIik7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkbigpKTsKKyAgICBh
cHBlbmRTZXBhcmF0b3IoKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7CisKKyAgICBy
ZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUFkZFNQ
UGx1c0ltbWVkaWF0ZTo6Zm9ybWF0KCkKK3sKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoImFk
ZCIpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShyZCgpKTsKKyAgICBhcHBlbmRTZXBhcmF0b3Io
KTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUoUmVnU1ApOworICAgIGFwcGVuZFNlcGFyYXRvcigp
OworICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGltbWVkaWF0ZTgoKSk7CisKKyAgICByZXR1
cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29kZUFk
ZFN1YnRyYWN0OjpzX29wTmFtZXNbMl0gPSB7ICJhZGQiLCAic3ViIiB9OworCitjb25zdCBjaGFy
KiBBUk12N0RPcGNvZGVBZGRTdWJ0cmFjdFQxOjpmb3JtYXQoKQoreworICAgIGFwcGVuZEluc3Ry
dWN0aW9uTmFtZShvcE5hbWUoKSwgIWluSVRCbG9jaygpKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5h
bWUocmQoKSk7CisgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1l
KHJuKCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShy
bSgpKTsKKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworY29uc3QgY2hhciogQVJN
djdET3Bjb2RlQWRkU3VidHJhY3RJbW1lZGlhdGUzOjpmb3JtYXQoKQoreworICAgIGFwcGVuZElu
c3RydWN0aW9uTmFtZShvcE5hbWUoKSwgIWluSVRCbG9jaygpKTsKKyAgICBhcHBlbmRSZWdpc3Rl
ck5hbWUocmQoKSk7CisgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgYXBwZW5kUmVnaXN0ZXJO
YW1lKHJuKCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFVuc2lnbmVkSW1t
ZWRpYXRlKGltbWVkaWF0ZTMoKSk7CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisK
K2NvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUFkZFN1YnRyYWN0SW1tZWRpYXRlODo6Zm9ybWF0KCkK
K3sKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCksICFpbklUQmxvY2soKSk7Cisg
ICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkbigpKTsKKyAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAg
ICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShpbW1lZGlhdGU4KCkpOworCisgICAgcmV0dXJuIG1f
Zm9ybWF0QnVmZmVyOworfQorCitjb25zdCBjaGFyKiBBUk12N0RPcGNvZGVCcmFuY2hDb25kaXRp
b25hbFQxOjpmb3JtYXQoKQoreworICAgIGlmIChjb25kaXRpb24oKSA9PSAweGUpCisgICAgICAg
IHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7CisKKyAgICBpZiAoY29uZGl0aW9uKCkgPT0gMHhmKSB7
CisgICAgICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZSgic3ZjIik7CisgICAgICAgIGFwcGVuZFVu
c2lnbmVkSW1tZWRpYXRlKG9mZnNldCgpKTsKKworICAgICAgICByZXR1cm4gbV9mb3JtYXRCdWZm
ZXI7CisgICAgfQorCisgICAgYnVmZmVyUHJpbnRmKCIgICBiJS02LjZzIiwgY29uZGl0aW9uTmFt
ZShjb25kaXRpb24oKSkpOworICAgIGFwcGVuZFBDUmVsYXRpdmVPZmZzZXQoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ob2Zmc2V0KCkpICsgMik7CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9
CisKK2NvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUJyYW5jaEV4Y2hhbmdlVDE6OmZvcm1hdCgpCit7
CisgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKG9wTmFtZSgpKTsKKyAgICBhcHBlbmRSZWdpc3Rl
ck5hbWUocm0oKSk7CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNo
YXIqIEFSTXY3RE9wY29kZUJyYW5jaFQyOjpmb3JtYXQoKQoreworICAgIGFwcGVuZEluc3RydWN0
aW9uTmFtZSgiYiIpOworICAgIGFwcGVuZFBDUmVsYXRpdmVPZmZzZXQoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oaW1tZWRpYXRlMTEoKSkgKyAyKTsKKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsK
K30KKworY29uc3QgY2hhciogQVJNdjdET3Bjb2RlQ29tcGFyZUltbWVkaWF0ZVQxOjpmb3JtYXQo
KQoreworICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZSgiY21wIik7CisgICAgYXBwZW5kUmVnaXN0
ZXJOYW1lKHJuKCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFVuc2lnbmVk
SW1tZWRpYXRlKGltbWVkaWF0ZTgoKSk7CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9
CisKK2NvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUNvbXBhcmVSZWdpc3RlclQxOjpmb3JtYXQoKQor
eworICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZSgiY21wIik7CisgICAgYXBwZW5kUmVnaXN0ZXJO
YW1lKHJuKCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFt
ZShybSgpKTsKKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworY29uc3QgY2hhciog
QVJNdjdET3Bjb2RlQ29tcGFyZVJlZ2lzdGVyVDI6OmZvcm1hdCgpCit7CisgICAgYXBwZW5kSW5z
dHJ1Y3Rpb25OYW1lKCJjb21wYXJlIik7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOwor
ICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKKwor
ICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworY29uc3QgY2hhciogY29uc3QgQVJNdjdE
T3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWdpc3RlclQxOjpzX29wTmFtZXNbMTZdID0geworICAgICJh
bmQiLCAiZW9yIiwgImxzbCIsICJsc3IiLCAiYXNyIiwgImFkYyIsICJzYmMiLCAicm9yIiwgInRz
dCIsICJyc2IiLCAiY21wIiwgImNtbiIsICJvcnIiLCAibXVsIiwgImJpYyIsICJtdm4iCit9Owor
Citjb25zdCBjaGFyKiBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ2lzdGVyVDE6OmZvcm1h
dCgpCit7CisgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKG9wTmFtZSgpLCBpbklUQmxvY2soKSAm
JiAoIShvcCgpID09IDB4OCkgfHwgKG9wKCkgPT0gMHhhKSB8fCAob3AoKSA9PSAweGIpKSk7Cisg
ICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkbigpKTsKKyAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAg
ICBhcHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7CisgICAgaWYgKG9wKCkgPT0gMHg5KSAvLyByc2Ig
VDEKKyAgICAgICAgYXBwZW5kU3RyaW5nKCIsICMwIik7CisgICAgZWxzZSBpZiAob3AoKSA9PSAw
eGQpIHsgLy8gbXVsIFQxCisgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgICAgICBhcHBl
bmRSZWdpc3Rlck5hbWUocmRuKCkpOworICAgIH0KKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZl
cjsKK30KKworY29uc3QgY2hhciogQVJNdjdET3Bjb2RlR2VuZXJhdGVQQ1JlbGF0aXZlQWRkcmVz
czo6Zm9ybWF0KCkKK3sKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoImFkciIpOworICAgIGFw
cGVuZFJlZ2lzdGVyTmFtZShyZCgpKTsKKyAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICBhcHBl
bmRQQ1JlbGF0aXZlT2Zmc2V0KHN0YXRpY19jYXN0PGludDMyX3Q+KGltbWVkaWF0ZTgoKSkpOwor
CisgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworfQorCitjb25zdCBjaGFyKiBBUk12N0RPcGNv
ZGVMb2FkRnJvbUxpdGVyYWxQb29sOjpmb3JtYXQoKQoreworICAgIGFwcGVuZEluc3RydWN0aW9u
TmFtZSgibGRyIik7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkpOworICAgIGFwcGVuZFNl
cGFyYXRvcigpOworICAgIGFwcGVuZFBDUmVsYXRpdmVPZmZzZXQoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oaW1tZWRpYXRlOCgpKSk7CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2Nv
bnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlOjpz
X29wTmFtZXNbNl0gPSB7CisgICAgInN0ciIsICJsZHIiLCAic3RyYiIsICAibGRyYiIsICJzdHJo
IiwgImxkcmgiCit9OworCitjb25zdCBjaGFyKiBBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3Rl
ckltbWVkaWF0ZTo6Zm9ybWF0KCkKK3sKKyAgICBjb25zdCBjaGFyKiBpbnN0cnVjdGlvbk5hbWUg
PSBvcE5hbWUoKTsKKyAgICAKKyAgICBpZiAoIWluc3RydWN0aW9uTmFtZSkKKyAgICAgICAgcmV0
dXJuIGRlZmF1bHRGb3JtYXQoKTsKKyAgICAKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BO
YW1lKCkpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShydCgpKTsKKyAgICBhcHBlbmRTZXBhcmF0
b3IoKTsKKyAgICBhcHBlbmRDaGFyYWN0ZXIoJ1snKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUo
cm4oKSk7CisgICAgaWYgKGltbWVkaWF0ZTUoKSkgeworICAgICAgICBhcHBlbmRTZXBhcmF0b3Io
KTsKKyAgICAgICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRlNSgpIDw8IHNjYWxl
KCkpOworICAgIH0KKyAgICBhcHBlbmRDaGFyYWN0ZXIoJ10nKTsKKworICAgIHJldHVybiBtX2Zv
cm1hdEJ1ZmZlcjsKK30KKworY29uc3QgY2hhciogY29uc3QgQVJNdjdET3Bjb2RlTG9hZFN0b3Jl
UmVnaXN0ZXJPZmZzZXRUMTo6c19vcE5hbWVzWzhdID0geworICAgICJzdHIiLCAic3RyaCIsICJz
dHJiIiwgImxkcnNiIiwgImxkciIsICJsZHJoIiwgImxkcmIiLCAibGRyc2giCit9OworCitjb25z
dCBjaGFyKiBBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3Rlck9mZnNldFQxOjpmb3JtYXQoKQor
eworICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShvcE5hbWUoKSk7CisgICAgYXBwZW5kUmVnaXN0
ZXJOYW1lKHJ0KCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZENoYXJhY3Rl
cignWycpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKKyAgICBhcHBlbmRTZXBhcmF0
b3IoKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7CisgICAgYXBwZW5kQ2hhcmFjdGVy
KCddJyk7CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIEFS
TXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVyU1BSZWxhdGl2ZTo6Zm9ybWF0KCkKK3sKKyAgICBh
cHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCkpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShy
dCgpKTsKKyAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICBhcHBlbmRDaGFyYWN0ZXIoJ1snKTsK
KyAgICBhcHBlbmRSZWdpc3Rlck5hbWUoUmVnU1ApOworICAgIGlmIChpbW1lZGlhdGU4KCkpIHsK
KyAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRp
YXRlKGltbWVkaWF0ZTgoKSA8PCAyKTsKKyAgICB9CisgICAgYXBwZW5kQ2hhcmFjdGVyKCddJyk7
CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIEFSTXY3RE9w
Y29kZUxvZ2ljYWxJbW1lZGlhdGVUMTo6Zm9ybWF0KCkKK3sKKyAgICBpZiAoIW9wKCkgJiYgIWlt
bWVkaWF0ZTUoKSkgeworICAgICAgICAvLyBtb3YgVDIKKyAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rp
b25OYW1lKCJtb3ZzIik7CisgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShyZCgpKTsKKyAgICAg
ICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsK
KworICAgICAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7CisgICAgfQorCisgICAgYXBwZW5kSW5z
dHJ1Y3Rpb25OYW1lKG9wTmFtZSgpLCAhaW5JVEJsb2NrKCkpOworICAgIGFwcGVuZFJlZ2lzdGVy
TmFtZShyZCgpKTsKKyAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5h
bWUocm0oKSk7CisgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgYXBwZW5kVW5zaWduZWRJbW1l
ZGlhdGUoKG9wKCkgJiYgIWltbWVkaWF0ZTUoKSkgPyAzMiA6IGltbWVkaWF0ZTUoKSk7CisKKyAg
ICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIEFSTXY3RE9wY29kZU1p
c2NBZGRTdWJTUDo6Zm9ybWF0KCkKK3sKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1l
KCkpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShSZWdTUCk7CisgICAgYXBwZW5kU2VwYXJhdG9y
KCk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKFJlZ1NQKTsKKyAgICBhcHBlbmRTZXBhcmF0b3Io
KTsKKyAgICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShpbW1lZGlhdGU3KCkpOworCisgICAgcmV0
dXJuIG1fZm9ybWF0QnVmZmVyOworfQorCitjb25zdCBjaGFyKiBBUk12N0RPcGNvZGVNaXNjQnJl
YWtwb2ludFQxOjpmb3JtYXQoKQoreworICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZU5vSVRCbG9j
aygiYmtwdCIpOworICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGltbWVkaWF0ZTgoKSk7CisK
KyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIGNvbnN0IEFSTXY3
RE9wY29kZU1pc2NCeXRlSGFsZndvcmRPcHM6OnNfb3BOYW1lc1s4XSA9IHsKKyAgICAic3h0aCIs
ICJzeGIiLCAidXh0aCIsICJ1eHRiIiwgInJldiIsICJyZXYxNiIsICJyZXZzaCIKK307CisKK2Nv
bnN0IGNoYXIqIEFSTXY3RE9wY29kZU1pc2NCeXRlSGFsZndvcmRPcHM6OmZvcm1hdCgpCit7Cisg
ICAgY29uc3QgY2hhciogaW5zdHJ1Y3Rpb25OYW1lID0gb3BOYW1lKCk7CisKKyAgICBpZiAoIWlu
c3RydWN0aW9uTmFtZSkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKKworICAgIGFw
cGVuZEluc3RydWN0aW9uTmFtZShpbnN0cnVjdGlvbk5hbWUpOworICAgIGFwcGVuZFJlZ2lzdGVy
TmFtZShyZCgpKTsKKyAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5h
bWUocm0oKSk7CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIq
IEFSTXY3RE9wY29kZU1pc2NDb21wYXJlQW5kQnJhbmNoOjpmb3JtYXQoKQoreworICAgIGFwcGVu
ZEluc3RydWN0aW9uTmFtZShvcE5hbWUoKSk7CisgICAgYXBwZW5kUENSZWxhdGl2ZU9mZnNldChp
bW1lZGlhdGU2KCkgKyAyKTsKKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworY29u
c3QgY2hhciogY29uc3QgQVJNdjdET3Bjb2RlTWlzY0hpbnQxNjo6c19vcE5hbWVzWzE2XSA9IHsK
KyAgICAibm9wIiwgInlpZWxkIiwgIndmZSIsICJ3ZmkiLCAic2V2IgorfTsKKworY29uc3QgY2hh
ciogQVJNdjdET3Bjb2RlTWlzY0hpbnQxNjo6Zm9ybWF0KCkKK3sKKyAgICBpZiAob3BBKCkgPiA0
KQorICAgICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOworCisgICAgYXBwZW5kSW5zdHJ1Y3Rp
b25OYW1lKG9wTmFtZSgpKTsKKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworY29u
c3QgY2hhciogQVJNdjdET3Bjb2RlTWlzY0lmVGhlblQxOjpmb3JtYXQoKQoreworICAgIGNoYXIg
b3BOYW1lWzZdOworICAgIG9wTmFtZVswXSA9ICdpJzsKKyAgICBvcE5hbWVbMV0gPSAndCc7CisK
KyAgICB1bnNpZ25lZCBjb25kaXRpb24gPSBmaXJzdENvbmRpdGlvbigpOworICAgIHVuc2lnbmVk
IG1hc2tCaXRzID0gbWFzaygpOworICAgIHVuc2lnbmVkIGJsb2NrTGVuZ3RoID0gMDsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgaWYgKG1hc2tCaXRz
ICYgKDEgPDwgaSkpIHsKKyAgICAgICAgICAgIGJsb2NrTGVuZ3RoID0gNCAtIGk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXJ0SVRCbG9jayhibG9ja0xl
bmd0aCwgY29uZGl0aW9uKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBibG9ja0xl
bmd0aDsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGN1cnJNYXNrQml0ID0gKG1hc2tCaXRzID4+
ICg0LWkpKSAmIDB4MTsKKyAgICAgICAgb3BOYW1lW2kgKyAxXSA9IChjdXJyTWFza0JpdCBeIChj
b25kaXRpb24gJiAxKSkgPyAnZScgOiAndCc7CisgICAgICAgIHNhdmVJVENvbmRpdGlvbkF0KGks
IChjb25kaXRpb24gJiB+MSkgfCBjdXJyTWFza0JpdCk7CisgICAgfQorICAgIG9wTmFtZVtibG9j
a0xlbmd0aCArIDFdID0gJ1wwJzsKKworICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZU5vSVRCbG9j
ayhvcE5hbWUpOworICAgIGFwcGVuZFN0cmluZyhjb25kaXRpb25OYW1lKGNvbmRpdGlvbikpOwor
CisgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworfQorCitjb25zdCBjaGFyKiBBUk12N0RPcGNv
ZGVNaXNjUHVzaFBvcDo6Zm9ybWF0KCkKK3sKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BO
YW1lKCkpOworICAgIGFwcGVuZFJlZ2lzdGVyTGlzdChyZWdpc3Rlck1hc2soKSk7CisKKyAgICBy
ZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIEFSTXY3RE9wY29kZU1vdmVJ
bW1lZGlhdGVUMTo6Zm9ybWF0KCkKK3sKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoIm1vdiIs
ICFpbklUQmxvY2soKSk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkKCkpOworICAgIGFwcGVu
ZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGltbWVkaWF0ZTgoKSk7
CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIEFSTXY3RE9w
Y29kZU1vdmVSZWdpc3RlclQxOjpmb3JtYXQoKQoreworICAgIGFwcGVuZEluc3RydWN0aW9uTmFt
ZSgibW92Iik7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkKCkpOworICAgIGFwcGVuZFNlcGFy
YXRvcigpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKKworICAgIHJldHVybiBtX2Zv
cm1hdEJ1ZmZlcjsKK30KKworLy8gMzIgYml0IEludHJ1Y3Rpb25zCisKK3ZvaWQgQVJNdjdEMzJC
aXRPcGNvZGU6OmluaXQoKQoreworICAgIE9wY29kZUdyb3VwKiBsYXN0R3JvdXBzW09wY29kZUdy
b3VwOjpvcGNvZGVUYWJsZVNpemVdOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE9w
Y29kZUdyb3VwOjpvcGNvZGVUYWJsZVNpemU7IGkrKykgeworICAgICAgICBvcGNvZGVUYWJsZVtp
XSA9IDA7CisgICAgICAgIGxhc3RHcm91cHNbaV0gPSAwOworICAgIH0KKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplb2Yob3Bjb2RlMzJCaXRHcm91cExpc3QpIC8gc2l6ZW9mKE9w
Y29kZTMyR3JvdXBJbml0aWFsaXplcik7IGkrKykgeworICAgICAgICBPcGNvZGVHcm91cCogbmV3
T3Bjb2RlR3JvdXAgPSBuZXcgT3Bjb2RlR3JvdXAob3Bjb2RlMzJCaXRHcm91cExpc3RbaV0ubV9t
YXNrLCBvcGNvZGUzMkJpdEdyb3VwTGlzdFtpXS5tX3BhdHRlcm4sIG9wY29kZTMyQml0R3JvdXBM
aXN0W2ldLm1fZm9ybWF0KTsKKyAgICAgICAgdWludDE2X3Qgb3Bjb2RlR3JvdXBOdW1iZXIgPSBv
cGNvZGUzMkJpdEdyb3VwTGlzdFtpXS5tX29wY29kZUdyb3VwTnVtYmVyOworCisgICAgICAgIGlm
ICghb3Bjb2RlVGFibGVbb3Bjb2RlR3JvdXBOdW1iZXJdKQorICAgICAgICAgICAgb3Bjb2RlVGFi
bGVbb3Bjb2RlR3JvdXBOdW1iZXJdID0gbmV3T3Bjb2RlR3JvdXA7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGxhc3RHcm91cHNbb3Bjb2RlR3JvdXBOdW1iZXJdLT5zZXROZXh0KG5ld09wY29k
ZUdyb3VwKTsKKyAgICAgICAgbGFzdEdyb3Vwc1tvcGNvZGVHcm91cE51bWJlcl0gPSBuZXdPcGNv
ZGVHcm91cDsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIEFSTXY3RDMyQml0T3Bjb2RlOjpkb0Rp
c2Fzc2VtYmxlKCkKK3sKKyAgICBPcGNvZGVHcm91cCogb3BHcm91cCA9IG9wY29kZVRhYmxlW29w
Y29kZUdyb3VwTnVtYmVyKG1fb3Bjb2RlKV07CisKKyAgICB3aGlsZSAob3BHcm91cCkgeworICAg
ICAgICBpZiAob3BHcm91cC0+bWF0Y2hlcyhtX29wY29kZSkpCisgICAgICAgICAgICByZXR1cm4g
b3BHcm91cC0+Zm9ybWF0KHRoaXMpOworICAgICAgICBvcEdyb3VwID0gb3BHcm91cC0+bmV4dCgp
OworICAgIH0KKworICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7Cit9CisKK2NvbnN0IGNoYXIq
IEFSTXY3RDMyQml0T3Bjb2RlOjpkZWZhdWx0Rm9ybWF0KCkKK3sKKyAgICBidWZmZXJQcmludGYo
IiAgIC5sb25nICAlMDh4IiwgbV9vcGNvZGUpOworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsK
K30KKworY29uc3QgY2hhciogQVJNdjdET3Bjb2RlQ29uZGl0aW9uYWxCcmFuY2hUMzo6Zm9ybWF0
KCkKK3sKKyAgICBpZiAoY29uZGl0aW9uKCkgPCAweGUpCisgICAgICAgIGJ1ZmZlclByaW50Zigi
ICAgYiUtNi42cyIsIGNvbmRpdGlvbk5hbWUoY29uZGl0aW9uKCkpKTsKKyAgICBlbHNlCisgICAg
ICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZSgiYiIpOworICAgIGFwcGVuZFBDUmVsYXRpdmVPZmZz
ZXQob2Zmc2V0KCkgKyAyKTsKKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworY29u
c3QgY2hhciogQVJNdjdET3Bjb2RlQnJhbmNoT3JCcmFuY2hMaW5rOjpmb3JtYXQoKQoreworICAg
IGFwcGVuZEluc3RydWN0aW9uTmFtZShpc0JMKCkgPyAiYmwiIDogImIiKTsKKyAgICBhcHBlbmRQ
Q1JlbGF0aXZlT2Zmc2V0KG9mZnNldCgpICsgMik7CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZm
ZXI7Cit9CisKK2NvbnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nTG9n
aWNhbEFuZFJpdGhtZXRpYzo6c19vcE5hbWVzWzE2XSA9IHsKKyAgICAiYW5kIiwgImJpYyIsICJv
cnIiLCAib3JuIiwgImVvciIsIDAsICJwa2giLCAwLCAiYWRkIiwgMCwgImFkYyIsICJzYmMiLCAw
LCAic3ViIiwgInJzYiIsIDAKK307CisKK3ZvaWQgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdN
b2RpZmllZEltbWVkaWF0ZTo6YXBwZW5kTW9kaWZpZWRJbW1lZGlhdGUodW5zaWduZWQgaW1tZWRp
YXRlMTIpCit7CisgICAgaWYgKCEoaW1tZWRpYXRlMTIgJiAweGMwMCkpIHsKKyAgICAgICAgdW5z
aWduZWQgaW1tZWRpYXRlID0gMDsKKyAgICAgICAgdW5zaWduZWQgbG93ZXI4Qml0cyA9IGltbWVk
aWF0ZTEyICYgMHhmZjsKKworICAgICAgICBzd2l0Y2goKGltbWVkaWF0ZTEyID4+IDgpICYgMykg
eworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBpbW1lZGlhdGUgPSBsb3dlcjhCaXRzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGltbWVkaWF0
ZSA9IChsb3dlcjhCaXRzIDw8IDE2KSB8IGxvd2VyOEJpdHM7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaW1tZWRpYXRlID0gKGxvd2VyOEJpdHMgPDwg
MjQpIHwgKGxvd2VyOEJpdHMgPDwgOCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAzOgorICAgICAgICAgICAgaW1tZWRpYXRlID0gKGxvd2VyOEJpdHMgPDwgMjQpIHwgKGxvd2Vy
OEJpdHMgPDwgMTYpIHwgKGxvd2VyOEJpdHMgPDwgOCkgfCBsb3dlcjhCaXRzOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1t
ZWRpYXRlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIGltbWVkaWF0
ZTggPSAweDgwIHwgKGltbWVkaWF0ZTEyICYgMHg3Zik7CisgICAgdW5zaWduZWQgc2hpZnRBbW91
bnQgPSAzMiAtICgoaW1tZWRpYXRlMTIgPj4gNykgJiAweDFmKTsKKworICAgIGFwcGVuZFVuc2ln
bmVkSW1tZWRpYXRlKGltbWVkaWF0ZTggPDwgc2hpZnRBbW91bnQpOworfQorCitjb25zdCBjaGFy
KiBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ01vZGlmaWVkSW1tZWRpYXRlOjpmb3JtYXQoKQor
eworICAgIGlmICgob3AoKSA9PSAweDUpIHx8IChvcCgpID09IDB4NikgfHwgKG9wKCkgPT0gMHg3
KSB8fCAob3AoKSA9PSAweDkpIHx8IChvcCgpID09IDB4YykgfHwgKG9wKCkgPT0gMHhmKSkKKyAg
ICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKKworICAgIGNvbnN0IGNoYXIqIGluc3RydWN0
aW9uTmFtZSA9IG9wTmFtZSgpOworCisgICAgaWYgKHJuKCkgPT0gMTUpIHsKKyAgICAgICAgaWYg
KG9wKCkgPT0gMikgeworICAgICAgICAgICAgLy8gTU9WIFQyCisgICAgICAgICAgICBpbnN0cnVj
dGlvbk5hbWUgPSBzQml0KCkgPyAibW92cyIgOiAibW92IjsKKyAgICAgICAgICAgIGFwcGVuZElu
c3RydWN0aW9uTmFtZShpbnN0cnVjdGlvbk5hbWUpOworICAgICAgICAgICAgYXBwZW5kUmVnaXN0
ZXJOYW1lKHJkKCkpOworICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgICAg
ICBhcHBlbmRNb2RpZmllZEltbWVkaWF0ZShpbW1lZGlhdGUxMigpKTsKKworICAgICAgICAgICAg
cmV0dXJuIG1fZm9ybWF0QnVmZmVyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wKCkgPT0g
MykgeworICAgICAgICAgICAgLy8gTVZOIFQxCisgICAgICAgICAgICBpbnN0cnVjdGlvbk5hbWUg
PSBzQml0KCkgPyAibXZucyIgOiAibXZuIjsKKyAgICAgICAgICAgIGFwcGVuZEluc3RydWN0aW9u
TmFtZShpbnN0cnVjdGlvbk5hbWUpOworICAgICAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJk
KCkpOworICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgICAgICBhcHBlbmRN
b2RpZmllZEltbWVkaWF0ZShpbW1lZGlhdGUxMigpKTsKKworICAgICAgICAgICAgcmV0dXJuIG1f
Zm9ybWF0QnVmZmVyOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJkKCkgPT0gMTUpIHsK
KyAgICAgICAgaWYgKHNCaXQoKSkgeworICAgICAgICAgICAgYm9vbCB0ZXN0T3JDbXBJbnN0cnVj
dGlvbiA9IGZhbHNlOworCisgICAgICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgMHgwOgorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9ICJ0c3QiOworICAg
ICAgICAgICAgICAgIHRlc3RPckNtcEluc3RydWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg0OgorICAgICAgICAgICAgICAgIGluc3RydWN0
aW9uTmFtZSA9ICJ0ZXEiOworICAgICAgICAgICAgICAgIHRlc3RPckNtcEluc3RydWN0aW9uID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg4OgorICAg
ICAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9ICJjbW4iOworICAgICAgICAgICAgICAgIHRl
c3RPckNtcEluc3RydWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgMHhkOgorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9ICJjbXAi
OworICAgICAgICAgICAgICAgIHRlc3RPckNtcEluc3RydWN0aW9uID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRlc3RPckNt
cEluc3RydWN0aW9uKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKGlu
c3RydWN0aW9uTmFtZSk7CisgICAgICAgICAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkp
OworICAgICAgICAgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgICAgICAgICAgICAgIGFw
cGVuZE1vZGlmaWVkSW1tZWRpYXRlKGltbWVkaWF0ZTEyKCkpOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fZm9ybWF0QnVmZmVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7CisgICAgYXBwZW5k
UmVnaXN0ZXJOYW1lKHJkKCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFJl
Z2lzdGVyTmFtZShybigpKTsKKyAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICBhcHBlbmRNb2Rp
ZmllZEltbWVkaWF0ZShpbW1lZGlhdGUxMigpKTsKKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZl
cjsKK30KKwordm9pZCBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1NoaWZ0ZWRSZWc6OmFwcGVu
ZEltbVNoaWZ0KHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGltbWVkaWF0ZSkKK3sKKyAgICBpZiAo
dHlwZSAmJiBpbW1lZGlhdGUpIHsKKyAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisKKyAgICAg
ICAgaWYgKCFpbW1lZGlhdGUpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIGltbWVk
aWF0ZSA9IDMyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAzOgor
ICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZygicnJ4IDEiKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmRTaGlmdFR5
cGUodHlwZSk7CisgICAgICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGltbWVkaWF0ZSk7Cisg
ICAgfQorfQorCitjb25zdCBjaGFyKiBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1NoaWZ0ZWRS
ZWc6OmZvcm1hdCgpCit7CisgICAgaWYgKChvcCgpID09IDB4NSkgfHwgKG9wKCkgPT0gMHg3KSB8
fCAob3AoKSA9PSAweDkpIHx8IChvcCgpID09IDB4YykgfHwgKG9wKCkgPT0gMHhmKSkKKyAgICAg
ICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKKworICAgIGlmIChvcCgpID09IDYpIHsKKyAgICAg
ICAgLy8gcGtoYnQgb3IgcGtodGIKKyAgICAgICAgaWYgKHNCaXQoKSB8fCB0Qml0KCkpCisgICAg
ICAgICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOworCisgICAgICAgIGlmICh0YkJpdCgpKQor
ICAgICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKCJwa2h0YiIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoInBraGJ0Iik7CisgICAgICAgIGFw
cGVuZFJlZ2lzdGVyTmFtZShyZCgpKTsKKyAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAg
ICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKKyAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7
CisgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKKyAgICAgICAgYXBwZW5kSW1tU2hp
ZnQodGJCaXQoKSA8PCAxLCBpbW1lZGlhdGU1KCkpOworCisgICAgICAgIHJldHVybiBtX2Zvcm1h
dEJ1ZmZlcjsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBpbnN0cnVjdGlvbk5hbWUgPSBvcE5h
bWUoKTsKKworICAgIGlmIChybigpID09IDE1KSB7CisgICAgICAgIGlmIChvcCgpID09IDIpIHsK
KyAgICAgICAgICAgIGlmICghdHlwZSgpICYmICFpbW1lZGlhdGU1KCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBNT1YgVDMKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbk5hbWUgPSBzQml0KCkg
PyAibW92cyIgOiAibW92IjsKKyAgICAgICAgICAgICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUo
aW5zdHJ1Y3Rpb25OYW1lKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmQo
KSk7CisgICAgICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgICAgICAgICAg
YXBwZW5kUmVnaXN0ZXJOYW1lKHJtKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZm9y
bWF0QnVmZmVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZSgpID09IDMg
JiYgIWltbWVkaWF0ZTUoKSkgeworICAgICAgICAgICAgICAgIC8vIFJSWCBUMQorICAgICAgICAg
ICAgICAgIGluc3RydWN0aW9uTmFtZSA9IHNCaXQoKSA/ICJycngiIDogInJyeCI7CisgICAgICAg
ICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkKCkpOworICAgICAgICAgICAgICAgIGFwcGVu
ZFNlcGFyYXRvcigpOworICAgICAgICAgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsK
KworICAgICAgICAgICAgICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gTG9naWNhbAorICAgICAgICAgICAgaWYgKHNCaXQoKSkKKyAgICAg
ICAgICAgICAgICBidWZmZXJQcmludGYoIiVzcyAiLCBzaGlmdE5hbWUodHlwZSgpKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKHNoaWZ0
TmFtZSh0eXBlKCkpKTsKKyAgICAgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShyZCgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgICAgICAgICAgYXBwZW5kUmVnaXN0ZXJO
YW1lKHJtKCkpOworICAgICAgICAgICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRl
NSgpKTsKKworICAgICAgICAgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG9wKCkgPT0gMykgeworICAgICAgICAgICAgLy8gTVZOIFQyCisgICAgICAg
ICAgICBpbnN0cnVjdGlvbk5hbWUgPSBzQml0KCkgPyAibXZucyIgOiAibXZuIjsKKyAgICAgICAg
ICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShpbnN0cnVjdGlvbk5hbWUpOworICAgICAgICAgICAg
YXBwZW5kUmVnaXN0ZXJOYW1lKHJkKCkpOworICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7
CisgICAgICAgICAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7CisgICAgICAgICAgICBhcHBl
bmRJbW1TaGlmdCh0eXBlKCksIGltbWVkaWF0ZTUoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBt
X2Zvcm1hdEJ1ZmZlcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZCgpID09IDE1KSB7
CisgICAgICAgIGlmIChzQml0KCkpIHsKKyAgICAgICAgICAgIGJvb2wgdGVzdE9yQ21wSW5zdHJ1
Y3Rpb24gPSBmYWxzZTsKKworICAgICAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgICAg
ICBjYXNlIDB4MDoKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbk5hbWUgPSAidHN0IjsKKyAg
ICAgICAgICAgICAgICB0ZXN0T3JDbXBJbnN0cnVjdGlvbiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4NDoKKyAgICAgICAgICAgICAgICBpbnN0cnVj
dGlvbk5hbWUgPSAidGVxIjsKKyAgICAgICAgICAgICAgICB0ZXN0T3JDbXBJbnN0cnVjdGlvbiA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4ODoKKyAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbk5hbWUgPSAiY21uIjsKKyAgICAgICAgICAgICAgICB0
ZXN0T3JDbXBJbnN0cnVjdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIDB4ZDoKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbk5hbWUgPSAiY21w
IjsKKyAgICAgICAgICAgICAgICB0ZXN0T3JDbXBJbnN0cnVjdGlvbiA9IHRydWU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXN0T3JD
bXBJbnN0cnVjdGlvbikgeworICAgICAgICAgICAgICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShp
bnN0cnVjdGlvbk5hbWUpOworICAgICAgICAgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigp
KTsKKyAgICAgICAgICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICAgICAgICAgICAgICBh
cHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSW1tU2hpZnQo
dHlwZSgpLCBpbW1lZGlhdGU1KCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZm9ybWF0
QnVmZmVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXBwZW5kSW5z
dHJ1Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJk
KCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigp
KTsKKyAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7
CisgICAgYXBwZW5kSW1tU2hpZnQodHlwZSgpLCBpbW1lZGlhdGU1KCkpOworCisgICAgcmV0dXJu
IG1fZm9ybWF0QnVmZmVyOworfQorCitjb25zdCBjaGFyKiBBUk12N0RPcGNvZGVGUFRyYW5zZmVy
Ojpmb3JtYXQoKQoreworICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZSgidm1vdiIpOworCisgICAg
aWYgKG9wTCgpKSB7CisgICAgICAgIGFwcGVuZEZQUmVnaXN0ZXIoKTsKKyAgICAgICAgYXBwZW5k
U2VwYXJhdG9yKCk7CisgICAgfQorCisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkpOworCisg
ICAgaWYgKCFvcEwoKSkgeworICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICAgICAgYXBw
ZW5kRlBSZWdpc3RlcigpOworICAgIH0KKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30K
Kwordm9pZCBBUk12N0RPcGNvZGVGUFRyYW5zZmVyOjphcHBlbmRGUFJlZ2lzdGVyKCkKK3sKKyAg
ICBpZiAob3BDKCkpIHsKKyAgICAgICAgYXBwZW5kRlBSZWdpc3Rlck5hbWUoJ2QnLCB2ZCgpKTsK
KyAgICAgICAgYnVmZmVyUHJpbnRmKCJbJXVdIiwgb3BIKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBhcHBlbmRGUFJlZ2lzdGVyTmFtZSgncycsIHZuKCkpOworfQorCitjb25zdCBjaGFyKiBBUk12
N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ1NoaWZ0Ojpmb3JtYXQoKQoreworICAgIGFwcGVuZElu
c3RydWN0aW9uTmFtZShvcE5hbWUoKSk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkKCkpOwor
ICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKKyAg
ICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7CisKKyAg
ICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9w
Y29kZURhdGFQcm9jZXNzaW5nUmVnRXh0ZW5kOjpzX29wRXh0ZW5kTmFtZXNbOF0gPSB7CisgICAg
InN4dGgiLCAidXh0aCIsICJzeHRiMTYiLCAidXh0YjE2IiwgInN4dGIiLCAidXh0YiIKK307CisK
K2NvbnN0IGNoYXIqIGNvbnN0IEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnRXh0ZW5kOjpz
X29wRXh0ZW5kQW5kQWRkTmFtZXNbOF0gPSB7CisgICAgInN4dGFoIiwgInV4dGFoIiwgInN4dGFi
MTYiLCAidXh0YWIxNiIsICJzeHRhYiIsICJ1eHRhYiIKK307CisKK2NvbnN0IGNoYXIqIEFSTXY3
RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnRXh0ZW5kOjpmb3JtYXQoKQoreworICAgIGNvbnN0IGNo
YXIqIGluc3RydWN0aW9uTmFtZTsKKworICAgIGlmIChybigpID09IDB4ZikKKyAgICAgICAgaW5z
dHJ1Y3Rpb25OYW1lID0gb3BFeHRlbmROYW1lKCk7CisgICAgZWxzZQorICAgICAgICBpbnN0cnVj
dGlvbk5hbWUgPSBvcEV4dGVuZEFuZEFkZE5hbWUoKTsKKworICAgIGlmICghaW5zdHJ1Y3Rpb25O
YW1lKQorICAgICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOworCisgICAgYXBwZW5kSW5zdHJ1
Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkKCkp
OworICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsK
KyAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7CisK
KyAgICBpZiAocm90YXRlKCkpIHsKKyAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAg
IGFwcGVuZFN0cmluZygicm9yICIpOworICAgICAgICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShy
b3RhdGUoKSAqIDgpOworICAgIH0KKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKwor
Y29uc3QgY2hhciogY29uc3QgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWdQYXJhbGxlbDo6
c19vcE5hbWVzWzE2XSA9IHsKKyAgICAic2FkZDgiLCAic2FkZDE2IiwgInNhc3giLCAwLCAic3N1
YjgiLCAic3N1YjE2IiwgInNzYXgiLCAwLAorICAgICJxYWRkOCIsICJxYWRkMTYiLCAicWFzeCIs
IDAsICJxc3ViOCIsICJxc3ViMTYiLCAicXNheCIsIDAKK307CisKK2NvbnN0IGNoYXIqIEFSTXY3
RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnUGFyYWxsZWw6OmZvcm1hdCgpCit7CisgICAgY29uc3Qg
Y2hhciogaW5zdHJ1Y3Rpb25OYW1lOworCisgICAgaW5zdHJ1Y3Rpb25OYW1lID0gb3BOYW1lKCk7
CisKKyAgICBpZiAoIWluc3RydWN0aW9uTmFtZSkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3Jt
YXQoKTsKKworICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShpbnN0cnVjdGlvbk5hbWUpOworICAg
IGFwcGVuZFJlZ2lzdGVyTmFtZShyZCgpKTsKKyAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICBh
cHBlbmRSZWdpc3Rlck5hbWUocm4oKSk7CisgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgYXBw
ZW5kUmVnaXN0ZXJOYW1lKHJtKCkpOworCisgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworfQor
Citjb25zdCBjaGFyKiBjb25zdCBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ01pc2M6OnNf
b3BOYW1lc1sxNl0gPSB7CisgICAgInFhZGQiLCAicWRhZGQiLCAicXN1YiIsICJxZHN1YiIsICJy
ZXYiLCAicmV2MTYiLCAicmJpdCIsICJyZXZzaCIsCisgICAgInNlbCIsIDAsIDAsIDAsICJjbHoi
Cit9OworCitjb25zdCBjaGFyKiBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ01pc2M6OmZv
cm1hdCgpCit7CisgICAgY29uc3QgY2hhciogaW5zdHJ1Y3Rpb25OYW1lOworCisgICAgaW5zdHJ1
Y3Rpb25OYW1lID0gb3BOYW1lKCk7CisKKyAgICBpZiAoIWluc3RydWN0aW9uTmFtZSkKKyAgICAg
ICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKKworICAgIGlmICgob3AxKCkgJiAweDEpICYmIChy
bigpICE9IHJtKCkpKQorICAgICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOworCisgICAgYXBw
ZW5kSW5zdHJ1Y3Rpb25OYW1lKGluc3RydWN0aW9uTmFtZSk7CisgICAgYXBwZW5kUmVnaXN0ZXJO
YW1lKHJkKCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigpOworCisgICAgaWYgKG9wMSgpID09IDB4
MikgeyAvLyBzZWwKKyAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOworICAgICAgICBh
cHBlbmRTZXBhcmF0b3IoKTsKKyAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJtKCkpOworCisg
ICAgICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKKyAgICB9CisKKyAgICBhcHBlbmRSZWdpc3Rl
ck5hbWUocm0oKSk7CisKKyAgICBpZiAoIShvcDEoKSAmIDB4MSkpIHsKKyAgICAgICAgYXBwZW5k
U2VwYXJhdG9yKCk7CisgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIGNvbnN0IEFSTXY3
RE9wY29kZUhpbnQzMjo6c19vcE5hbWVzWzhdID0geworICAgICJub3AiLCAieWllbGQiLCAid2Zl
IiwgIndmaSIsICJzZXYiCit9OworCitjb25zdCBjaGFyKiBBUk12N0RPcGNvZGVIaW50MzI6OmZv
cm1hdCgpCit7CisgICAgaWYgKGlzRGVidWdIaW50KCkpIHsKKyAgICAgICAgYXBwZW5kSW5zdHJ1
Y3Rpb25OYW1lKCJkZWJ1ZyIpOworICAgICAgICBhcHBlbmRVbnNpZ25lZEltbWVkaWF0ZShkZWJ1
Z09wdGlvbigpKTsKKworICAgICAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7CisgICAgfQorCisg
ICAgaWYgKG9wKCkgPiAweDQpCisgICAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7CisKKyAg
ICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCkpOworCisgICAgcmV0dXJuIG1fZm9ybWF0
QnVmZmVyOworfQorCitjb25zdCBjaGFyKiBjb25zdCBBUk12N0RPcGNvZGVEYXRhTG9hZDo6c19v
cE5hbWVzWzhdID0geworICAgICJsZHJiIiwgImxkcmgiLCAibGRyIiwgMCwgImxkcnNiIiwgImxk
cnNoIgorfTsKKworY29uc3QgY2hhciogQVJNdjdET3Bjb2RlTG9hZFJlZ2lzdGVyOjpmb3JtYXQo
KQoreworICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShvcE5hbWUoKSk7CisgICAgYXBwZW5kUmVn
aXN0ZXJOYW1lKHJ0KCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZENoYXJh
Y3RlcignWycpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKKyAgICBhcHBlbmRTZXBh
cmF0b3IoKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUocm0oKSk7CisgICAgaWYgKGltbWVkaWF0
ZTIoKSkgeworICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICAgICAgYXBwZW5kVW5zaWdu
ZWRJbW1lZGlhdGUoaW1tZWRpYXRlMigpKTsKKyAgICB9CisgICAgYXBwZW5kQ2hhcmFjdGVyKCdd
Jyk7CisKKyAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIEFSTXY3
RE9wY29kZUxvYWRTaWduZWRJbW1lZGlhdGU6OmZvcm1hdCgpCit7CisgICAgYXBwZW5kSW5zdHJ1
Y3Rpb25OYW1lKG9wTmFtZSgpKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUocnQoKSk7CisgICAg
YXBwZW5kU2VwYXJhdG9yKCk7CisgICAgYXBwZW5kQ2hhcmFjdGVyKCdbJyk7CisgICAgYXBwZW5k
UmVnaXN0ZXJOYW1lKHJuKCkpOworICAgIGlmIChwQml0KCkpIHsKKyAgICAgICAgaWYgKHdCaXQo
KSB8fCBpbW1lZGlhdGU4KCkpIHsKKyAgICAgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAg
ICAgICAgICAgaWYgKHVCaXQoKSkKKyAgICAgICAgICAgICAgICBhcHBlbmRVbnNpZ25lZEltbWVk
aWF0ZShpbW1lZGlhdGU4KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFw
cGVuZFNpZ25lZEltbWVkaWF0ZSgwIC0gc3RhdGljX2Nhc3Q8aW50PihpbW1lZGlhdGU4KCkpKTsK
KyAgICAgICAgfQorICAgICAgICBhcHBlbmRDaGFyYWN0ZXIoJ10nKTsKKyAgICAgICAgaWYgKHdC
aXQoKSkKKyAgICAgICAgICAgIGFwcGVuZENoYXJhY3RlcignIScpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGFwcGVuZENoYXJhY3RlcignXScpOworICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsK
KyAgICAgICAgaWYgKHVCaXQoKSkKKyAgICAgICAgICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRl
KGltbWVkaWF0ZTgoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGVuZFNpZ25lZElt
bWVkaWF0ZSgwIC0gc3RhdGljX2Nhc3Q8aW50PihpbW1lZGlhdGU4KCkpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIEFSTXY3RE9wY29kZUxv
YWRVbnNpZ25lZEltbWVkaWF0ZTo6Zm9ybWF0KCkKK3sKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5h
bWUob3BOYW1lKCkpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShydCgpKTsKKyAgICBhcHBlbmRT
ZXBhcmF0b3IoKTsKKyAgICBhcHBlbmRDaGFyYWN0ZXIoJ1snKTsKKyAgICBhcHBlbmRSZWdpc3Rl
ck5hbWUocm4oKSk7CisgICAgaWYgKGltbWVkaWF0ZTEyKCkpIHsKKyAgICAgICAgYXBwZW5kU2Vw
YXJhdG9yKCk7CisgICAgICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGltbWVkaWF0ZTEyKCkp
OworICAgIH0KKyAgICBhcHBlbmRDaGFyYWN0ZXIoJ10nKTsKKworICAgIHJldHVybiBtX2Zvcm1h
dEJ1ZmZlcjsKK30KKworY29uc3QgY2hhciogY29uc3QgQVJNdjdET3Bjb2RlTG9uZ011bHRpcGxl
RGl2aWRlOjpzX29wTmFtZXNbOF0gPSB7CisgICAgInNtdWxsIiwgInNkaXYiLCAidW11bGwiLCAi
dWRpdiIsICJzbWxhbCIsICJzbWxzbGQiLCAidW1sYWwiLCAwCit9OworCitjb25zdCBjaGFyKiBj
b25zdCBBUk12N0RPcGNvZGVMb25nTXVsdGlwbGVEaXZpZGU6OnNfc21sYWxPcE5hbWVzWzRdID0g
eworICAgICJzbWxhbGJiIiwgInNtbGFsYnQiLCAic21sYWx0YiIsICJzbWxhbHR0IgorfTsKKwor
Y29uc3QgY2hhciogY29uc3QgQVJNdjdET3Bjb2RlTG9uZ011bHRpcGxlRGl2aWRlOjpzX3NtbGFs
ZE9wTmFtZXNbMl0gPSB7CisgICAgInNtbGFsZCIsICJzbWxhbGR4IgorfTsKKworY29uc3QgY2hh
ciogY29uc3QgQVJNdjdET3Bjb2RlTG9uZ011bHRpcGxlRGl2aWRlOjpzX3NtbHNsZE9wTmFtZXNb
Ml0gPSB7CisgICAgInNtbHNsZCIsICJzbWxzbGR4IgorfTsKKworY29uc3QgY2hhciogQVJNdjdE
T3Bjb2RlTG9uZ011bHRpcGxlRGl2aWRlOjpmb3JtYXQoKQoreworICAgIGNvbnN0IGNoYXIqIGlu
c3RydWN0aW9uTmFtZSA9IG9wTmFtZSgpOworCisgICAgc3dpdGNoIChvcDEoKSkgeworICAgIGNh
c2UgMHgwOgorICAgIGNhc2UgMHgyOgorICAgICAgICBpZiAob3AyKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZGVmYXVsdEZvcm1hdCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4MToKKyAg
ICBjYXNlIDB4MzoKKyAgICAgICAgaWYgKG9wMigpICE9IDB4ZikKKyAgICAgICAgICAgIHJldHVy
biBkZWZhdWx0Rm9ybWF0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHg0OgorICAgICAg
ICBpZiAoKG9wMigpICYgMHhjKSA9PSAweDgpCisgICAgICAgICAgICBpbnN0cnVjdGlvbk5hbWUg
PSBzbWxhbE9wTmFtZSgpOworICAgICAgICBlbHNlIGlmICgob3AyKCkgJiAweGUpID09IDB4YykK
KyAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9IHNtbGFsZE9wTmFtZSgpOworICAgICAgICBl
bHNlIGlmIChvcDIoKSkKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgMHg1OgorICAgICAgICBpZiAoKG9wMigpICYgMHhlKSA9PSAw
eGMpCisgICAgICAgICAgICBpbnN0cnVjdGlvbk5hbWUgPSBzbWxhbGRPcE5hbWUoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSAweDY6CisgICAgICAgIGlmIChvcDIoKSA9PSAweDUpCisgICAgICAgICAg
ICBpbnN0cnVjdGlvbk5hbWUgPSAidW1hYWwiOworICAgICAgICBlbHNlIGlmIChvcDIoKSkKKyAg
ICAgICAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgMHg3OgorICAgICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoaW5zdHJ1Y3Rpb25OYW1lKTsKKyAg
ICBpZiAoKG9wMSgpICYgMHg1KSA9PSAweDEpIHsgLy8gc2RpdiBhbmQgdWRpdgorICAgICAgICBp
ZiAocnQoKSAhPSAweGYpCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdCgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShyZExvKCkpOworICAgICAgICBh
cHBlbmRTZXBhcmF0b3IoKTsKKyAgICB9CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJkSGkoKSk7
CisgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOwor
ICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybSgpKTsKKwor
ICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworY29uc3QgY2hhciogY29uc3QgQVJNdjdE
T3Bjb2RlVW5tb2RpZmllZEltbWVkaWF0ZTo6c19vcE5hbWVzWzE2XSA9IHsKKyAgICAiYWRkdyIs
IDAsICJtb3Z3IiwgMCwgMCwgInN1YnciLCAibW92dCIsIDAsCisgICAgInNzYXQiLCAic3NhdDE2
IiwgInNiZngiLCAiYmZpIiwgInVzYXQiICwgInVzYXQxNiIsICJ1YmZ4IiwgMAorfTsKKworY29u
c3QgY2hhciogQVJNdjdET3Bjb2RlVW5tb2RpZmllZEltbWVkaWF0ZTo6Zm9ybWF0KCkKK3sKKyAg
ICBjb25zdCBjaGFyKiBpbnN0cnVjdGlvbk5hbWUgPSBvcE5hbWUoKTsKKworICAgIHN3aXRjaCAo
b3AoKSA+PiAxKSB7CisgICAgY2FzZSAweDA6CisgICAgY2FzZSAweDU6CisgICAgICAgIGlmIChy
bigpID09IDB4ZikKKyAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9ICJhZHIiOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIDB4OToKKyAgICAgICAgaWYgKGltbWVkaWF0ZTUoKSkKKyAgICAg
ICAgICAgIGluc3RydWN0aW9uTmFtZSA9ICJzc2F0IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAweGI6CisgICAgICAgIGlmIChybigpID09IDB4ZikKKyAgICAgICAgICAgIGluc3RydWN0aW9u
TmFtZSA9ICJiZmMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4ZDoKKyAgICAgICAgaWYg
KGltbWVkaWF0ZTUoKSkKKyAgICAgICAgICAgIGluc3RydWN0aW9uTmFtZSA9ICJ1c2F0IjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFpbnN0cnVjdGlvbk5hbWUpCisgICAgICAg
IHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7CisKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoaW5z
dHJ1Y3Rpb25OYW1lKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUocmQoKSk7CisgICAgYXBwZW5k
U2VwYXJhdG9yKCk7CisKKyAgICBpZiAoKG9wKCkgJiAweDE3KSA9PSAweDQpIHsgLy8gbW92dyBv
ciBtb3Z0CisgICAgICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGltbWVkaWF0ZTE2KCkpOwor
CisgICAgICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKKyAgICB9CisKKyAgICBpZiAoIW9wKCkg
fHwgKG9wKCkgPT0gMHhhKSkgeyAvLyBhZGR3LCBzdWJ3IGFuZCBhZHIKKyAgICAgICAgaWYgKHJu
KCkgPT0gMHhmKSB7CisgICAgICAgICAgICBpbnQzMl90IG9mZnNldDsKKworICAgICAgICAgICAg
aWYgKChvcCgpID09IDB4YSkgJiYgKHJuKCkgPT0gMHhmKSkKKyAgICAgICAgICAgICAgICBvZmZz
ZXQgPSAwIC0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oaW1tZWRpYXRlMTIoKSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oaW1t
ZWRpYXRlMTIoKSk7CisKKyAgICAgICAgICAgIGFwcGVuZFBDUmVsYXRpdmVPZmZzZXQob2Zmc2V0
KTsKKworICAgICAgICAgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKKworICAgICAgICBhcHBlbmRT
ZXBhcmF0b3IoKTsKKyAgICAgICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRlMTIo
KSk7CisKKyAgICAgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworICAgIH0KKworICAgIGlmICgo
KG9wKCkgJiAweDE1KSA9PSAweDEwKSB8fCAoKChvcCgpICYgMHgxNykgPT0gMHgxMikgJiYgaW1t
ZWRpYXRlNSgpKSkgeyAvLyBzc2F0LCB1c2F0LCBzc2F0MTYgJiB1c2F0MTYKKyAgICAgICAgYXBw
ZW5kU2VwYXJhdG9yKCk7CisgICAgICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGJpdE51bU9y
U2F0SW1tZWRpYXRlKCkgKyAxKTsKKyAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAg
IGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKKyAgICAgICAgaWYgKHNoQml0KCkgfHwgaW1tZWRp
YXRlNSgpKSB7CisgICAgICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICAgICAgICAgIGFw
cGVuZFNoaWZ0VHlwZShzaEJpdCgpIDw8IDEpOworICAgICAgICAgICAgYXBwZW5kVW5zaWduZWRJ
bW1lZGlhdGUoaW1tZWRpYXRlNSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2Zv
cm1hdEJ1ZmZlcjsKKyAgICB9CisKKyAgICBpZiAob3AoKSA9PSAweDE2KSB7IC8vIGJmaSBvciBi
ZmMKKyAgICAgICAgaW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihiaXROdW1PclNhdEltbWVk
aWF0ZSgpKSAtIHN0YXRpY19jYXN0PGludD4oaW1tZWRpYXRlNSgpKSArIDE7CisKKyAgICAgICAg
aWYgKHdpZHRoIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7CisKKyAg
ICAgICAgaWYgKHJuKCkgIT0gMHhmKSB7CisgICAgICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsK
KyAgICAgICAgICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigpKTsKKyAgICAgICAgfQorICAgICAg
ICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICAgICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1t
ZWRpYXRlNSgpKTsKKyAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgIGFwcGVuZFNp
Z25lZEltbWVkaWF0ZSh3aWR0aCk7CisKKyAgICAgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOwor
ICAgIH0KKworICAgIC8vIE11c3QgYmUgc2JmeCBvciB1YmZ4CisgICAgYXBwZW5kU2VwYXJhdG9y
KCk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJuKCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigp
OworICAgIGFwcGVuZFVuc2lnbmVkSW1tZWRpYXRlKGltbWVkaWF0ZTUoKSk7CisgICAgYXBwZW5k
U2VwYXJhdG9yKCk7CisgICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoYml0TnVtT3JTYXRJbW1l
ZGlhdGUoKSArIDEpOworCisgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworfQorCitjb25zdCBj
aGFyKiBjb25zdCBBUk12N0RPcGNvZGVEYXRhU3RvcmVTaW5nbGU6OnNfb3BOYW1lc1s0XSA9IHsK
KyAgICAic3RyYiIsICJzdHJoIiwgInN0ciIsIDAKK307CisKK2NvbnN0IGNoYXIqIEFSTXY3RE9w
Y29kZURhdGFQdXNoUG9wU2luZ2xlOjpmb3JtYXQoKQoreworICAgIGFwcGVuZEluc3RydWN0aW9u
TmFtZShvcE5hbWUoKSk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkpOworCisgICAgcmV0
dXJuIG1fZm9ybWF0QnVmZmVyOworfQorCitjb25zdCBjaGFyKiBBUk12N0RPcGNvZGVTdG9yZVNp
bmdsZUltbWVkaWF0ZTEyOjpmb3JtYXQoKQoreworICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShv
cE5hbWUoKSk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkpOworICAgIGFwcGVuZFNlcGFy
YXRvcigpOworICAgIGFwcGVuZENoYXJhY3RlcignWycpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFt
ZShybigpKTsKKyAgICBpZiAoaW1tZWRpYXRlMTIoKSkgeworICAgICAgICBhcHBlbmRTZXBhcmF0
b3IoKTsKKyAgICAgICAgYXBwZW5kVW5zaWduZWRJbW1lZGlhdGUoaW1tZWRpYXRlMTIoKSk7Cisg
ICAgfQorICAgIGFwcGVuZENoYXJhY3RlcignXScpOworCisgICAgcmV0dXJuIG1fZm9ybWF0QnVm
ZmVyOworfQorCitjb25zdCBjaGFyKiBBUk12N0RPcGNvZGVTdG9yZVNpbmdsZUltbWVkaWF0ZTg6
OmZvcm1hdCgpCit7CisgICAgaWYgKHBCaXQoKSAmJiB1Qml0KCkgJiYgIXdCaXQoKSkgLy8gUmVh
bGx5IHVuZGVjb2RlZCBzdHJ0CisgICAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0KCk7CisKKyAg
ICBpZiAoKHJuKCkgPT0gMHhmKSB8fCAoIXBCaXQoKSAmJiAhd0JpdCgpKSkKKyAgICAgICAgcmV0
dXJuIGRlZmF1bHRGb3JtYXQoKTsKKworICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShvcE5hbWUo
KSk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkpOworICAgIGFwcGVuZFNlcGFyYXRvcigp
OworICAgIGFwcGVuZENoYXJhY3RlcignWycpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShybigp
KTsKKworICAgIGlmICghcEJpdCgpKSB7CisgICAgICAgIGFwcGVuZENoYXJhY3RlcignXScpOwor
ICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICAgICAgYXBwZW5kU2lnbmVkSW1tZWRpYXRl
KHVCaXQoKSA/IHN0YXRpY19jYXN0PGludDMyX3Q+KGltbWVkaWF0ZTgoKSkgOiAoMCAtIHN0YXRp
Y19jYXN0PGludDMyX3Q+KGltbWVkaWF0ZTgoKSkpKTsKKworICAgICAgICByZXR1cm4gbV9mb3Jt
YXRCdWZmZXI7CisgICAgfQorCisgICAgaWYgKGltbWVkaWF0ZTgoKSkgeworICAgICAgICBhcHBl
bmRTZXBhcmF0b3IoKTsKKyAgICAgICAgYXBwZW5kU2lnbmVkSW1tZWRpYXRlKHVCaXQoKSA/IHN0
YXRpY19jYXN0PGludDMyX3Q+KGltbWVkaWF0ZTgoKSkgOiAoMCAtIHN0YXRpY19jYXN0PGludDMy
X3Q+KGltbWVkaWF0ZTgoKSkpKTsKKyAgICB9CisgICAgYXBwZW5kQ2hhcmFjdGVyKCddJyk7CisK
KyAgICBpZiAod0JpdCgpKQorICAgICAgICBhcHBlbmRDaGFyYWN0ZXIoJyEnKTsKKworICAgIHJl
dHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworY29uc3QgY2hhciogQVJNdjdET3Bjb2RlU3RvcmVT
aW5nbGVSZWdpc3Rlcjo6Zm9ybWF0KCkKK3sKKyAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BO
YW1lKCkpOworICAgIGFwcGVuZFJlZ2lzdGVyTmFtZShydCgpKTsKKyAgICBhcHBlbmRTZXBhcmF0
b3IoKTsKKyAgICBhcHBlbmRDaGFyYWN0ZXIoJ1snKTsKKyAgICBhcHBlbmRSZWdpc3Rlck5hbWUo
cm4oKSk7CisgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJt
KCkpOworICAgIGlmIChpbW1lZGlhdGUyKCkpIHsKKyAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7
CisgICAgICAgIGFwcGVuZFN0cmluZygibHNsICIpOworICAgICAgICBhcHBlbmRVbnNpZ25lZElt
bWVkaWF0ZShpbW1lZGlhdGUyKCkpOworICAgIH0KKyAgICBhcHBlbmRDaGFyYWN0ZXIoJ10nKTsK
KworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworY29uc3QgY2hhciogQVJNdjdET3Bj
b2RlVk1PVkRvdWJsZVByZWNpc2lvbjo6Zm9ybWF0KCkKK3sKKyAgICBhcHBlbmRJbnN0cnVjdGlv
bk5hbWUoInZtb3YiKTsKKyAgICBpZiAob3AoKSkgeworICAgICAgICBhcHBlbmRSZWdpc3Rlck5h
bWUocnQoKSk7CisgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgICAgICBhcHBlbmRSZWdp
c3Rlck5hbWUocnQyKCkpOworICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICB9CisKKyAg
ICBhcHBlbmRGUFJlZ2lzdGVyTmFtZSgnZCcsIHZtKCkpOworCisgICAgaWYgKCFvcCgpKSB7Cisg
ICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgICAgICBhcHBlbmRSZWdpc3Rlck5hbWUocnQo
KSk7CisgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOworICAgICAgICBhcHBlbmRSZWdpc3Rlck5h
bWUocnQyKCkpOworICAgIH0KKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworY29u
c3QgY2hhciogQVJNdjdET3Bjb2RlVk1PVlNpbmdsZVByZWNpc2lvbjo6Zm9ybWF0KCkKK3sKKyAg
ICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUoInZtb3YiKTsKKyAgICBpZiAob3AoKSkgeworICAgICAg
ICBhcHBlbmRSZWdpc3Rlck5hbWUocnQoKSk7CisgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwor
ICAgICAgICBhcHBlbmRSZWdpc3Rlck5hbWUocnQyKCkpOworICAgICAgICBhcHBlbmRTZXBhcmF0
b3IoKTsKKyAgICB9CisKKyAgICBhcHBlbmRGUFJlZ2lzdGVyTmFtZSgncycsIHZtKCkpOworICAg
IGFwcGVuZFNlcGFyYXRvcigpOworICAgIGFwcGVuZEZQUmVnaXN0ZXJOYW1lKCdzJywgKHZtKCkg
KyAxKSAlIDMyKTsKKworICAgIGlmICghb3AoKSkgeworICAgICAgICBhcHBlbmRTZXBhcmF0b3Io
KTsKKyAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkpOworICAgICAgICBhcHBlbmRTZXBh
cmF0b3IoKTsKKyAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0MigpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7Cit9CisKK2NvbnN0IGNoYXIqIEFSTXY3RE9wY29kZVZN
U1I6OmZvcm1hdCgpCit7CisgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKCJ2bXJzIik7CisgICAg
aWYgKG9wTCgpKSB7CisgICAgICAgIGlmIChydCgpID09IDB4ZikKKyAgICAgICAgICAgIGFwcGVu
ZFN0cmluZygiYXBzcl9uemN2Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGVuZFJl
Z2lzdGVyTmFtZShydCgpKTsKKyAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgfQorCisg
ICAgYXBwZW5kU3RyaW5nKCJmcHNjciIpOworCisgICAgaWYgKCFvcEwoKSkgeworICAgICAgICBh
cHBlbmRTZXBhcmF0b3IoKTsKKyAgICAgICAgYXBwZW5kUmVnaXN0ZXJOYW1lKHJ0KCkpOworICAg
IH0KKworICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkFSTXY3RGlzYXNzZW1ibGVyCisKKyNlbmRpZiAvLyAjaWYgVVNFKEFSTVY3X0RJU0FTU0VN
QkxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNdjcvQVJN
djdET3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9BUk12Ny9BUk12N0RPcGNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNdjcvQVJNdjdET3Bjb2RlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQVJNdjdET3Bjb2RlX2gKKyNkZWZpbmUgQVJNdjdET3Bjb2RlX2gKKwor
I2lmIFVTRShBUk1WN19ESVNBU1NFTUJMRVIpCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHN0ZGludC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEFSTXY3
RGlzYXNzZW1ibGVyIHsKKworY2xhc3MgQVJNdjdET3Bjb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgdm9pZCBpbml0KCk7CisKKyAgICBBUk12N0RPcGNvZGUoKQorICAgICAgICA6IG1fb3Bjb2Rl
KDApCisgICAgICAgICwgbV9idWZmZXJPZmZzZXQoMCkKKyAgICB7CisgICAgICAgIGluaXQoKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDQ7IGkrKykKKyAgICAgICAg
ICAgIG1faWZUaGVuQ29uZGl0aW9uc1tpXSA9IENvbmROb25lOworCisgICAgICAgIGVuZElUQmxv
Y2soKTsKKworICAgICAgICBtX2Zvcm1hdEJ1ZmZlclswXSA9ICdcMCc7CisgICAgfQorCisgICAg
Y29uc3QgY2hhciogZGlzYXNzZW1ibGUodWludDE2X3QqJiBjdXJyZW50UEMpOworCitwcm90ZWN0
ZWQ6CisgICAgY29uc3QgdW5zaWduZWQgUmVnU1AgPSAweGQ7CisgICAgY29uc3QgdW5zaWduZWQg
UmVnTFIgPSAweGU7CisgICAgY29uc3QgdW5zaWduZWQgUmVnUEMgPSAweGY7CisKKyAgICB2b2lk
IGZldGNoT3Bjb2RlKHVpbnQxNl90KiYpOworICAgIGJvb2wgaXMzMkJpdEluc3RydWN0aW9uKCkg
eyByZXR1cm4gKG1fb3Bjb2RlICYgMHhmZmZmZjgwMCkgPiAweGUwMDA7IH0KKyAgICBib29sIGlz
RlBJbnN0cnVjdGlvbigpIHsgcmV0dXJuIChtX29wY29kZSAmIDB4ZmMwMDBlMDApID09IDB4ZWMw
MDBhMDA7IH0KKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX2NvbmRpdGlvbk5hbWVz
WzE2XTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19zaGlmdE5hbWVzWzRdOworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX29wdGlvbk5hbWVbOF07CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHNfc3BlY2lhbFJlZ2lzdGVyTmFtZXNbM107CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uZGl0aW9uTmFtZSh1bnNpZ25lZCBjb25kaXRpb24pIHsgcmV0dXJuIHNf
Y29uZGl0aW9uTmFtZXNbY29uZGl0aW9uICYgMHhmXTsgfQorICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBzaGlmdE5hbWUodW5zaWduZWQgc2hpZnRWYWx1ZSkgeyByZXR1cm4gc19zaGlmdE5hbWVzW3No
aWZ0VmFsdWUgJiAweDNdOyB9CisKKyAgICBib29sIGluSVRCbG9jaygpIHsgcmV0dXJuIG1fSVRD
b25kaXRpb25JbmRleCA8IG1fSVRCbG9ja3NpemU7IH0KKyAgICBib29sIHN0YXJ0aW5nSVRCbG9j
aygpIHsgcmV0dXJuIG1fSVRDb25kaXRpb25JbmRleCA9PSBtX0lUQmxvY2tzaXplICsgMTsgfQor
CisgICAgdm9pZCBzdGFydElUQmxvY2sodW5zaWduZWQsIHVuc2lnbmVkKTsKKyAgICB2b2lkIHNh
dmVJVENvbmRpdGlvbkF0KHVuc2lnbmVkLCB1bnNpZ25lZCk7CisgICAgdm9pZCBlbmRJVEJsb2Nr
KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudElUQ29uZGl0aW9uID0gQ29uZE5vbmU7CisgICAg
ICAgIG1fSVRDb25kaXRpb25JbmRleCA9IDA7CisgICAgICAgIG1fSVRCbG9ja3NpemUgPSAwOwor
ICAgIH0KKworICAgIHZvaWQgYnVmZmVyUHJpbnRmKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBX
VEZfQVRUUklCVVRFX1BSSU5URigyLCAzKTsKKyAgICB2b2lkIGFwcGVuZEluc3RydWN0aW9uTmFt
ZShjb25zdCBjaGFyKiwgYm9vbCBhZGRTID0gZmFsc2UpOworCisgICAgdm9pZCBhcHBlbmRJbnN0
cnVjdGlvbk5hbWVOb0lUQmxvY2soY29uc3QgY2hhciogaW5zdHJ1Y3Rpb25OYW1lKQorICAgIHsK
KyAgICAgICAgYnVmZmVyUHJpbnRmKCIgICAlLTcuN3MiLCBpbnN0cnVjdGlvbk5hbWUpOworICAg
IH0KKworICAgIHZvaWQgYXBwZW5kUmVnaXN0ZXJOYW1lKHVuc2lnbmVkKTsKKyAgICB2b2lkIGFw
cGVuZFJlZ2lzdGVyTGlzdCh1bnNpZ25lZCk7CisgICAgdm9pZCBhcHBlbmRGUFJlZ2lzdGVyTmFt
ZShjaGFyLCB1bnNpZ25lZCk7CisKKyAgICB2b2lkIGFwcGVuZFNlcGFyYXRvcigpCisgICAgewor
ICAgICAgICBidWZmZXJQcmludGYoIiwgIik7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRDaGFy
YWN0ZXIoY29uc3QgY2hhciBjKQorICAgIHsKKyAgICAgICAgYnVmZmVyUHJpbnRmKCIlYyIsIGMp
OworICAgIH0KKworICAgIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKKyAg
ICB7CisgICAgICAgIGJ1ZmZlclByaW50ZigiJXMiLCBzdHJpbmcpOworICAgIH0KKworICAgIHZv
aWQgYXBwZW5kU2hpZnRUeXBlKHVuc2lnbmVkIHNoaWZ0VmFsdWUpCisgICAgeworICAgICAgICBi
dWZmZXJQcmludGYoIiVzICIsIHNoaWZ0TmFtZShzaGlmdFZhbHVlKSk7CisgICAgfQorCisgICAg
dm9pZCBhcHBlbmRTaWduZWRJbW1lZGlhdGUoaW50IGltbWVkaWF0ZSkKKyAgICB7CisgICAgICAg
IGJ1ZmZlclByaW50ZigiIyVkIiwgaW1tZWRpYXRlKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVu
ZFVuc2lnbmVkSW1tZWRpYXRlKHVuc2lnbmVkIGltbWVkaWF0ZSkKKyAgICB7CisgICAgICAgIGJ1
ZmZlclByaW50ZigiIyV1IiwgaW1tZWRpYXRlKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZFBD
UmVsYXRpdmVPZmZzZXQoaW50MzJfdCBpbW1lZGlhdGUpCisgICAgeworICAgICAgICBidWZmZXJQ
cmludGYoIjB4JXgiLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90PihtX2N1cnJlbnRQQyArIGlt
bWVkaWF0ZSkpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kU2hpZnRBbW91bnQodW5zaWduZWQg
YW1vdW50KQorICAgIHsKKyAgICAgICAgYnVmZmVyUHJpbnRmKCJsc2wgIyV1IiwgMTYgKiBhbW91
bnQpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBpbnQgYnVmZmVyU2l6ZSA9IDgxOworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIENvbmROb25lID0gMHhlOworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBNYXhJVEJsb2NrU2l6ZSA9IDQ7CisKKyAgICBjaGFyIG1fZm9ybWF0QnVm
ZmVyW2J1ZmZlclNpemVdOworICAgIHVuc2lnbmVkIGNoYXIgbV9pZlRoZW5Db25kaXRpb25zW01h
eElUQmxvY2tTaXplXTsKKyAgICB1aW50MTZfdCogbV9jdXJyZW50UEM7CisgICAgdWludDMyX3Qg
bV9vcGNvZGU7CisgICAgaW50IG1fYnVmZmVyT2Zmc2V0OworICAgIGludCBtX2N1cnJlbnRJVENv
bmRpdGlvbjsKKyAgICB1bnNpZ25lZCBtX0lUQ29uZGl0aW9uSW5kZXg7CisgICAgdW5zaWduZWQg
bV9JVEJsb2Nrc2l6ZTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBzX2luaXRpYWxpemVk
OworfTsKKworI2RlZmluZSBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KGtsYXNzLCB0aGlzT2JqKSBc
CisgICBzdGF0aWMgY29uc3QgY2hhciogZm9ybWF0KEFSTXY3RDE2Qml0T3Bjb2RlKiB0aGlzT2Jq
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PCBrbGFzcyAqPih0aGlzT2JqKS0+Zm9ybWF0KCk7
IH0KKworY2xhc3MgQVJNdjdEMTZCaXRPcGNvZGUgOiBwdWJsaWMgQVJNdjdET3Bjb2RlIHsKK3By
aXZhdGU6CisgICAgY2xhc3MgT3Bjb2RlR3JvdXAgeworICAgIHB1YmxpYzoKKyAgICAgICAgT3Bj
b2RlR3JvdXAodWludDE2X3Qgb3Bjb2RlTWFzaywgdWludDE2X3Qgb3Bjb2RlUGF0dGVybiwgY29u
c3QgY2hhciogKCpmb3JtYXQpKEFSTXY3RDE2Qml0T3Bjb2RlKikpCisgICAgICAgICAgICA6IG1f
b3Bjb2RlTWFzayhvcGNvZGVNYXNrKQorICAgICAgICAgICAgLCBtX29wY29kZVBhdHRlcm4ob3Bj
b2RlUGF0dGVybikKKyAgICAgICAgICAgICwgbV9mb3JtYXQoZm9ybWF0KQorICAgICAgICAgICAg
LCBtX25leHQoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXROZXh0
KE9wY29kZUdyb3VwKiBuZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBtX25leHQgPSBuZXh0
OworICAgICAgICB9CisKKyAgICAgICAgT3Bjb2RlR3JvdXAqIG5leHQoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9uZXh0OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBtYXRj
aGVzKHVpbnQxNl90IG9wY29kZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChvcGNv
ZGUgJiBtX29wY29kZU1hc2spID09IG1fb3Bjb2RlUGF0dGVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGNvbnN0IGNoYXIqIGZvcm1hdChBUk12N0QxNkJpdE9wY29kZSogdGhpc09iaikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZm9ybWF0KHRoaXNPYmopOworICAgICAgICB9CisK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBvcGNvZGVUYWJsZVNp
emUgPSAzMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG9wY29kZVRhYmxlTWFzayA9
IG9wY29kZVRhYmxlU2l6ZS0xOworCisgICAgICAgIC8vIHByaXZhdGU6CisgICAgICAgIHVpbnQx
Nl90IG1fb3Bjb2RlTWFzazsKKyAgICAgICAgdWludDE2X3QgbV9vcGNvZGVQYXR0ZXJuOworICAg
ICAgICBjb25zdCBjaGFyKiAoKm1fZm9ybWF0KShBUk12N0QxNkJpdE9wY29kZSopOworICAgICAg
ICBPcGNvZGVHcm91cCogbV9uZXh0OworICAgIH07CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9p
ZCBpbml0KCk7CisKKyAgICBjb25zdCBjaGFyKiBkZWZhdWx0Rm9ybWF0KCk7CisgICAgY29uc3Qg
Y2hhciogZG9EaXNhc3NlbWJsZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdW5zaWduZWQgcm0oKSB7
IHJldHVybiAobV9vcGNvZGUgPj4gMykgJiAweDc7IH0KKyAgICB1bnNpZ25lZCByZCgpIHsgcmV0
dXJuIG1fb3Bjb2RlICYgMHg3OyB9CisgICAgdW5zaWduZWQgb3Bjb2RlR3JvdXBOdW1iZXIodW5z
aWduZWQgb3Bjb2RlKSB7IHJldHVybiAob3Bjb2RlID4+IDExKSAmIE9wY29kZUdyb3VwOjpvcGNv
ZGVUYWJsZU1hc2s7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgT3Bjb2RlR3JvdXAqIG9wY29k
ZVRhYmxlW09wY29kZUdyb3VwOjpvcGNvZGVUYWJsZVNpemVdOworfTsKKworY2xhc3MgQVJNdjdE
T3Bjb2RlQWRkUmVnaXN0ZXJUMiA6IHB1YmxpYyBBUk12N0QxNkJpdE9wY29kZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZmYwMDsKKyAgICBzdGF0aWMg
Y29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHg0NDAwOworCisgICAgREVGSU5FX1NUQVRJQ19G
T1JNQVQxNihBUk12N0RPcGNvZGVBZGRSZWdpc3RlclQyLCB0aGlzT2JqKTsKKworcHJvdGVjdGVk
OgorICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworCisgICAgdW5zaWduZWQgcmRuKCkgeyByZXR1
cm4gKChtX29wY29kZSA+PiA0KSAmIDB4OCkgfCAobV9vcGNvZGUgJiAweDcpOyB9CisgICAgdW5z
aWduZWQgcm0oKSB7IHJldHVybiAoKG1fb3Bjb2RlID4+IDMpICYgMHhmKTsgfQorfTsKKworY2xh
c3MgQVJNdjdET3Bjb2RlQWRkU1BQbHVzSW1tZWRpYXRlIDogcHVibGljIEFSTXY3RDE2Qml0T3Bj
b2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmODAw
OworICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweGM4MDA7CisKKyAgICBE
RUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29kZUFkZFNQUGx1c0ltbWVkaWF0ZSwgdGhp
c09iaik7CisKK3Byb3RlY3RlZDoKKyAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKKworICAgIHVu
c2lnbmVkIHJkKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDgpICYgMHg3OyB9CisgICAgdW5zaWdu
ZWQgaW1tZWRpYXRlOCgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHgwZmY7IH0KK307CisKK2NsYXNz
IEFSTXY3RE9wY29kZUFkZFN1YnRyYWN0IDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsKK3By
b3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19vcE5hbWVzWzJdOworfTsK
KworY2xhc3MgQVJNdjdET3Bjb2RlQWRkU3VidHJhY3RUMSA6IHB1YmxpYyBBUk12N0RPcGNvZGVB
ZGRTdWJ0cmFjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9
IDB4ZmMwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHgxODAwOwor
CisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVBZGRTdWJ0cmFjdFQxLCB0
aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworCisgICAg
Y29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzW29wKCldOyB9CisKKyAgICB1
bnNpZ25lZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA5KSAmIDB4MTsgfQorICAgIHVuc2ln
bmVkIHJtKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDYpICYgMHg3OyB9CisgICAgdW5zaWduZWQg
cm4oKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMykgJiAweDc7IH0KK307CisKK2NsYXNzIEFSTXY3
RE9wY29kZUFkZFN1YnRyYWN0SW1tZWRpYXRlMyA6IHB1YmxpYyBBUk12N0RPcGNvZGVBZGRTdWJ0
cmFjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZmMw
MDsKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHgxYzAwOworCisgICAg
REVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVBZGRTdWJ0cmFjdEltbWVkaWF0ZTMs
IHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisKKyAg
ICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBzX29wTmFtZXNbb3AoKV07IH0KKworICAg
IHVuc2lnbmVkIG9wKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDkpICYgMHgxOyB9CisgICAgdW5z
aWduZWQgaW1tZWRpYXRlMygpIHsgcmV0dXJuIChtX29wY29kZSA+PiA2KSAmIDB4MzsgfQorICAg
IHVuc2lnbmVkIHJuKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDMpICYgMHg3OyB9Cit9OworCitj
bGFzcyBBUk12N0RPcGNvZGVBZGRTdWJ0cmFjdEltbWVkaWF0ZTggOiBwdWJsaWMgQVJNdjdET3Bj
b2RlQWRkU3VidHJhY3QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX21h
c2sgPSAweGYwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfcGF0dGVybiA9IDB4MzAw
MDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bjb2RlQWRkU3VidHJhY3RJ
bW1lZGlhdGU4LCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZvcm1h
dCgpOworCisgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzW29wKCld
OyB9CisKKyAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiAxMSkgJiAweDE7
IH0KKyAgICB1bnNpZ25lZCByZG4oKSB7IHJldHVybiAobV9vcGNvZGUgPj4gOCkgJiAweDc7IH0K
KyAgICB1bnNpZ25lZCBpbW1lZGlhdGU4KCkgeyByZXR1cm4gbV9vcGNvZGUgJiAweGZmOyB9Cit9
OworCitjbGFzcyBBUk12N0RPcGNvZGVCcmFuY2hDb25kaXRpb25hbFQxIDogcHVibGljIEFSTXY3
RDE2Qml0T3Bjb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNr
ID0gMHhmMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweGQwMDA7
CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29kZUJyYW5jaENvbmRpdGlv
bmFsVDEsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3QgY2hhciogZm9ybWF0KCk7
CisKKyAgICB1bnNpZ25lZCBjb25kaXRpb24oKSB7IHJldHVybiAobV9vcGNvZGUgPj4gOCkgJiAw
eGY7IH0KKyAgICBpbnQgb2Zmc2V0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihtX29wY29k
ZSAmIDB4ZmYpOyB9Cit9OworCitjbGFzcyBBUk12N0RPcGNvZGVCcmFuY2hFeGNoYW5nZVQxIDog
cHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWlu
dDE2X3Qgc19tYXNrID0gMHhmZjAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3BhdHRl
cm4gPSAweDQ3MDA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29kZUJy
YW5jaEV4Y2hhbmdlVDEsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3QgY2hhciog
Zm9ybWF0KCk7CisKKyAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiAobV9vcGNvZGUg
JiAweDgwKSA/ICJibHgiIDogImJ4IjsgfQorICAgIHVuc2lnbmVkIHJtKCkgeyByZXR1cm4gKCht
X29wY29kZSA+PiAzKSAmIDB4Zik7IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29kZUJyYW5jaFQy
IDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qg
dWludDE2X3Qgc19tYXNrID0gMHhmODAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3Bh
dHRlcm4gPSAweGUwMDA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29k
ZUJyYW5jaFQyLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZvcm1h
dCgpOworCisgICAgaW50IGltbWVkaWF0ZTExKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Piht
X29wY29kZSAmIDB4N2ZmKTsgfQorfTsKKworY2xhc3MgQVJNdjdET3Bjb2RlQ29tcGFyZUltbWVk
aWF0ZVQxIDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmODAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MTZf
dCBzX3BhdHRlcm4gPSAweDI4MDA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3
RE9wY29kZUNvbXBhcmVJbW1lZGlhdGVUMSwgdGhpc09iaik7CisKK3Byb3RlY3RlZDoKKyAgICBj
b25zdCBjaGFyKiBmb3JtYXQoKTsKKworICAgIHVuc2lnbmVkIHJuKCkgeyByZXR1cm4gKG1fb3Bj
b2RlID4+IDgpICYgMHgzOyB9CisgICAgdW5zaWduZWQgaW1tZWRpYXRlOCgpIHsgcmV0dXJuIG1f
b3Bjb2RlICYgMHhmZjsgfQorfTsKKworY2xhc3MgQVJNdjdET3Bjb2RlQ29tcGFyZVJlZ2lzdGVy
VDEgOiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNvZGUgeworcHVibGljOgorICAgIHN0YXRpYyBjb25z
dCB1aW50MTZfdCBzX21hc2sgPSAweGZmYzA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNf
cGF0dGVybiA9IDB4NDI4MDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bj
b2RlQ29tcGFyZVJlZ2lzdGVyVDEsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3Qg
Y2hhciogZm9ybWF0KCk7CisKKyAgICB1bnNpZ25lZCBybigpIHsgcmV0dXJuIG1fb3Bjb2RlICYg
MHg3OyB9Cit9OworCitjbGFzcyBBUk12N0RPcGNvZGVDb21wYXJlUmVnaXN0ZXJUMiA6IHB1Ymxp
YyBBUk12N0QxNkJpdE9wY29kZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90
IHNfbWFzayA9IDB4ZmYwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0g
MHg0NTAwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVDb21wYXJl
UmVnaXN0ZXJUMiwgdGhpc09iaik7CisKK3Byb3RlY3RlZDoKKyAgICBjb25zdCBjaGFyKiBmb3Jt
YXQoKTsKKworICAgIHVuc2lnbmVkIHJuKCkgeyByZXR1cm4gKChtX29wY29kZSA+PiA0KSAmIDB4
OCkgfCAobV9vcGNvZGUgJiAweDcpOyB9CisgICAgdW5zaWduZWQgcm0oKSB7IHJldHVybiAoKG1f
b3Bjb2RlID4+IDMpICYgMHhmKTsgfQorfTsKKworY2xhc3MgQVJNdjdET3Bjb2RlRGF0YVByb2Nl
c3NpbmdSZWdpc3RlclQxIDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfb3BOYW1lc1sxNl07CisKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmYzAwOworICAgIHN0YXRpYyBjb25z
dCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweDQwMDA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1B
VDE2KEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnaXN0ZXJUMSwgdGhpc09iaik7CisKK3By
b3RlY3RlZDoKKyAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKKworICAgIGNvbnN0IGNoYXIqIG9w
TmFtZSgpIHsgcmV0dXJuIHNfb3BOYW1lc1tvcCgpXTsgfQorCisgICAgdW5zaWduZWQgb3AoKSB7
IHJldHVybiAobV9vcGNvZGUgPj4gNikgJiAweGY7IH0KKworICAgIHVuc2lnbmVkIHJtKCkgeyBy
ZXR1cm4gKG1fb3Bjb2RlID4+IDMpICYgMHg3OyB9CisgICAgdW5zaWduZWQgcmRuKCkgeyByZXR1
cm4gbV9vcGNvZGUgJiAweDc7IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29kZUdlbmVyYXRlUENS
ZWxhdGl2ZUFkZHJlc3MgOiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNvZGUgeworcHVibGljOgorICAg
IHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX21hc2sgPSAweGY4MDA7CisgICAgc3RhdGljIGNvbnN0
IHVpbnQxNl90IHNfcGF0dGVybiA9IDB4YTAwMDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFU
MTYoQVJNdjdET3Bjb2RlR2VuZXJhdGVQQ1JlbGF0aXZlQWRkcmVzcywgdGhpc09iaik7CisKK3By
b3RlY3RlZDoKKyAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKKworICAgIHVuc2lnbmVkIHJkKCkg
eyByZXR1cm4gKG1fb3Bjb2RlID4+IDgpICYgMHg3OyB9CisgICAgdW5zaWduZWQgaW1tZWRpYXRl
OCgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHgwZmY7IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29k
ZUxvYWRGcm9tTGl0ZXJhbFBvb2wgOiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNvZGUgeworcHVibGlj
OgorICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX21hc2sgPSAweGY4MDA7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQxNl90IHNfcGF0dGVybiA9IDB4NDgwMDsKKworICAgIERFRklORV9TVEFUSUNf
Rk9STUFUMTYoQVJNdjdET3Bjb2RlTG9hZEZyb21MaXRlcmFsUG9vbCwgdGhpc09iaik7CisKK3By
b3RlY3RlZDoKKyAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKKworICAgIHVuc2lnbmVkIHJ0KCkg
eyByZXR1cm4gKG1fb3Bjb2RlID4+IDgpICYgMHg3OyB9CisgICAgdW5zaWduZWQgaW1tZWRpYXRl
OCgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHgwZmY7IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29k
ZUxvYWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlIDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsK
K3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfb3BOYW1lc1s2XTsKKwor
cHVibGljOgorICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworCitwcm90ZWN0ZWQ6CisgICAgY29u
c3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzW29wKCldOyB9CisKKyAgICB1bnNp
Z25lZCBvcCgpIHsgcmV0dXJuICgobV9vcGNvZGUgPj4gMTEpICYgMHgxZikgLSAweGM7IH0KKyAg
ICB1bnNpZ25lZCBpbW1lZGlhdGU1KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDYpICYgMHgwMWY7
IH0KKyAgICB1bnNpZ25lZCBybigpIHsgcmV0dXJuIChtX29wY29kZSA+PiAzKSAmIDB4NzsgfQor
ICAgIHVuc2lnbmVkIHJ0KCkgeyByZXR1cm4gbV9vcGNvZGUgJiAweDc7IH0KKyAgICB1bnNpZ25l
ZCBzY2FsZSgpIHsgcmV0dXJuIDIgLSAob3AoKSA+PiAxKTsgfQorfTsKKworY2xhc3MgQVJNdjdE
T3Bjb2RlTG9hZFN0b3JlUmVnaXN0ZXJJbW1lZGlhdGVXb3JkQW5kQnl0ZSA6IHB1YmxpYyBBUk12
N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlckltbWVkaWF0ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZTAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDE2
X3Qgc19wYXR0ZXJuID0gMHg2MDAwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12
N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlckltbWVkaWF0ZSwgdGhpc09iaik7Cit9OworCitjbGFz
cyBBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdpc3RlckltbWVkaWF0ZUhhbGZXb3JkIDogcHVibGlj
IEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmODAwOworICAgIHN0YXRpYyBjb25zdCB1
aW50MTZfdCBzX3BhdHRlcm4gPSAweDgwMDA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2
KEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVySW1tZWRpYXRlLCB0aGlzT2JqKTsKK307CisK
K2NsYXNzIEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVyT2Zmc2V0VDEgOiBwdWJsaWMgQVJN
djdEMTZCaXRPcGNvZGUgeworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
c19vcE5hbWVzWzhdOworCitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFz
ayA9IDB4ZjAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHg1MDAw
OworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVMb2FkU3RvcmVSZWdp
c3Rlck9mZnNldFQxLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZv
cm1hdCgpOworCisgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzW29w
QigpXTsgfQorCisgICAgdW5zaWduZWQgb3BCKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDkpICYg
MHg3OyB9CisgICAgdW5zaWduZWQgcm0oKSB7IHJldHVybiAobV9vcGNvZGUgPj4gNikgJiAweDc7
IH0KKyAgICB1bnNpZ25lZCBybigpIHsgcmV0dXJuIChtX29wY29kZSA+PiAzKSAmIDB4NzsgfQor
ICAgIHVuc2lnbmVkIHJ0KCkgeyByZXR1cm4gbV9vcGNvZGUgJiAweDc7IH0KK307CisKK2NsYXNz
IEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVyU1BSZWxhdGl2ZSA6IHB1YmxpYyBBUk12N0Qx
NkJpdE9wY29kZSB7Citwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX29w
TmFtZXNbOF07CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0g
MHhmMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweDkwMDA7CisK
KyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29kZUxvYWRTdG9yZVJlZ2lzdGVy
U1BSZWxhdGl2ZSwgdGhpc09iaik7CisKK3Byb3RlY3RlZDoKKyAgICBjb25zdCBjaGFyKiBmb3Jt
YXQoKTsKKworICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuIG9wKCkgPyAibGRyIiA6
ICJzdHIiOyB9CisKKyAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiAxMSkg
JiAweDE7IH0KKyAgICB1bnNpZ25lZCBydCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA4KSAmIDB4
NzsgfQorICAgIHVuc2lnbmVkIGltbWVkaWF0ZTgoKSB7IHJldHVybiBtX29wY29kZSAmIDB4ZmY7
IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29kZUxvZ2ljYWxJbW1lZGlhdGVUMSA6IHB1YmxpYyBB
Uk12N0QxNkJpdE9wY29kZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNf
bWFzayA9IDB4ZTAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHgw
MDAwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVMb2dpY2FsSW1t
ZWRpYXRlVDEsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3QgY2hhciogZm9ybWF0
KCk7CisKKyAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBzX3NoaWZ0TmFtZXNbb3Ao
KV07IH0KKworICAgIHVuc2lnbmVkIG9wKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDEyKSAmIDB4
MzsgfQorICAgIHVuc2lnbmVkIGltbWVkaWF0ZTUoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gNikg
JiAweDFmOyB9Cit9OworCitjbGFzcyBBUk12N0RPcGNvZGVNaXNjQWRkU3ViU1AgOiBwdWJsaWMg
QVJNdjdEMTZCaXRPcGNvZGUgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBz
X21hc2sgPSAweGZmMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfcGF0dGVybiA9IDB4
YjAwMDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJNdjdET3Bjb2RlTWlzY0FkZFN1
YlNQLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwor
CisgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gb3AoKSA/ICJzdWIiIDogImFkZCI7
IH0KKyAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA3KSAmIDB4MTsgfQor
ICAgIHVuc2lnbmVkIGltbWVkaWF0ZTcoKSB7IHJldHVybiBtX29wY29kZSAmIDB4N2Y7IH0KK307
CisKK2NsYXNzIEFSTXY3RE9wY29kZU1pc2NCeXRlSGFsZndvcmRPcHMgOiBwdWJsaWMgQVJNdjdE
MTZCaXRPcGNvZGUgeworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19v
cE5hbWVzWzhdOworCitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IHNfbWFzayA9
IDB4ZjcwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19wYXR0ZXJuID0gMHhiMjAwOwor
CisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12N0RPcGNvZGVNaXNjQnl0ZUhhbGZ3b3Jk
T3BzLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOwor
CisgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzW29wKCldOyB9Cisg
ICAgdW5zaWduZWQgb3AoKSB7IHJldHVybiAoKG1fb3Bjb2RlID4+IDkpICYgMHg0KSB8fCAoKG1f
b3Bjb2RlID4+IDYpICYgMHgzKTsgfQorfTsKKworY2xhc3MgQVJNdjdET3Bjb2RlTWlzY0JyZWFr
cG9pbnRUMSA6IHB1YmxpYyBBUk12N0QxNkJpdE9wY29kZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQxNl90IHNfbWFzayA9IDB4ZmYwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDE2
X3Qgc19wYXR0ZXJuID0gMHhiZTAwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQxNihBUk12
N0RPcGNvZGVNaXNjQnJlYWtwb2ludFQxLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNv
bnN0IGNoYXIqIGZvcm1hdCgpOworCisgICAgdW5zaWduZWQgaW1tZWRpYXRlOCgpIHsgcmV0dXJu
IG1fb3Bjb2RlICYgMHhmZjsgfQorfTsKKworY2xhc3MgQVJNdjdET3Bjb2RlTWlzY0NvbXBhcmVB
bmRCcmFuY2ggOiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNvZGUgeworcHVibGljOgorICAgIHN0YXRp
YyBjb25zdCB1aW50MTZfdCBzX21hc2sgPSAweGY1MDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQx
Nl90IHNfcGF0dGVybiA9IDB4YjEwMDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYoQVJN
djdET3Bjb2RlTWlzY0NvbXBhcmVBbmRCcmFuY2gsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6Cisg
ICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisKKyAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJl
dHVybiBvcCgpID8gImNibnoiIDogImNieiI7IH0KKyAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJu
IChtX29wY29kZSA+PiAxMSkgJiAweDE7IH0KKyAgICBpbnQzMl90IGltbWVkaWF0ZTYoKSB7IHJl
dHVybiAoKG1fb3Bjb2RlID4+IDQpICYgMHgyMCkgfCAoKG1fb3Bjb2RlID4+IDMpICYgMHgxZik7
IH0KKyAgICB1bnNpZ25lZCBybigpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHg3OyB9Cit9OworCitj
bGFzcyBBUk12N0RPcGNvZGVNaXNjSGludDE2IDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsK
K3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfb3BOYW1lc1sxNl07CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmZjBmOworICAg
IHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweGJmMDA7CisKKyAgICBERUZJTkVf
U1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29kZU1pc2NIaW50MTYsIHRoaXNPYmopOworCitwcm90
ZWN0ZWQ6CisgICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisKKyAgICBjb25zdCBjaGFyKiBvcE5h
bWUoKSB7IHJldHVybiBzX29wTmFtZXNbb3BBKCldOyB9CisgICAgdW5zaWduZWQgb3BBKCkgeyBy
ZXR1cm4gKG1fb3Bjb2RlID4+IDQpICYgMHhmOyB9Cit9OworCitjbGFzcyBBUk12N0RPcGNvZGVN
aXNjSWZUaGVuVDEgOiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNvZGUgeworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCB1aW50MTZfdCBzX21hc2sgPSAweGZmMDA7CisgICAgc3RhdGljIGNvbnN0IHVp
bnQxNl90IHNfcGF0dGVybiA9IDB4YmYwMDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFUMTYo
QVJNdjdET3Bjb2RlTWlzY0lmVGhlblQxLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNv
bnN0IGNoYXIqIGZvcm1hdCgpOworCisgICAgdW5zaWduZWQgZmlyc3RDb25kaXRpb24oKSB7IHJl
dHVybiAobV9vcGNvZGUgPj4gNCkgJiAweGY7IH0KKyAgICB1bnNpZ25lZCBtYXNrKCkgeyByZXR1
cm4gbV9vcGNvZGUgJiAweGY7IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29kZU1pc2NQdXNoUG9w
IDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qg
dWludDE2X3Qgc19tYXNrID0gMHhmNjAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX3Bh
dHRlcm4gPSAweGI0MDA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDE2KEFSTXY3RE9wY29k
ZU1pc2NQdXNoUG9wLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZv
cm1hdCgpOworCisgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gb3AoKSA/ICJwb3Ai
IDogInB1c2giOyB9CisgICAgdW5zaWduZWQgb3AoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTEp
ICYgMHgxOyB9CisgICAgdW5zaWduZWQgcmVnaXN0ZXJNYXNrKCkgeyByZXR1cm4gKChtX29wY29k
ZSA8PCA2KSAmIDB4NDAwMCkgfCAobV9vcGNvZGUgJiAweDdmKTsgfQorfTsKKworY2xhc3MgQVJN
djdET3Bjb2RlTW92ZUltbWVkaWF0ZVQxIDogcHVibGljIEFSTXY3RDE2Qml0T3Bjb2RlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc19tYXNrID0gMHhmODAwOworICAgIHN0
YXRpYyBjb25zdCB1aW50MTZfdCBzX3BhdHRlcm4gPSAweDIwMDA7CisKKyAgICBERUZJTkVfU1RB
VElDX0ZPUk1BVDE2KEFSTXY3RE9wY29kZU1vdmVJbW1lZGlhdGVUMSwgdGhpc09iaik7CisKK3By
b3RlY3RlZDoKKyAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKKworICAgIHVuc2lnbmVkIHJkKCkg
eyByZXR1cm4gKG1fb3Bjb2RlID4+IDgpICYgMHgzOyB9CisgICAgdW5zaWduZWQgaW1tZWRpYXRl
OCgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHhmZjsgfQorfTsKKworY2xhc3MgQVJNdjdET3Bjb2Rl
TW92ZVJlZ2lzdGVyVDEgOiBwdWJsaWMgQVJNdjdEMTZCaXRPcGNvZGUgeworcHVibGljOgorICAg
IHN0YXRpYyBjb25zdCB1aW50MTZfdCBzX21hc2sgPSAweGZmMDA7CisgICAgc3RhdGljIGNvbnN0
IHVpbnQxNl90IHNfcGF0dGVybiA9IDB4NDYwMDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFU
MTYoQVJNdjdET3Bjb2RlTW92ZVJlZ2lzdGVyVDEsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6Cisg
ICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisKKyAgICB1bnNpZ25lZCByZCgpIHsgcmV0dXJuICgo
bV9vcGNvZGUgPj4gNCkgJiAweDgpIHwgKG1fb3Bjb2RlICYgMHg3KTsgfQorICAgIHVuc2lnbmVk
IHJtKCkgeyByZXR1cm4gKChtX29wY29kZSA+PiAzKSAmIDB4Zik7IH0KK307CisKKy8vIDMyIEJp
dCBpbnN0cnVjdGlvbnMKKworI2RlZmluZSBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKGtsYXNzLCB0
aGlzT2JqKSBcCisgICBzdGF0aWMgY29uc3QgY2hhciogZm9ybWF0KEFSTXY3RDMyQml0T3Bjb2Rl
KiB0aGlzT2JqKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PCBrbGFzcyAqPih0aGlzT2JqKS0+
Zm9ybWF0KCk7IH0KKworY2xhc3MgQVJNdjdEMzJCaXRPcGNvZGUgOiBwdWJsaWMgQVJNdjdET3Bj
b2RlIHsKK3ByaXZhdGU6CisgICAgY2xhc3MgT3Bjb2RlR3JvdXAgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgT3Bjb2RlR3JvdXAodWludDMyX3Qgb3Bjb2RlTWFzaywgdWludDMyX3Qgb3Bjb2RlUGF0
dGVybiwgY29uc3QgY2hhciogKCpmb3JtYXQpKEFSTXY3RDMyQml0T3Bjb2RlKikpCisgICAgICAg
ICAgICA6IG1fb3Bjb2RlTWFzayhvcGNvZGVNYXNrKQorICAgICAgICAgICAgLCBtX29wY29kZVBh
dHRlcm4ob3Bjb2RlUGF0dGVybikKKyAgICAgICAgICAgICwgbV9mb3JtYXQoZm9ybWF0KQorICAg
ICAgICAgICAgLCBtX25leHQoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBzZXROZXh0KE9wY29kZUdyb3VwKiBuZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBtX25l
eHQgPSBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgT3Bjb2RlR3JvdXAqIG5leHQoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9uZXh0OworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBtYXRjaGVzKHVpbnQzMl90IG9wY29kZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIChvcGNvZGUgJiBtX29wY29kZU1hc2spID09IG1fb3Bjb2RlUGF0dGVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGNvbnN0IGNoYXIqIGZvcm1hdChBUk12N0QzMkJpdE9wY29kZSogdGhpc09i
aikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZm9ybWF0KHRoaXNPYmopOworICAg
ICAgICB9CisKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBvcGNv
ZGVUYWJsZVNpemUgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG9wY29kZVRh
YmxlTWFzayA9IG9wY29kZVRhYmxlU2l6ZS0xOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdWlu
dDMyX3QgbV9vcGNvZGVNYXNrOworICAgICAgICB1aW50MzJfdCBtX29wY29kZVBhdHRlcm47Cisg
ICAgICAgIGNvbnN0IGNoYXIqICgqbV9mb3JtYXQpKEFSTXY3RDMyQml0T3Bjb2RlKik7CisgICAg
ICAgIE9wY29kZUdyb3VwKiBtX25leHQ7CisgICAgfTsKKworcHVibGljOgorICAgIHN0YXRpYyB2
b2lkIGluaXQoKTsKKworICAgIGNvbnN0IGNoYXIqIGRlZmF1bHRGb3JtYXQoKTsKKyAgICBjb25z
dCBjaGFyKiBkb0Rpc2Fzc2VtYmxlKCk7CisKK3Byb3RlY3RlZDoKKyAgICB1bnNpZ25lZCByZCgp
IHsgcmV0dXJuIChtX29wY29kZSA+PiA4KSAmIDB4ZjsgfQorICAgIHVuc2lnbmVkIHJtKCkgeyBy
ZXR1cm4gbV9vcGNvZGUgJiAweGY7IH0KKyAgICB1bnNpZ25lZCBybigpIHsgcmV0dXJuIChtX29w
Y29kZSA+PiAxNikgJiAweGY7IH0KKyAgICB1bnNpZ25lZCBydCgpIHsgcmV0dXJuIChtX29wY29k
ZSA+PiAxMikgJiAweGY7IH0KKworICAgIHVuc2lnbmVkIG9wY29kZUdyb3VwTnVtYmVyKHVuc2ln
bmVkIG9wY29kZSkgeyByZXR1cm4gKG9wY29kZSA+PiAyNSkgJiBPcGNvZGVHcm91cDo6b3Bjb2Rl
VGFibGVNYXNrOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIE9wY29kZUdyb3VwKiBvcGNvZGVU
YWJsZVtPcGNvZGVHcm91cDo6b3Bjb2RlVGFibGVTaXplXTsKK307CisKK2NsYXNzIEFSTXY3RE9w
Y29kZUJyYW5jaFJlbGF0aXZlIDogcHVibGljIEFSTXY3RDMyQml0T3Bjb2RlIHsKK3Byb3RlY3Rl
ZDoKKyAgICB1bnNpZ25lZCBzQml0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDI2KSAmIDB4MTsg
fQorICAgIHVuc2lnbmVkIGoxKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDEzKSAmIDB4MTsgfQor
ICAgIHVuc2lnbmVkIGoyKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDExKSAmIDB4MTsgfQorICAg
IHVuc2lnbmVkIGltbWVkaWF0ZTExKCkgeyByZXR1cm4gbV9vcGNvZGUgJiAweDdmZjsgfQorfTsK
KworY2xhc3MgQVJNdjdET3Bjb2RlQ29uZGl0aW9uYWxCcmFuY2hUMyA6IHB1YmxpYyBBUk12N0RP
cGNvZGVCcmFuY2hSZWxhdGl2ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90
IHNfbWFzayA9IDB4ZjgwMGQwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfcGF0dGVy
biA9IDB4ZjAwMDgwMDA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3RE9wY29k
ZUNvbmRpdGlvbmFsQnJhbmNoVDMsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3Qg
Y2hhciogZm9ybWF0KCk7CisKKyAgICBpbnQzMl90IG9mZnNldCgpIHsgcmV0dXJuICgoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oc0JpdCgpIDw8IDMxKSkgPj4gMTIpIHwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4oKH4oajEoKSBeIHNCaXQoKSkgPDwgMTgpIHwgKH4oajIoKSBeIHNCaXQoKSkgPDwgMTcpIHwg
KGltbWVkaWF0ZTYoKSA8PCAxMSkgfCBpbW1lZGlhdGUxMSgpKTsgfQorICAgIHVuc2lnbmVkIGNv
bmRpdGlvbigpIHsgcmV0dXJuIChtX29wY29kZSA+PiAyMikgJiAweGY7IH0KKyAgICB1bnNpZ25l
ZCBpbW1lZGlhdGU2KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDE2KSAmIDB4M2ZmOyB9Cit9Owor
CitjbGFzcyBBUk12N0RPcGNvZGVCcmFuY2hPckJyYW5jaExpbmsgOiBwdWJsaWMgQVJNdjdET3Bj
b2RlQnJhbmNoUmVsYXRpdmUgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBz
X21hc2sgPSAweGY4MDA5MDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4g
PSAweGYwMDA5MDAwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVC
cmFuY2hPckJyYW5jaExpbmssIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3QgY2hh
ciogZm9ybWF0KCk7CisKKyAgICBpbnQzMl90IG9mZnNldCgpIHsgcmV0dXJuICgoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oc0JpdCgpIDw8IDMxKSkgPj4gOCkgfCBzdGF0aWNfY2FzdDxpbnQzMl90Pigo
fihqMSgpIF4gc0JpdCgpKSA8PDIyKSB8ICh+KGoyKCkgXiBzQml0KCkpIDw8IDIxKSB8IChpbW1l
ZGlhdGUxMCgpIDw8IDExKSB8IGltbWVkaWF0ZTExKCkpOyB9CisgICAgdW5zaWduZWQgaW1tZWRp
YXRlMTAoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMTYpICYgMHgzZmY7IH0KKyAgICBib29sIGlz
QkwoKSB7IHJldHVybiAhISgobV9vcGNvZGUgPj4gMTQpICYgMHgxKTsgfQorfTsKKworY2xhc3Mg
QVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdMb2dpY2FsQW5kUml0aG1ldGljIDogcHVibGljIEFS
TXY3RDMyQml0T3Bjb2RlIHsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3Qgc19vcE5hbWVzWzE2XTsKK307CisKK2NsYXNzIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5n
TW9kaWZpZWRJbW1lZGlhdGUgOiBwdWJsaWMgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdMb2dp
Y2FsQW5kUml0aG1ldGljIHsKK3ByaXZhdGU6CisgICAgdm9pZCBhcHBlbmRJbW1TaGlmdCh1bnNp
Z25lZCwgdW5zaWduZWQpOworCitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNf
bWFzayA9IDB4ZmEwMDgwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfcGF0dGVybiA9
IDB4ZjAwMDAwMDA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3RE9wY29kZURh
dGFQcm9jZXNzaW5nTW9kaWZpZWRJbW1lZGlhdGUsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6Cisg
ICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisgICAgdm9pZCBhcHBlbmRNb2RpZmllZEltbWVkaWF0
ZSh1bnNpZ25lZCk7CisKKyAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBzX29wTmFt
ZXNbb3AoKV07IH0KKworICAgIHVuc2lnbmVkIG9wKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDIx
KSAmIDB4ZjsgfQorICAgIHVuc2lnbmVkIHNCaXQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMjAp
ICYgMHgxOyB9CisgICAgdW5zaWduZWQgaW1tZWRpYXRlMTIoKSB7IHJldHVybiAoKG1fb3Bjb2Rl
ID4+IDE1KSAmIDB4MDgwMCkgfCAoKG1fb3Bjb2RlID4+IDQpICYgMHgwNzAwKSB8IChtX29wY29k
ZSAmIDB4MDBmZik7IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nU2hp
ZnRlZFJlZyA6IHB1YmxpYyBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ0xvZ2ljYWxBbmRSaXRo
bWV0aWMgeworcHJpdmF0ZToKKyAgICB2b2lkIGFwcGVuZEltbVNoaWZ0KHVuc2lnbmVkLCB1bnNp
Z25lZCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19tYXNrID0gMHhm
ZmUwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19wYXR0ZXJuID0gMHhlYTAwMDAw
MDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFUMzIoQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3Np
bmdTaGlmdGVkUmVnLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZv
cm1hdCgpOworCisgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzW29w
KCldOyB9CisKKyAgICB1bnNpZ25lZCBzQml0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDIwKSAm
IDB4MTsgfQorICAgIHVuc2lnbmVkIG9wKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDIxKSAmIDB4
ZjsgfQorICAgIHVuc2lnbmVkIGltbWVkaWF0ZTUoKSB7IHJldHVybiAoKG1fb3Bjb2RlID4+IDEw
KSAmIDB4MWMpIHwgKChtX29wY29kZSA+PiA2KSAmIDB4Myk7IH0KKyAgICB1bnNpZ25lZCB0eXBl
KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDQpICYgMHgzOyB9CisgICAgdW5zaWduZWQgdGJCaXQo
KSB7IHJldHVybiAobV9vcGNvZGUgPj4gNSkgJiAweDE7IH0KKyAgICB1bnNpZ25lZCB0Qml0KCkg
eyByZXR1cm4gKG1fb3Bjb2RlID4+IDQpICYgMHgxOyB9Cit9OworCitjbGFzcyBBUk12N0RPcGNv
ZGVEYXRhUHJvY2Vzc2luZ1JlZyA6IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7Citwcm90ZWN0
ZWQ6CisgICAgdW5zaWduZWQgb3AxKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDIwKSAmIDB4Zjsg
fQorICAgIHVuc2lnbmVkIG9wMigpIHsgcmV0dXJuIChtX29wY29kZSA+PiA0KSAmIDB4ZjsgfQor
fTsKKworY2xhc3MgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWdTaGlmdCA6IHB1YmxpYyBB
Uk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZworeworcHVibGljOgorICAgIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBzX21hc2sgPSAweGZmZTBmMGYwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJf
dCBzX3BhdHRlcm4gPSAweGZhMDBmMDAwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQzMihB
Uk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ1NoaWZ0LCB0aGlzT2JqKTsKKworcHJvdGVjdGVk
OgorICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworCisgICAgY29uc3QgY2hhciogb3BOYW1lKCkg
eyByZXR1cm4gc19zaGlmdE5hbWVzWyhvcDEoKT4+MSkgJiAweDNdOyB9Cit9OworCitjbGFzcyBB
Uk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ0V4dGVuZCA6IHB1YmxpYyBBUk12N0RPcGNvZGVE
YXRhUHJvY2Vzc2luZ1JlZworeworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3Qgc19vcEV4dGVuZE5hbWVzWzhdOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX29w
RXh0ZW5kQW5kQWRkTmFtZXNbOF07CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludDMy
X3Qgc19tYXNrID0gMHhmZjgwZjBjMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19wYXR0
ZXJuID0gMHhmYTAwZjA4MDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFUMzIoQVJNdjdET3Bj
b2RlRGF0YVByb2Nlc3NpbmdSZWdFeHRlbmQsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAg
Y29uc3QgY2hhciogZm9ybWF0KCk7CisKKyAgICBjb25zdCBjaGFyKiBvcEV4dGVuZE5hbWUoKSB7
IHJldHVybiBzX29wRXh0ZW5kTmFtZXNbb3AxKCldOyB9CisgICAgY29uc3QgY2hhciogb3BFeHRl
bmRBbmRBZGROYW1lKCkgeyByZXR1cm4gc19vcEV4dGVuZEFuZEFkZE5hbWVzW29wMSgpXTsgfQor
ICAgIHVuc2lnbmVkIHJvdGF0ZSgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA0KSAmIDB4MzsgfQor
fTsKKworY2xhc3MgQVJNdjdET3Bjb2RlRGF0YVByb2Nlc3NpbmdSZWdQYXJhbGxlbCA6IHB1Ymxp
YyBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZworeworcHJpdmF0ZToKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3Qgc19vcE5hbWVzWzE2XTsKKworcHVibGljOgorICAgIHN0YXRpYyBj
b25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZmODBmMGUwOworICAgIHN0YXRpYyBjb25zdCB1aW50
MzJfdCBzX3BhdHRlcm4gPSAweGZhMDBmMDAwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQz
MihBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ1BhcmFsbGVsLCB0aGlzT2JqKTsKKworcHJv
dGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworCisgICAgY29uc3QgY2hhciogb3BO
YW1lKCkgeyByZXR1cm4gc19vcE5hbWVzWygob3AxKCkgJiAweDcpIDw8IDEpIHwgKG9wMigpICYg
MHgxKV07IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29kZURhdGFQcm9jZXNzaW5nUmVnTWlzYyA6
IHB1YmxpYyBBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZworeworcHJpdmF0ZToKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19vcE5hbWVzWzE2XTsKKworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZmYzBmMGMwOworICAgIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGZhODBmMDgwOworCisgICAgREVGSU5FX1NUQVRJQ19G
T1JNQVQzMihBUk12N0RPcGNvZGVEYXRhUHJvY2Vzc2luZ1JlZ01pc2MsIHRoaXNPYmopOworCitw
cm90ZWN0ZWQ6CisgICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisKKyAgICBjb25zdCBjaGFyKiBv
cE5hbWUoKSB7IHJldHVybiBzX29wTmFtZXNbKChvcDEoKSAmIDB4MykgPDwgMikgfCAob3AyKCkg
JiAweDMpXTsgfQorfTsKKworY2xhc3MgQVJNdjdET3Bjb2RlSGludDMyIDogcHVibGljIEFSTXY3
RDMyQml0T3Bjb2RlIHsKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNf
b3BOYW1lc1s4XTsKKworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sg
PSAweGZmZjBkMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGYz
YTA4MDAwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVIaW50MzIs
IHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisKKyAg
ICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBzX29wTmFtZXNbb3AoKV07IH0KKworICAg
IGJvb2wgaXNEZWJ1Z0hpbnQoKSB7IHJldHVybiAobV9vcGNvZGUgJiAweGYwKSA9PSAweGYwOyB9
CisgICAgdW5zaWduZWQgZGVidWdPcHRpb24oKSB7IHJldHVybiBtX29wY29kZSAmIDB4ZjsgfQor
ICAgIHVuc2lnbmVkIG9wKCkgeyByZXR1cm4gbV9vcGNvZGUgJiAweDc7IH0KK307CisKK2NsYXNz
IEFSTXY3RE9wY29kZUZQVHJhbnNmZXIgOiBwdWJsaWMgQVJNdjdEMzJCaXRPcGNvZGUgeworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZmYzAwZTdmOworICAg
IHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGVlMDAwYTEwOworCisgICAgREVG
SU5FX1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVGUFRyYW5zZmVyLCB0aGlzT2JqKTsKKwor
cHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworCisgICAgdm9pZCBhcHBlbmRG
UFJlZ2lzdGVyKCk7CisKKyAgICB1bnNpZ25lZCBvcEgoKSB7IHJldHVybiAobV9vcGNvZGUgPj4g
MjEpICYgMHgxOyB9CisgICAgdW5zaWduZWQgb3BMKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDIw
KSAmIDB4MTsgfQorICAgIHVuc2lnbmVkIHJ0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDEyKSAm
IDB4ZjsgfQorICAgIHVuc2lnbmVkIG9wQygpIHsgcmV0dXJuIChtX29wY29kZSA+PiA4KSAmIDB4
MTsgfQorICAgIHVuc2lnbmVkIG9wQigpIHsgcmV0dXJuIChtX29wY29kZSA+PiA1KSAmIDB4Mzsg
fQorICAgIHVuc2lnbmVkIHZkKCkgeyByZXR1cm4gKChtX29wY29kZSA+PiAzKSAmIDB4MTApIHwg
KChtX29wY29kZSA+PiAxNikgJiAweGYpOyB9CisgICAgdW5zaWduZWQgdm4oKSB7IHJldHVybiAo
KG1fb3Bjb2RlID4+IDcpICYgMHgxKSB8ICgobV9vcGNvZGUgPj4gMTUpICYgMHgxZSk7IH0KK307
CisKK2NsYXNzIEFSTXY3RE9wY29kZURhdGFMb2FkIDogcHVibGljIEFSTXY3RDMyQml0T3Bjb2Rl
IHsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19vcE5hbWVzWzhd
OworCitwcm90ZWN0ZWQ6CisgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5h
bWVzW29wKCldOyB9CisKKyAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuICgobV9vcGNvZGUgPj4g
MjIpICYgMHg0KSB8ICgobV9vcGNvZGUgPj4gMjEpICYgMHgzKTsgfQorfTsKKworY2xhc3MgQVJN
djdET3Bjb2RlTG9hZFJlZ2lzdGVyIDogcHVibGljIEFSTXY3RE9wY29kZURhdGFMb2FkIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19tYXNrID0gMHhmZTkwMDgwMDsKKyAg
ICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19wYXR0ZXJuID0gMHhmODEwMDAwMDsKKworICAgIERF
RklORV9TVEFUSUNfRk9STUFUMzIoQVJNdjdET3Bjb2RlTG9hZFJlZ2lzdGVyLCB0aGlzT2JqKTsK
KworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworCisgICAgdW5zaWduZWQg
aW1tZWRpYXRlMigpIHsgcmV0dXJuIChtX29wY29kZSA+PiA0KSAmIDB4MzsgfQorfTsKKworY2xh
c3MgQVJNdjdET3Bjb2RlTG9hZFNpZ25lZEltbWVkaWF0ZSA6IHB1YmxpYyBBUk12N0RPcGNvZGVE
YXRhTG9hZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfbWFzayA9IDB4
ZmU5MDA4MDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfcGF0dGVybiA9IDB4ZjgxMDA4
MDA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3RE9wY29kZUxvYWRTaWduZWRJ
bW1lZGlhdGUsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3QgY2hhciogZm9ybWF0
KCk7CisKKyAgICB1bnNpZ25lZCBwQml0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDEwKSAmIDB4
MTsgfQorICAgIHVuc2lnbmVkIHVCaXQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gOSkgJiAweDE7
IH0KKyAgICB1bnNpZ25lZCB3Qml0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDgpICYgMHgxOyB9
CisgICAgdW5zaWduZWQgaW1tZWRpYXRlOCgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHhmZjsgfQor
fTsKKworY2xhc3MgQVJNdjdET3Bjb2RlTG9hZFVuc2lnbmVkSW1tZWRpYXRlIDogcHVibGljIEFS
TXY3RE9wY29kZURhdGFMb2FkIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qg
c19tYXNrID0gMHhmZTkwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19wYXR0ZXJu
ID0gMHhmODkwMDAwMDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFUMzIoQVJNdjdET3Bjb2Rl
TG9hZFVuc2lnbmVkSW1tZWRpYXRlLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0
IGNoYXIqIGZvcm1hdCgpOworCisgICAgdW5zaWduZWQgaW1tZWRpYXRlMTIoKSB7IHJldHVybiBt
X29wY29kZSAmIDB4ZmZmOyB9Cit9OworCitjbGFzcyBBUk12N0RPcGNvZGVMb25nTXVsdGlwbGVE
aXZpZGUgOiBwdWJsaWMgQVJNdjdEMzJCaXRPcGNvZGUgeworcHJvdGVjdGVkOgorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBzX29wTmFtZXNbOF07CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IHNfc21sYWxPcE5hbWVzWzRdOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBz
X3NtbGFsZE9wTmFtZXNbMl07CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfc21sc2xk
T3BOYW1lc1syXTsKKworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sg
PSAweGZmODAwMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGZi
ODAwMDAwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVMb25nTXVs
dGlwbGVEaXZpZGUsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3QgY2hhciogZm9y
bWF0KCk7CisKKyAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBzX29wTmFtZXNbb3Ax
KCldOyB9CisgICAgY29uc3QgY2hhciogc21sYWxPcE5hbWUoKSB7IHJldHVybiBzX3NtbGFsT3BO
YW1lc1sobkJpdCgpIDw8IDEpIHwgbUJpdCgpXTsgfQorICAgIGNvbnN0IGNoYXIqIHNtbGFsZE9w
TmFtZSgpIHsgcmV0dXJuIHNfc21sYWxkT3BOYW1lc1ttQml0KCldOyB9CisgICAgY29uc3QgY2hh
ciogc21sc2xkT3BOYW1lKCkgeyByZXR1cm4gc19zbWxzbGRPcE5hbWVzW21CaXQoKV07IH0KKwor
ICAgIHVuc2lnbmVkIHJkTG8oKSB7IHJldHVybiBydCgpOyB9CisgICAgdW5zaWduZWQgcmRIaSgp
IHsgcmV0dXJuIHJkKCk7IH0KKyAgICB1bnNpZ25lZCBvcDEoKSB7IHJldHVybiAobV9vcGNvZGUg
Pj4gMjApICYgMHg3OyB9CisgICAgdW5zaWduZWQgb3AyKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+
IDQpICYgMHhmOyB9CisgICAgdW5zaWduZWQgbkJpdCgpIHsgcmV0dXJuIChtX29wY29kZSA+PiA1
KSAmIDB4MTsgfQorICAgIHVuc2lnbmVkIG1CaXQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gNCkg
JiAweDE7IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29kZURhdGFQdXNoUG9wU2luZ2xlIDogcHVi
bGljIEFSTXY3RDMyQml0T3Bjb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludDMy
X3Qgc19tYXNrID0gMHhmZmVmMGZmZjsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19wYXR0
ZXJuID0gMHhmODRkMGQwNDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFUMzIoQVJNdjdET3Bj
b2RlRGF0YVB1c2hQb3BTaW5nbGUsIHRoaXNPYmopOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3Qg
Y2hhciogZm9ybWF0KCk7CisKKyAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBvcCgp
ID8gInBvcCIgOiAicHVzaCI7IH0KKyAgICB1bnNpZ25lZCBvcCgpIHsgcmV0dXJuIChtX29wY29k
ZSA+PiAyMCkgJiAweDE7IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29kZURhdGFTdG9yZVNpbmds
ZSA6IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHNfb3BOYW1lc1s0XTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNo
YXIqIG9wTmFtZSgpIHsgcmV0dXJuIHNfb3BOYW1lc1tvcCgpXTsgfQorCisgICAgdW5zaWduZWQg
b3AoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMjEpICYgMHgzOyB9Cit9OworCitjbGFzcyBBUk12
N0RPcGNvZGVTdG9yZVNpbmdsZUltbWVkaWF0ZTEyIDogcHVibGljIEFSTXY3RE9wY29kZURhdGFT
dG9yZVNpbmdsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfbWFzayA9
IDB4ZmZmMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfcGF0dGVybiA9IDB4Zjhj
MDAwMDA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3RE9wY29kZVN0b3JlU2lu
Z2xlSW1tZWRpYXRlMTIsIHRoaXNPYmopOworCisgICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisK
K3Byb3RlY3RlZDoKKyAgICB1bnNpZ25lZCBpbW1lZGlhdGUxMigpIHsgcmV0dXJuIG1fb3Bjb2Rl
ICYgMHhmZmY7IH0KK307CisKK2NsYXNzIEFSTXY3RE9wY29kZVN0b3JlU2luZ2xlSW1tZWRpYXRl
OCA6IHB1YmxpYyBBUk12N0RPcGNvZGVEYXRhU3RvcmVTaW5nbGUgeworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sgPSAweGZmZjAwODAwOworICAgIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGY4NDAwODAwOworICAgIAorICAgIERFRklORV9TVEFU
SUNfRk9STUFUMzIoQVJNdjdET3Bjb2RlU3RvcmVTaW5nbGVJbW1lZGlhdGU4LCB0aGlzT2JqKTsK
KyAgICAKKyAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB1
bnNpZ25lZCBwQml0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDEwKSAmIDB4MTsgfQorICAgIHVu
c2lnbmVkIHVCaXQoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gOSkgJiAweDE7IH0KKyAgICB1bnNp
Z25lZCB3Qml0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDgpICYgMHgxOyB9CisgICAgdW5zaWdu
ZWQgaW1tZWRpYXRlOCgpIHsgcmV0dXJuIG1fb3Bjb2RlICYgMHhmZjsgfQorfTsKKworY2xhc3Mg
QVJNdjdET3Bjb2RlU3RvcmVTaW5nbGVSZWdpc3RlciA6IHB1YmxpYyBBUk12N0RPcGNvZGVEYXRh
U3RvcmVTaW5nbGUgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sg
PSAweGZmZjAwZmMwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGY4
NDAwMDAwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVTdG9yZVNp
bmdsZVJlZ2lzdGVyLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZv
cm1hdCgpOworCisgICAgdW5zaWduZWQgaW1tZWRpYXRlMigpIHsgcmV0dXJuIChtX29wY29kZSA+
PiA0KSAmIDB4MzsgfQorfTsKKworY2xhc3MgQVJNdjdET3Bjb2RlVW5tb2RpZmllZEltbWVkaWF0
ZSA6IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IHNfb3BOYW1lc1sxNl07CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29u
c3QgdWludDMyX3Qgc19tYXNrID0gMHhmYTAwODAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMy
X3Qgc19wYXR0ZXJuID0gMHhmMjAwMDAwMDsKKworICAgIERFRklORV9TVEFUSUNfRk9STUFUMzIo
QVJNdjdET3Bjb2RlVW5tb2RpZmllZEltbWVkaWF0ZSwgdGhpc09iaik7CisKK3Byb3RlY3RlZDoK
KyAgICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKKworICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsg
cmV0dXJuIHNfb3BOYW1lc1tvcCgpID4+IDFdOyB9CisKKyAgICB1bnNpZ25lZCBvcCgpIHsgcmV0
dXJuIChtX29wY29kZSA+PiAyMCkgJiAweDFmOyB9CisgICAgdW5zaWduZWQgc2hCaXQoKSB7IHJl
dHVybiAobV9vcGNvZGUgPj4gMjEpICYgMHgxOyB9CisgICAgdW5zaWduZWQgYml0TnVtT3JTYXRJ
bW1lZGlhdGUoKSB7IHJldHVybiBtX29wY29kZSAmIDB4MWY7IH0KKyAgICB1bnNpZ25lZCBpbW1l
ZGlhdGU1KCkgeyByZXR1cm4gKChtX29wY29kZSA+PiA5KSAmIDB4MWMpIHwgKChtX29wY29kZSA+
PiA2KSAmIDB4Myk7IH0KKyAgICB1bnNpZ25lZCBpbW1lZGlhdGUxMigpIHsgcmV0dXJuICgobV9v
cGNvZGUgPj4gMTUpICYgMHgwODAwKSB8ICgobV9vcGNvZGUgPj4gNCkgJiAweDA3MDApIHwgKG1f
b3Bjb2RlICYgMHgwMGZmKTsgfQorICAgIHVuc2lnbmVkIGltbWVkaWF0ZTE2KCkgeyByZXR1cm4g
KChtX29wY29kZSA+PiA0KSAmIDB4ZjAwMCkgfCAoKG1fb3Bjb2RlID4+IDE1KSAmIDB4MDgwMCkg
fCAoKG1fb3Bjb2RlID4+IDQpICYgMHgwNzAwKSB8IChtX29wY29kZSAmIDB4MDBmZik7IH0KK307
CisKK2NsYXNzIEFSTXY3RE9wY29kZVZNT1ZEb3VibGVQcmVjaXNpb24gOiBwdWJsaWMgQVJNdjdE
MzJCaXRPcGNvZGUgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX21hc2sg
PSAweGZmZTAwZmQwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX3BhdHRlcm4gPSAweGVj
NDAwYjEwOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQzMihBUk12N0RPcGNvZGVWTU9WRG91
YmxlUHJlY2lzaW9uLCB0aGlzT2JqKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IGNoYXIqIGZv
cm1hdCgpOworCisgICAgdW5zaWduZWQgb3AoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMjApICYg
MHgxOyB9CisgICAgdW5zaWduZWQgcnQyKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDE2KSAmIDB4
ZjsgfQorICAgIHVuc2lnbmVkIHJ0KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDE2KSAmIDB4Zjsg
fQorICAgIHVuc2lnbmVkIHZtKCkgeyByZXR1cm4gKG1fb3Bjb2RlICYgMHhmKSB8ICgobV9vcGNv
ZGUgPj4gMSkgJiAweDEwKTsgfQorfTsKKworY2xhc3MgQVJNdjdET3Bjb2RlVk1PVlNpbmdsZVBy
ZWNpc2lvbiA6IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQzMl90IHNfbWFzayA9IDB4ZmZlMDBmZDA7CisgICAgc3RhdGljIGNvbnN0IHVp
bnQzMl90IHNfcGF0dGVybiA9IDB4ZWM0MDBhMTA7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1B
VDMyKEFSTXY3RE9wY29kZVZNT1ZTaW5nbGVQcmVjaXNpb24sIHRoaXNPYmopOworCitwcm90ZWN0
ZWQ6CisgICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisKKyAgICB1bnNpZ25lZCBvcCgpIHsgcmV0
dXJuIChtX29wY29kZSA+PiAyMCkgJiAweDE7IH0KKyAgICB1bnNpZ25lZCBydDIoKSB7IHJldHVy
biAobV9vcGNvZGUgPj4gMTYpICYgMHhmOyB9CisgICAgdW5zaWduZWQgcnQoKSB7IHJldHVybiAo
bV9vcGNvZGUgPj4gMTYpICYgMHhmOyB9CisgICAgdW5zaWduZWQgdm0oKSB7IHJldHVybiAoKG1f
b3Bjb2RlIDw8IDEpICYgMHgxZSkgfCAoKG1fb3Bjb2RlID4+IDUpICYgMHgxKTsgfQorfTsKKwor
Y2xhc3MgQVJNdjdET3Bjb2RlVk1TUiA6IHB1YmxpYyBBUk12N0QzMkJpdE9wY29kZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfbWFzayA9IDB4ZmZlZjBmZmY7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IHNfcGF0dGVybiA9IDB4ZWVlMTBhMTA7CisKKyAgICBERUZJ
TkVfU1RBVElDX0ZPUk1BVDMyKEFSTXY3RE9wY29kZVZNU1IsIHRoaXNPYmopOworCitwcm90ZWN0
ZWQ6CisgICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisKKyAgICB1bnNpZ25lZCBvcEwoKSB7IHJl
dHVybiAobV9vcGNvZGUgPj4gMjApICYgMHgxOyB9CisgICAgdW5zaWduZWQgcnQoKSB7IHJldHVy
biAobV9vcGNvZGUgPj4gMTIpICYgMHhmOyB9Cit9OworCisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpBUk12N0Rpc2Fzc2VtYmxlcgorCit1c2luZyBKU0M6OkFSTXY3RGlzYXNzZW1ibGVyOjpBUk12
N0RPcGNvZGU7CisKKyNlbmRpZiAvLyAjaWYgVVNFKEFSTVY3X0RJU0FTU0VNQkxFUikKKworI2Vu
ZGlmIC8vIEFSTXY3RE9wY29kZV9oCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5Nzg1KQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wNS0w
OCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBKU0M6IFRo
ZXJlIHNob3VsZCBiZSBhIGRpc2Fzc2VtYmxlciBmb3IgQVJNIFRodW1iIDIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTgyNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IGRpc2Fzc2Vt
YmxlciBmb3IgQVJNdjcgVGh1bWIyIGluc3RydWN0aW9ucyBmb3IgdXNlIGJ5IHRoZSBKU0MgZGVi
dWdnaW5nCisgICAgICAgIGFuZCBwcm9maWxpbmcgY29kZS4gIEVuYWJsZWQgdGhlIGRpc2Fzc2Vt
YmxlciBmb3IgSU9TIGJ1bGRzLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTMt
MDUtMDggIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+
CiAKICAgICAgICAgU2ltcGxpZnkgUmV0YWluUHRyT2JqZWN0SGFzaFRyYWl0cwpJbmRleDogU291
cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCShyZXZpc2lvbiAxNDk3NzIpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MDYsNyArNzA2LDExIEBACiAjZGVmaW5lIFdURl9VU0VfVURJUzg2
IDEKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RJU0FTU0VNQkxFUikgJiYgVVNFKFVE
SVM4NikKKyNpZiAhZGVmaW5lZChXVEZfVVNFX0FSTVY3X0RJU0FTU0VNQkxFUikgJiYgRU5BQkxF
KEpJVCkgJiYgUExBVEZPUk0oSU9TKSAmJiBDUFUoQVJNX1RIVU1CMikKKyNkZWZpbmUgV1RGX1VT
RV9BUk1WN19ESVNBU1NFTUJMRVIgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfRElT
QVNTRU1CTEVSKSAmJiAoVVNFKFVESVM4NikgfHwgVVNFKEFSTVY3X0RJU0FTU0VNQkxFUikpCiAj
ZGVmaW5lIEVOQUJMRV9ESVNBU1NFTUJMRVIgMQogI2VuZGlmCiAK
</data>
<flag name="review"
          id="222474"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>