<?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>237629</bug_id>
          
          <creation_ts>2022-03-08 16:52:21 -0800</creation_ts>
          <short_desc>[WGSL] Implement enough of the Parser for the simplest shaders</short_desc>
          <delta_ts>2022-03-09 14:27:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>233276</dependson>
    
    <dependson>236655</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1849476</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-08 16:52:21 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849482</commentid>
    <comment_count>1</comment_count>
      <attachid>454175</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-08 16:56:58 -0800</bug_when>
    <thetext>Created attachment 454175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849536</commentid>
    <comment_count>2</comment_count>
      <attachid>454175</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-08 21:41:50 -0800</bug_when>
    <thetext>Comment on attachment 454175
Patch

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

&gt; Source/WebGPU/WGSL/CompilationMessage.h:57
&gt; +using Warning = CompilationMessage;
&gt; +using Error = CompilationMessage;

Cute.

&gt; Source/WebGPU/WGSL/Parser.cpp:45
&gt; +#define START_PARSE() \

Is this style of using #defines copied from anywhere?

&gt; Source/WebGPU/WGSL/Parser.cpp:168
&gt; +Expected&lt;AST::ShaderModule, Error&gt; parse(const String&amp; wgsl)
&gt; +{
&gt; +    Lexer lexer(wgsl);
&gt; +    Parser parser(lexer);
&gt; +    
&gt; +    return parser.parseShader();
&gt; +}

Did you consider generating this code from a grammar file?

&gt; Source/WebGPU/WGSL/Parser.cpp:511
&gt; +    START_PARSE();

Is there a way to guarantee that parsing functions always start with a START_PARSE() macro?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849789</commentid>
    <comment_count>3</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-09 11:43:04 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to Myles C. Maxfield from comment #2)
&gt; Comment on attachment 454175 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=454175&amp;action=review
&gt; 
&gt; &gt; Source/WebGPU/WGSL/CompilationMessage.h:57
&gt; &gt; +using Warning = CompilationMessage;
&gt; &gt; +using Error = CompilationMessage;
&gt; 
&gt; Cute.

Thanks, I found it makes function signatures more readable.

&gt; &gt; Source/WebGPU/WGSL/Parser.cpp:45
&gt; &gt; +#define START_PARSE() \
&gt; 
&gt; Is this style of using #defines copied from anywhere?

The exact macros are different, but both JavaScriptCore/parser/Parser.cpp and the old WHLSL parser (which I used as inspiration) use a ton of macros as well. Regular C++ is just not the most pleasant language for writing this kind of code.

&gt; &gt; Source/WebGPU/WGSL/Parser.cpp:168
&gt; &gt; +Expected&lt;AST::ShaderModule, Error&gt; parse(const String&amp; wgsl)
&gt; &gt; +{
&gt; &gt; +    Lexer lexer(wgsl);
&gt; &gt; +    Parser parser(lexer);
&gt; &gt; +    
&gt; &gt; +    return parser.parseShader();
&gt; &gt; +}
&gt; 
&gt; Did you consider generating this code from a grammar file?

Yes, it would have been easier, but could have been an issue if the language later becomes more complicated. It would also have put a pretty low cap on the quality of the error messages that is achievable. As a result parser generators are rarely used for the major compilers for real-world languages.

&gt; 
&gt; &gt; Source/WebGPU/WGSL/Parser.cpp:511
&gt; &gt; +    START_PARSE();
&gt; 
&gt; Is there a way to guarantee that parsing functions always start with a
&gt; START_PARSE() macro?

Unfortunately I don&apos;t know of such a way. But forgetting the macro just gives you an error message as `_startOfElementPosition` is not defined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849796</commentid>
    <comment_count>4</comment_count>
      <attachid>454275</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2022-03-09 11:56:41 -0800</bug_when>
    <thetext>Created attachment 454275
Patch for landing

Just fixed style nits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849841</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-09 14:26:32 -0800</bug_when>
    <thetext>Committed r291075 (248241@main): &lt;https://commits.webkit.org/248241@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454275.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849842</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-09 14:27:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/90057433&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454175</attachid>
            <date>2022-03-08 16:56:58 -0800</date>
            <delta_ts>2022-03-09 11:56:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchParser</filename>
            <type>text/plain</type>
            <size>57581</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggOGIxNjE3NzJhMWFmLi5hZmVhMzQ0MTE4MzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNzIgQEAKKzIwMjItMDMtMDggIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNv
bT4KKworICAgICAgICBbV0dTTF0gSW1wbGVtZW50IGVub3VnaCBvZiB0aGUgUGFyc2VyIGZvciB0
aGUgc2ltcGxlc3Qgc2hhZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM3NjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIHNwZWNpZmljICJoZWxsby13b3JsZCItbGlrZSBzaGFkZXJzIHRoYXQg
SSB3YW50IHRoaXMgdG8gYmUgYWJsZSB0byBwYXJzZSBhcmUgaW5jbHVkZWQgaW4gV0dTTFBhcnNl
clRlc3RzLm1tLgorCisgICAgICAgIFRoZSBnZW5lcmFsIGFwcHJvYWNoIHRvIHRoZSBwYXJzZXIs
IHN1Y2ggYXMgaXRzIHRlbXBsYXRpbmcgYnkgdGhlIExleGVyLCBpcyBkaXJlY3RseSBjb3BpZWQg
ZnJvbSBKU0MncyBwYXJzZXIuCisgICAgICAgIFRoaW5ncyBhcmUgYSBiaXQgc2ltcGxlciBmb3Ig
dXMgYXMgV0dTTCBpcyBzdWNoIGEgc2ltcGxlIGxhbmd1YWdlIHRvIHBhcnNlLCBiZWluZyBzdHJp
Y3RseSBMUigxKS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoIEkgYWxzbyBkZWxldGVkIEJsb2Nr
QXR0cmlidXRlLCBzaW5jZSB0aGlzIGF0dHJpYnV0ZSB3YXMgcmVjZW50bHkgcmVtb3ZlZCBmcm9t
IHRoZSBsYW5ndWFnZS4KKworICAgICAgICAqIFdHU0wvQVNUL0F0dHJpYnV0ZS5oOgorICAgICAg
ICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzQmxvY2sgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIFdHU0wvQVNUL0V4cHJlc3Npb25zL1R5cGVDb252ZXJzaW9uLmg6CisgICAgICAgICogV0dT
TC9BU1QvRnVuY3Rpb25EZWNsLmg6CisgICAgICAgICogV0dTTC9BU1QvU2hhZGVyTW9kdWxlLmg6
CisgICAgICAgICogV0dTTC9BU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50Lmg6Cisg
ICAgICAgICogV0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oOgorICAgICAgICAqIFdHU0wvQVNUL1R5
cGVEZWNsLmg6CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcml6ZWRUeXBlOjpzdHJpbmdW
aWV3VG9LaW5kKToKKyAgICAgICAgKiBXR1NML0NvbXBpbGF0aW9uTWVzc2FnZS5oOgorICAgICAg
ICAqIFdHU0wvUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXR1NMOjpQYXJzZXI6OlBhcnNl
cik6CisgICAgICAgIChXR1NMOjpQYXJzZXI6OmN1cnJlbnQpOgorICAgICAgICAoV0dTTDo6cGFy
c2UpOgorICAgICAgICAoV0dTTDo6cGFyc2VMQ2hhcik6CisgICAgICAgIChXR1NMOjpwYXJzZVVD
aGFyKToKKyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OmNvbnN1bWVUeXBlKToKKyAgICAg
ICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OmNvbnN1bWUpOgorICAgICAgICAoV0dTTDo6UGFyc2Vy
PExleGVyPjo6cGFyc2VTaGFkZXIpOgorICAgICAgICAoV0dTTDo6UGFyc2VyPExleGVyPjo6cGFy
c2VHbG9iYWxEZWNsKToKKyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlQXR0cmli
dXRlcyk6CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZUF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZVN0cnVjdERlY2wpOgorICAgICAgICAo
V0dTTDo6UGFyc2VyPExleGVyPjo6cGFyc2VTdHJ1Y3RNZW1iZXIpOgorICAgICAgICAoV0dTTDo6
UGFyc2VyPExleGVyPjo6cGFyc2VUeXBlRGVjbCk6CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4
ZXI+OjpwYXJzZVR5cGVEZWNsQWZ0ZXJJZGVudGlmaWVyKToKKyAgICAgICAgKFdHU0w6OlBhcnNl
cjxMZXhlcj46OnBhcnNlR2xvYmFsVmFyaWFibGVEZWNsKToKKyAgICAgICAgKFdHU0w6OlBhcnNl
cjxMZXhlcj46OnBhcnNlVmFyaWFibGVRdWFsaWZpZXIpOgorICAgICAgICAoV0dTTDo6UGFyc2Vy
PExleGVyPjo6cGFyc2VTdG9yYWdlQ2xhc3MpOgorICAgICAgICAoV0dTTDo6UGFyc2VyPExleGVy
Pjo6cGFyc2VBY2Nlc3NNb2RlKToKKyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNl
RnVuY3Rpb25EZWNsKToKKyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlUGFyYW1l
dGVyKToKKyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlU3RhdGVtZW50KToKKyAg
ICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlQ29tcG91bmRTdGF0ZW1lbnQpOgorICAg
ICAgICAoV0dTTDo6UGFyc2VyPExleGVyPjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQpOgorICAgICAg
ICAoV0dTTDo6UGFyc2VyPExleGVyPjo6cGFyc2VTaG9ydENpcmN1aXRPckV4cHJlc3Npb24pOgor
ICAgICAgICAoV0dTTDo6UGFyc2VyPExleGVyPjo6cGFyc2VSZWxhdGlvbmFsRXhwcmVzc2lvbik6
CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZVNoaWZ0RXhwcmVzc2lvbik6Cisg
ICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZUFkZGl0aXZlRXhwcmVzc2lvbik6Cisg
ICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lv
bik6CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZVVuYXJ5RXhwcmVzc2lvbik6
CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZVNpbmd1bGFyRXhwcmVzc2lvbik6
CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZVBvc3RmaXhFeHByZXNzaW9uKToK
KyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOgor
ICAgICAgICAoV0dTTDo6UGFyc2VyPExleGVyPjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAg
KFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlTEhTRXhwcmVzc2lvbik6CisgICAgICAgIChXR1NM
OjpQYXJzZXI8TGV4ZXI+OjpwYXJzZUNvcmVMSFNFeHByZXNzaW9uKToKKyAgICAgICAgKFdHU0w6
OlBhcnNlcjxMZXhlcj46OnBhcnNlQXJndW1lbnRFeHByZXNzaW9uTGlzdCk6CisgICAgICAgICog
V0dTTC9QYXJzZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkdQVS9XR1NML0NvbXBpbGF0aW9u
TWVzc2FnZS5oLgorICAgICAgICAqIFdHU0wvV0dTTC5jcHA6CisgICAgICAgIChXR1NMOjpzdGF0
aWNDaGVjayk6CisgICAgICAgIChXR1NMOjpTdWNjZXNzZnVsQ2hlY2s6OlN1Y2Nlc3NmdWxDaGVj
ayk6CisgICAgICAgICogV0dTTC9XR1NMLmg6CisgICAgICAgICogV2ViR1BVLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisKIDIwMjItMDMtMDggIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0
QGFwcGxlLmNvbT4KIAogICAgICAgICBbV0dTTF0gQWRkIGVub3VnaCBvZiB0aGUgQVNUIGZvciB0
aGUgc2ltcGxlc3Qgc2hhZGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9B
dHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvQXR0cmlidXRlLmgKaW5kZXggN2Uy
MGFmNzI1YjA0Li5hNzcxMzY3MDcxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvQXR0cmlidXRlLmgKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9BdHRyaWJ1dGUuaApA
QCAtMzYsNyArMzYsNiBAQCBjbGFzcyBBdHRyaWJ1dGUgOiBwdWJsaWMgQVNUTm9kZSB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBLaW5kIHsK
LSAgICAgICAgQmxvY2ssCiAgICAgICAgIEdyb3VwLAogICAgICAgICBCaW5kaW5nLAogICAgICAg
ICBTdGFnZSwKQEAgLTUyLDcgKzUxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF0dHJpYnV0
ZSgpIHt9OwogCiAgICAgdmlydHVhbCBLaW5kIGtpbmQoKSBjb25zdCA9IDAgOwotICAgIGJvb2wg
aXNCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpCbG9jazsgfQogICAgIGJv
b2wgaXNHcm91cCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpHcm91cDsgfQogICAg
IGJvb2wgaXNCaW5kaW5nKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkJpbmRpbmc7
IH0KICAgICBib29sIGlzU3RhZ2UoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6U3Rh
Z2U7IH0KQEAgLTYwLDE3ICs1OCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQnVpbHRpbigpIGNv
bnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpCdWlsdGluOyB9CiB9OwogCi1jbGFzcyBCbG9j
a0F0dHJpYnV0ZSBmaW5hbCA6IHB1YmxpYyBBdHRyaWJ1dGUgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIEJsb2NrQXR0cmlidXRlKFNvdXJjZVNwYW4gc3BhbikK
LSAgICAgICAgOiBBdHRyaWJ1dGUoc3BhbikKLSAgICB7Ci0gICAgfQotCi0gICAgS2luZCBraW5k
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2luZDo6QmxvY2s7IH0KLX07Ci0KIGNsYXNzIEdy
b3VwQXR0cmlidXRlIGZpbmFsIDogcHVibGljIEF0dHJpYnV0ZSB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xNjYsNyArMTUzLDYgQEAgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXR1NMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAogICAgIHN0YXRpYyBi
b29sIGlzVHlwZShjb25zdCBXR1NMOjpBU1Q6OkF0dHJpYnV0ZSYgYXR0cikgeyByZXR1cm4gYXR0
ci5wcmVkaWNhdGU7IH0gXAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKEJsb2NrQXR0cmlidXRlLCBpc0Jsb2NrKCkp
CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKEdyb3VwQXR0cmlidXRlLCBp
c0dyb3VwKCkpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKEJpbmRpbmdB
dHRyaWJ1dGUsIGlzQmluZGluZygpKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0FUVFJJ
QlVURShTdGFnZUF0dHJpYnV0ZSwgaXNTdGFnZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQ
VS9XR1NML0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oIGIvU291cmNlL1dlYkdQVS9X
R1NML0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oCmluZGV4IGQxNTdlOWY4YWUwZC4u
OTU0MmJlODEzOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Np
b25zL1R5cGVDb252ZXJzaW9uLmgKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNz
aW9ucy9UeXBlQ29udmVyc2lvbi5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJUeXBlRGVjbC5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRnVuY3Rpb25EZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0Z1bmN0aW9uRGVjbC5oCmluZGV4IGQzY2Y3MmRlODg5NC4uMWU5MzU2OTgxMGMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0Z1bmN0aW9uRGVjbC5oCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvRnVuY3Rpb25EZWNsLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJBU1ROb2RlLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiQ29t
cGlsYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiR2xvYmFsRGVjbC5oIgogI2luY2x1ZGUgIlN0
YXRlbWVudHMvQ29tcG91bmRTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJUeXBlRGVjbC5oIgogCkBA
IC00Niw2ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBUeXBlRGVjbCYgdHlwZSgpIHsgcmV0dXJuIG1f
dHlwZTsgfQorICAgIEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSB7IHJldHVybiBtX2F0dHJpYnV0
ZXM7IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmdWaWV3IG1fbmFtZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvU2hhZGVyTW9kdWxlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wv
QVNUL1NoYWRlck1vZHVsZS5oCmluZGV4IGYwNmRkZjMwNzBmMS4uMTI2MTVmMWJkMmYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1NoYWRlck1vZHVsZS5oCisrKyBiL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1QvU2hhZGVyTW9kdWxlLmgKQEAgLTI2LDggKzI2LDExIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkFTVE5vZGUuaCIKKyNpbmNsdWRlICJGdW5jdGlvbkRlY2wu
aCIKICNpbmNsdWRlICJHbG9iYWxEZWNsLmgiCiAjaW5jbHVkZSAiR2xvYmFsRGlyZWN0aXZlLmgi
CisjaW5jbHVkZSAiR2xvYmFsVmFyaWFibGVEZWNsLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlRGVj
bC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1lbnRzL0Fzc2lnbm1lbnRTdGF0ZW1lbnQuaCBiL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50LmgKaW5k
ZXggOGU0YzY0MWVmMGUzLi41NjZhZWJiMTViNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUv
V0dTTC9BU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkdQVS9XR1NML0FTVC9TdGF0ZW1lbnRzL0Fzc2lnbm1lbnRTdGF0ZW1lbnQuaApAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlN0YXRlbWVudC5o
IgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdHU0w6OkFTVCB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oIGIvU291
cmNlL1dlYkdQVS9XR1NML0FTVC9TdHJ1Y3R1cmVEZWNsLmgKaW5kZXggNGFkZWJlNTllYmFhLi42
N2Y1MjFkMDM2ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RydWN0dXJl
RGVjbC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oCkBAIC01
MCw2ICs1MCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25z
dCB7IHJldHVybiBtX25hbWU7IH0KICAgICBUeXBlRGVjbCYgdHlwZSgpIHsgcmV0dXJuIG1fdHlw
ZTsgfQorICAgIEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmdWaWV3IG1fbmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1QvVHlwZURlY2wuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvVHlw
ZURlY2wuaAppbmRleCBkZGRmODIwNzliMzguLmEyODhlNGNhMGQ5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XR1NML0FTVC9UeXBlRGVjbC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvVHlwZURlY2wuaApAQCAtOTIsNiArOTIsMzUgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxCYXNlPiBzdHJpbmdWaWV3VG9LaW5kKFN0cmluZ1Zp
ZXcmIHZpZXcpCisgICAgeworICAgICAgICBpZiAodmlldyA9PSAidmVjMiIpCisgICAgICAgICAg
ICByZXR1cm4gQmFzZTo6VmVjMjsKKyAgICAgICAgaWYgKHZpZXcgPT0gInZlYzMiKQorICAgICAg
ICAgICAgcmV0dXJuIEJhc2U6OlZlYzM7CisgICAgICAgIGlmICh2aWV3ID09ICJ2ZWM0IikKKyAg
ICAgICAgICAgIHJldHVybiBCYXNlOjpWZWM0OworICAgICAgICBpZiAodmlldyA9PSAibWF0Mngy
IikKKyAgICAgICAgICAgIHJldHVybiBCYXNlOjpNYXQyeDI7CisgICAgICAgIGlmICh2aWV3ID09
ICJtYXQyeDMiKQorICAgICAgICAgICAgcmV0dXJuIEJhc2U6Ok1hdDJ4MzsKKyAgICAgICAgaWYg
KHZpZXcgPT0gIm1hdDJ4NCIpCisgICAgICAgICAgICByZXR1cm4gQmFzZTo6TWF0Mng0OworICAg
ICAgICBpZiAodmlldyA9PSAibWF0M3gyIikKKyAgICAgICAgICAgIHJldHVybiBCYXNlOjpNYXQz
eDI7CisgICAgICAgIGlmICh2aWV3ID09ICJtYXQzeDMiKQorICAgICAgICAgICAgcmV0dXJuIEJh
c2U6Ok1hdDN4MzsKKyAgICAgICAgaWYgKHZpZXcgPT0gIm1hdDN4NCIpCisgICAgICAgICAgICBy
ZXR1cm4gQmFzZTo6TWF0M3g0OworICAgICAgICBpZiAodmlldyA9PSAibWF0NHgyIikKKyAgICAg
ICAgICAgIHJldHVybiBCYXNlOjpNYXQ0eDI7CisgICAgICAgIGlmICh2aWV3ID09ICJtYXQ0eDMi
KQorICAgICAgICAgICAgcmV0dXJuIEJhc2U6Ok1hdDR4MzsKKyAgICAgICAgaWYgKHZpZXcgPT0g
Im1hdDR4NCIpCisgICAgICAgICAgICByZXR1cm4gQmFzZTo6TWF0NHg0OworICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwogICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEtpbmQ6OlBhcmFtZXRlcml6ZWQ7IH0KICAgICBCYXNlIGJhc2UoKSBjb25zdCB7
IHJldHVybiBtX2Jhc2U7IH0KICAgICBUeXBlRGVjbCYgZWxlbWVudFR5cGUoKSB7IHJldHVybiBt
X2VsZW1lbnRUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQ29tcGlsYXRp
b25NZXNzYWdlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQ29tcGlsYXRpb25NZXNzYWdlLmgKaW5k
ZXggNzA0M2ZmM2VhMzVlLi5lMjEwNTI4MWEwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUv
V0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQ29tcGls
YXRpb25NZXNzYWdlLmgKQEAgLTUzLDQgKzUzLDcgQEAgcHJpdmF0ZToKICAgICBTb3VyY2VTcGFu
IG1fc3BhbjsKIH07CiAKK3VzaW5nIFdhcm5pbmcgPSBDb21waWxhdGlvbk1lc3NhZ2U7Cit1c2lu
ZyBFcnJvciA9IENvbXBpbGF0aW9uTWVzc2FnZTsKKwogfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM3
MjBiMmQyNGE0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9QYXJzZXIu
Y3BwCkBAIC0wLDAgKzEsNzU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFTVC9BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJBU1QvRXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9JZGVudGlmaWVyRXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIkFTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJBU1QvRXhw
cmVzc2lvbnMvVHlwZUNvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJBU1QvRXhwcmVzc2lvbnMvTGl0
ZXJhbEV4cHJlc3Npb25zLmgiCisjaW5jbHVkZSAiQVNUL0dsb2JhbERlY2wuaCIKKyNpbmNsdWRl
ICJBU1QvU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiQVNUL1N0YXRlbWVudHMvQXNzaWdubWVudFN0
YXRlbWVudC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnRzL0NvbXBvdW5kU3RhdGVtZW50Lmgi
CisjaW5jbHVkZSAiQVNUL1N0YXRlbWVudHMvUmV0dXJuU3RhdGVtZW50LmgiCisjaW5jbHVkZSAi
QVNUL1N0cnVjdHVyZURlY2wuaCIKKyNpbmNsdWRlICJMZXhlci5oIgorI2luY2x1ZGUgIlBhcnNl
ci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdH
U0wgeworCisjZGVmaW5lIFNUQVJUX1BBUlNFKCkgXAorICAgIGF1dG8gX3N0YXJ0T2ZFbGVtZW50
UG9zaXRpb24gPSBtX2xleGVyLmN1cnJlbnRQb3NpdGlvbigpOworCisjZGVmaW5lIENVUlJFTlRf
U09VUkNFX1NQQU4oKSBcCisgICAgU291cmNlU3Bhbihfc3RhcnRPZkVsZW1lbnRQb3NpdGlvbiwg
bV9sZXhlci5jdXJyZW50UG9zaXRpb24oKSkKKworI2RlZmluZSBSRVRVUk5fTk9ERSh0eXBlLCAu
Li4pIFwKKyAgICBkbyB7IFwKKyAgICAgICAgQVNUOjp0eXBlIGFzdE5vZGVSZXN1bHQoQ1VSUkVO
VF9TT1VSQ0VfU1BBTigpLCBfX1ZBX0FSR1NfXyk7IFwKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92
ZShhc3ROb2RlUmVzdWx0KSB9OyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKy8vIFBhc3Npbmcg
MCBhcmd1bWVudHMgYmV5b25kIHRoZSB0eXBlIHRvIFJFVFVSTl9OT0RFIGlzIGludmFsaWQgYmVj
YXVzZSBvZiBhIHN0dXBpZCBsaW1pdGF0aW9uIG9mIHRoZSBDIHByZXByb2Nlc3NvcgorI2RlZmlu
ZSBSRVRVUk5fTk9ERV9OT19BUkdTKHR5cGUpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgQVNUOjp0
eXBlIGFzdE5vZGVSZXN1bHQoQ1VSUkVOVF9TT1VSQ0VfU1BBTigpKTsgXAorICAgICAgICByZXR1
cm4geyBXVEZNb3ZlKGFzdE5vZGVSZXN1bHQpIH07IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwor
I2RlZmluZSBSRVRVUk5fTk9ERV9SRUYodHlwZSwgLi4uKSBcCisgICAgcmV0dXJuIHsgbWFrZVVu
aXF1ZVJlZjxBU1Q6OnR5cGU+KENVUlJFTlRfU09VUkNFX1NQQU4oKSwgX19WQV9BUkdTX18pIH07
CisKKy8vIFBhc3NpbmcgMCBhcmd1bWVudHMgYmV5b25kIHRoZSB0eXBlIHRvIFJFVFVSTl9OT0RF
X1JFRiBpcyBpbnZhbGlkIGJlY2F1c2Ugb2YgYSBzdHVwaWQgbGltaXRhdGlvbiBvZiB0aGUgQyBw
cmVwcm9jZXNzb3IKKyNkZWZpbmUgUkVUVVJOX05PREVfUkVGX05PX0FSR1ModHlwZSkgXAorICAg
IHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjp0eXBlPihDVVJSRU5UX1NPVVJDRV9TUEFOKCkp
IH07CisKKyNkZWZpbmUgRkFJTChzdHJpbmcpIFwKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
RXJyb3Ioc3RyaW5nLCBDVVJSRU5UX1NPVVJDRV9TUEFOKCkpKTsKKworLy8gV2FybmluZzogY2Fu
bm90IHVzZSB0aGUgZG8uLndoaWxlIHRyaWNrIGJlY2F1c2UgaXQgZGVmaW5lcyBhIG5ldyBpZGVu
dGlmaWVyIG5hbWVkIGBuYW1lYC4KKy8vIFNvIGRvIG5vdCB1c2UgYWZ0ZXIgYW4gaWYvZm9yL3do
aWxlIHdpdGhvdXQgYnJhY2VzLgorI2RlZmluZSBQQVJTRShuYW1lLCBlbGVtZW50LCAuLi4pIFwK
KyAgICBhdXRvIG5hbWUjI0V4cGVjdGVkID0gcGFyc2UjI2VsZW1lbnQoX19WQV9BUkdTX18pOyBc
CisgICAgaWYgKCFuYW1lIyNFeHBlY3RlZCkgXAorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQobmFtZSMjRXhwZWN0ZWQuZXJyb3IoKSk7IFwKKyAgICBhdXRvJiBuYW1lID0gKm5hbWUjI0V4
cGVjdGVkOworCisvLyBXYXJuaW5nOiBjYW5ub3QgdXNlIHRoZSBkby4ud2hpbGUgdHJpY2sgYmVj
YXVzZSBpdCBkZWZpbmVzIGEgbmV3IGlkZW50aWZpZXIgbmFtZWQgYG5hbWVgLgorLy8gU28gZG8g
bm90IHVzZSBhZnRlciBhbiBpZi9mb3Ivd2hpbGUgd2l0aG91dCBicmFjZXMuCisjZGVmaW5lIENP
TlNVTUVfVFlQRV9OQU1FRChuYW1lLCB0eXBlKSBcCisgICAgYXV0byBuYW1lIyNFeHBlY3RlZCA9
IGNvbnN1bWVUeXBlKFRva2VuVHlwZTo6dHlwZSk7IFwKKyAgICBpZiAoIW5hbWUjI0V4cGVjdGVk
KSB7IFwKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOyBcCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCJFeHBlY3RlZCBhICIpOyBcCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRvU3RyaW5n
KFRva2VuVHlwZTo6dHlwZSkpOyBcCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIGJ1dCBnb3Qg
YSAiKTsgXAorICAgICAgICBidWlsZGVyLmFwcGVuZCh0b1N0cmluZyhuYW1lIyNFeHBlY3RlZC5l
cnJvcigpKSk7IFwKKyAgICAgICAgRkFJTChidWlsZGVyLnRvU3RyaW5nKCkpOyBcCisgICAgfSBc
CisgICAgYXV0byYgbmFtZSA9ICpuYW1lIyNFeHBlY3RlZDsKKworI2RlZmluZSBDT05TVU1FX1RZ
UEUodHlwZSkgXAorICAgIGRvIHsgXAorICAgICAgICBhdXRvIGV4cGVjdGVkVG9rZW4gPSBjb25z
dW1lVHlwZShUb2tlblR5cGU6OnR5cGUpOyBcCisgICAgICAgIGlmICghZXhwZWN0ZWRUb2tlbikg
eyBcCisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7IFwKKyAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCJFeHBlY3RlZCBhICIpOyBcCisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCh0b1N0cmluZyhUb2tlblR5cGU6OnR5cGUpKTsgXAorICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoIiwgYnV0IGdvdCBhICIpOyBcCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh0b1N0cmlu
ZyhleHBlY3RlZFRva2VuLmVycm9yKCkpKTsgXAorICAgICAgICAgICAgRkFJTChidWlsZGVyLnRv
U3RyaW5nKCkpOyBcCisgICAgICAgIH0gXAorICAgIH0gd2hpbGUoZmFsc2UpCisKK3RlbXBsYXRl
PHR5cGVuYW1lIExleGVyPgorY2xhc3MgUGFyc2VyIHsKK3B1YmxpYzoKKyAgICBQYXJzZXIoTGV4
ZXImIGxleGVyKQorICAgICAgICA6IG1fbGV4ZXIobGV4ZXIpCisgICAgICAgICwgbV9jdXJyZW50
KGxleGVyLmxleCgpKQorICAgIHsKKyAgICB9CisKKyAgICBFeHBlY3RlZDxBU1Q6OlNoYWRlck1v
ZHVsZSwgRXJyb3I+IHBhcnNlU2hhZGVyKCk7CisKK3ByaXZhdGU6CisgICAgLy8gVW5pcXVlUmVm
IHdoZW5ldmVyIGl0IGNhbiByZXR1cm4gbXVsdGlwbGUgdHlwZXMuCisgICAgRXhwZWN0ZWQ8VW5p
cXVlUmVmPEFTVDo6R2xvYmFsRGVjbD4sIEVycm9yPiBwYXJzZUdsb2JhbERlY2woKTsKKyAgICBF
eHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZXMsIEVycm9yPiBwYXJzZUF0dHJpYnV0ZXMoKTsKKyAgICBF
eHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpBdHRyaWJ1dGU+LCBFcnJvcj4gcGFyc2VBdHRyaWJ1dGUo
KTsKKyAgICBFeHBlY3RlZDxBU1Q6OlN0cnVjdERlY2wsIEVycm9yPiBwYXJzZVN0cnVjdERlY2wo
QVNUOjpBdHRyaWJ1dGVzJiYpOworICAgIEV4cGVjdGVkPEFTVDo6U3RydWN0TWVtYmVyLCBFcnJv
cj4gcGFyc2VTdHJ1Y3RNZW1iZXIoKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpUeXBl
RGVjbD4sIEVycm9yPiBwYXJzZVR5cGVEZWNsKCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFT
VDo6VHlwZURlY2w+LCBFcnJvcj4gcGFyc2VUeXBlRGVjbEFmdGVySWRlbnRpZmllcihTdHJpbmdW
aWV3JiYsIFNvdXJjZVBvc2l0aW9uIHN0YXJ0KTsKKyAgICBFeHBlY3RlZDxBU1Q6Okdsb2JhbFZh
cmlhYmxlRGVjbCwgRXJyb3I+IHBhcnNlR2xvYmFsVmFyaWFibGVEZWNsKEFTVDo6QXR0cmlidXRl
cyYmKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlUXVhbGlmaWVyLCBFcnJvcj4gcGFyc2VW
YXJpYWJsZVF1YWxpZmllcigpOworICAgIEV4cGVjdGVkPEFTVDo6U3RvcmFnZUNsYXNzLCBFcnJv
cj4gcGFyc2VTdG9yYWdlQ2xhc3MoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OkFjY2Vzc01vZGUsIEVy
cm9yPiBwYXJzZUFjY2Vzc01vZGUoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbCwg
RXJyb3I+IHBhcnNlRnVuY3Rpb25EZWNsKEFTVDo6QXR0cmlidXRlcyYmKTsKKyAgICBFeHBlY3Rl
ZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHBhcnNlUGFyYW1ldGVyKCk7CisgICAgRXhwZWN0ZWQ8
VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50PiwgRXJyb3I+IHBhcnNlU3RhdGVtZW50KCk7CisgICAg
RXhwZWN0ZWQ8QVNUOjpDb21wb3VuZFN0YXRlbWVudCwgRXJyb3I+IHBhcnNlQ29tcG91bmRTdGF0
ZW1lbnQoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlJldHVyblN0YXRlbWVudCwgRXJyb3I+IHBhcnNl
UmV0dXJuU3RhdGVtZW50KCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4sIEVycm9yPiBwYXJzZVNob3J0Q2lyY3VpdE9yRXhwcmVzc2lvbigpOworICAgIEV4cGVjdGVk
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VSZWxhdGlvbmFsRXhwcmVz
c2lvbigpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4g
cGFyc2VTaGlmdEV4cHJlc3Npb24oKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiwgRXJyb3I+IHBhcnNlQWRkaXRpdmVFeHByZXNzaW9uKCk7CisgICAgRXhwZWN0ZWQ8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZU11bHRpcGxpY2F0aXZlRXhw
cmVzc2lvbigpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJv
cj4gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPiwgRXJyb3I+IHBhcnNlU2luZ3VsYXJFeHByZXNzaW9uKCk7CisgICAgRXhwZWN0
ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVBvc3RmaXhFeHByZXNz
aW9uKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgYmFzZSwgU291cmNlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbik7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVy
cm9yPiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICBFeHBlY3RlZDxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHBhcnNlTEhTRXhwcmVzc2lvbigpOwor
ICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VDb3Jl
TEhTRXhwcmVzc2lvbigpOworICAgIEV4cGVjdGVkPFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPj4sIEVycm9yPiBwYXJzZUFyZ3VtZW50RXhwcmVzc2lvbkxpc3QoKTsKKworICAgIEV4
cGVjdGVkPFRva2VuLCBUb2tlblR5cGU+IGNvbnN1bWVUeXBlKFRva2VuVHlwZSB0eXBlKTsKKyAg
ICB2b2lkIGNvbnN1bWUoKTsKKworICAgIFRva2VuJiBjdXJyZW50KCkgeyByZXR1cm4gbV9jdXJy
ZW50OyB9CisKKyAgICBMZXhlciYgbV9sZXhlcjsKKyAgICBUb2tlbiBtX2N1cnJlbnQ7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPEFTVDo6U2hhZGVyTW9kdWxlLCBF
cnJvcj4gcGFyc2UoY29uc3QgU3RyaW5nJiB3Z3NsKQoreworICAgIExleGVyIGxleGVyKHdnc2wp
OworICAgIFBhcnNlciBwYXJzZXIobGV4ZXIpOworICAgIAorICAgIHJldHVybiBwYXJzZXIucGFy
c2VTaGFkZXIoKTsKK30KKworRXhwZWN0ZWQ8QVNUOjpTaGFkZXJNb2R1bGUsIEVycm9yPiBwYXJz
ZUxDaGFyKGNvbnN0IFN0cmluZyYgd2dzbCkKK3sKKyAgICByZXR1cm4gcGFyc2U8TGV4ZXI8TENo
YXI+Pih3Z3NsKTsKK30KKworRXhwZWN0ZWQ8QVNUOjpTaGFkZXJNb2R1bGUsIEVycm9yPiBwYXJz
ZVVDaGFyKGNvbnN0IFN0cmluZyYgd2dzbCkKK3sKKyAgICByZXR1cm4gcGFyc2U8TGV4ZXI8VUNo
YXI+Pih3Z3NsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBlY3RlZDxUb2tl
biwgVG9rZW5UeXBlPiBQYXJzZXI8TGV4ZXI+Ojpjb25zdW1lVHlwZShUb2tlblR5cGUgdHlwZSkK
K3sKKyAgICBpZiAoY3VycmVudCgpLm1fdHlwZSA9PSB0eXBlKQorICAgIHsKKyAgICAgICAgRXhw
ZWN0ZWQ8VG9rZW4sIFRva2VuVHlwZT4gcmVzdWx0ID0geyBtX2N1cnJlbnQgfTsKKyAgICAgICAg
bV9jdXJyZW50ID0gbV9sZXhlci5sZXgoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGN1cnJlbnQoKS5tX3R5cGUpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBMZXhlcj4KK3ZvaWQgUGFyc2VyPExleGVyPjo6Y29uc3VtZSgpCit7Cisg
ICAgbV9jdXJyZW50ID0gbV9sZXhlci5sZXgoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4
ZXI+CitFeHBlY3RlZDxBU1Q6OlNoYWRlck1vZHVsZSwgRXJyb3I+IFBhcnNlcjxMZXhlcj46OnBh
cnNlU2hhZGVyKCkKK3sKKyAgICBTVEFSVF9QQVJTRSgpOworCisgICAgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6Okdsb2JhbERpcmVjdGl2ZT4+IGRpcmVjdGl2ZXM7CisgICAgLy8gRklYTUU6IHBhcnNl
IGRpcmVjdGl2ZXMgaGVyZS4KKworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpHbG9iYWxEZWNs
Pj4gZGVjbHM7CisgICAgd2hpbGUgKCFtX2xleGVyLmlzQXRFbmRPZkZpbGUoKSkgeworICAgICAg
ICBQQVJTRShnbG9iYWxEZWNsLCBHbG9iYWxEZWNsKQorICAgICAgICBkZWNscy5hcHBlbmQoV1RG
TW92ZShnbG9iYWxEZWNsKSk7CisgICAgfQorCisgICAgUkVUVVJOX05PREUoU2hhZGVyTW9kdWxl
LCBXVEZNb3ZlKGRpcmVjdGl2ZXMpLCBXVEZNb3ZlKGRlY2xzKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6R2xvYmFsRGVjbD4sIEVycm9y
PiBQYXJzZXI8TGV4ZXI+OjpwYXJzZUdsb2JhbERlY2woKQoreworICAgIFNUQVJUX1BBUlNFKCk7
CisKKyAgICBQQVJTRShhdHRyaWJ1dGVzLCBBdHRyaWJ1dGVzKTsKKworICAgIHN3aXRjaChjdXJy
ZW50KCkubV90eXBlKSB7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRTdHJ1Y3Q6IHsKKyAg
ICAgICAgUEFSU0Uoc3RydWN0RGVjbCwgU3RydWN0RGVjbCwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7
CisgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpTdHJ1Y3REZWNsPihXVEZNb3Zl
KHN0cnVjdERlY2wpKSB9OworICAgIH0KKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFZhcjog
eworICAgICAgICBQQVJTRSh2YXJEZWNsLCBHbG9iYWxWYXJpYWJsZURlY2wsIFdURk1vdmUoYXR0
cmlidXRlcykpOworICAgICAgICBDT05TVU1FX1RZUEUoU2VtaWNvbG9uKTsKKyAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbD4oV1RGTW92ZSh2YXJE
ZWNsKSkgfTsKKyAgICB9CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRGbjogeworICAgICAg
ICBQQVJTRShmbiwgRnVuY3Rpb25EZWNsLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICAgICAg
cmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkZ1bmN0aW9uRGVjbD4oV1RGTW92ZShmbikpIH07
CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEZBSUwoIlRyeWluZyB0byBwYXJzZSBhIEds
b2JhbERlY2wsIGV4cGVjdGVkICd2YXInLCAnZm4nLCBvciAnc3RydWN0Jy4iKTsKKyAgICB9Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVzLCBF
cnJvcj4gUGFyc2VyPExleGVyPjo6cGFyc2VBdHRyaWJ1dGVzKCkKK3sKKyAgICBBU1Q6OkF0dHJp
YnV0ZXMgYXR0cmlidXRlczsKKworICAgIHdoaWxlIChjdXJyZW50KCkubV90eXBlID09IFRva2Vu
VHlwZTo6QXR0cmlidXRlKSB7CisgICAgICAgIFBBUlNFKGZpcnN0QXR0cmlidXRlLCBBdHRyaWJ1
dGUpOworICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChXVEZNb3ZlKGZpcnN0QXR0cmlidXRlKSk7
CisgICAgfQorCisgICAgcmV0dXJuIHsgV1RGTW92ZShhdHRyaWJ1dGVzKSB9OworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkF0dHJpYnV0ZT4s
IEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZUF0dHJpYnV0ZSgpCit7CisgICAgU1RBUlRfUEFS
U0UoKTsKKworICAgIENPTlNVTUVfVFlQRShBdHRyaWJ1dGUpOworICAgIENPTlNVTUVfVFlQRV9O
QU1FRChpZGVudCwgSWRlbnRpZmllcik7CisgICAgaWYgKGlkZW50Lm1faWRlbnQgPT0gImdyb3Vw
IikgeworICAgICAgICBDT05TVU1FX1RZUEUoUGFyZW5MZWZ0KTsKKyAgICAgICAgLy8gRklYTUU6
IHNob3VsZCBtb3JlIGtpbmRzIG9mIGxpdGVyYWxzIGJlIGFjY2VwdGVkIGhlcmU/CisgICAgICAg
IENPTlNVTUVfVFlQRV9OQU1FRChpZCwgSW50ZWdlckxpdGVyYWwpOworICAgICAgICBDT05TVU1F
X1RZUEUoUGFyZW5SaWdodCk7CisgICAgICAgIFJFVFVSTl9OT0RFX1JFRihHcm91cEF0dHJpYnV0
ZSwgaWQubV9saXRlcmFsVmFsdWUpOworICAgIH0KKyAgICBpZiAoaWRlbnQubV9pZGVudCA9PSAi
YmluZGluZyIpIHsKKyAgICAgICAgQ09OU1VNRV9UWVBFKFBhcmVuTGVmdCk7CisgICAgICAgIC8v
IEZJWE1FOiBzaG91bGQgbW9yZSBraW5kcyBvZiBsaXRlcmFscyBiZSBhY2NlcHRlZCBoZXJlPwor
ICAgICAgICBDT05TVU1FX1RZUEVfTkFNRUQoaWQsIEludGVnZXJMaXRlcmFsKTsKKyAgICAgICAg
Q09OU1VNRV9UWVBFKFBhcmVuUmlnaHQpOworICAgICAgICBSRVRVUk5fTk9ERV9SRUYoQmluZGlu
Z0F0dHJpYnV0ZSwgaWQubV9saXRlcmFsVmFsdWUpOworICAgIH0KKyAgICBpZiAoaWRlbnQubV9p
ZGVudCA9PSAic3RhZ2UiKSB7CisgICAgICAgIENPTlNVTUVfVFlQRShQYXJlbkxlZnQpOworICAg
ICAgICBDT05TVU1FX1RZUEVfTkFNRUQoc3RhZ2UsIElkZW50aWZpZXIpOworICAgICAgICBDT05T
VU1FX1RZUEUoUGFyZW5SaWdodCk7CisgICAgICAgIGlmIChzdGFnZS5tX2lkZW50ID09ICJjb21w
dXRlIikKKyAgICAgICAgICAgIFJFVFVSTl9OT0RFX1JFRihTdGFnZUF0dHJpYnV0ZSwgQVNUOjpT
dGFnZUF0dHJpYnV0ZTo6U3RhZ2U6OkNvbXB1dGUpOworICAgICAgICBpZiAoc3RhZ2UubV9pZGVu
dCA9PSAidmVydGV4IikKKyAgICAgICAgICAgIFJFVFVSTl9OT0RFX1JFRihTdGFnZUF0dHJpYnV0
ZSwgQVNUOjpTdGFnZUF0dHJpYnV0ZTo6U3RhZ2U6OlZlcnRleCk7CisgICAgICAgIGlmIChzdGFn
ZS5tX2lkZW50ID09ICJmcmFnbWVudCIpCisgICAgICAgICAgICBSRVRVUk5fTk9ERV9SRUYoU3Rh
Z2VBdHRyaWJ1dGUsIEFTVDo6U3RhZ2VBdHRyaWJ1dGU6OlN0YWdlOjpGcmFnbWVudCk7CisgICAg
ICAgIEZBSUwoIkludmFsaWQgc3RhZ2UgYXR0cmlidXRlLCB0aGUgb25seSBvcHRpb25zIGFyZSAn
Y29tcHV0ZScsICd2ZXJ0ZXgnLCAnZnJhZ21lbnQnLiIpOworICAgIH0KKyAgICBpZiAoaWRlbnQu
bV9pZGVudCA9PSAibG9jYXRpb24iKSB7CisgICAgICAgIENPTlNVTUVfVFlQRShQYXJlbkxlZnQp
OworICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG1vcmUga2luZHMgb2YgbGl0ZXJhbHMgYmUgYWNj
ZXB0ZWQgaGVyZT8KKyAgICAgICAgQ09OU1VNRV9UWVBFX05BTUVEKGlkLCBJbnRlZ2VyTGl0ZXJh
bCk7CisgICAgICAgIENPTlNVTUVfVFlQRShQYXJlblJpZ2h0KTsKKyAgICAgICAgUkVUVVJOX05P
REVfUkVGKExvY2F0aW9uQXR0cmlidXRlLCBpZC5tX2xpdGVyYWxWYWx1ZSk7CisgICAgfQorICAg
IGlmIChpZGVudC5tX2lkZW50ID09ICJidWlsdGluIikgeworICAgICAgICBDT05TVU1FX1RZUEUo
UGFyZW5MZWZ0KTsKKyAgICAgICAgQ09OU1VNRV9UWVBFX05BTUVEKG5hbWUsIElkZW50aWZpZXIp
OworICAgICAgICBDT05TVU1FX1RZUEUoUGFyZW5SaWdodCk7CisgICAgICAgIFJFVFVSTl9OT0RF
X1JFRihCdWlsdGluQXR0cmlidXRlLCBuYW1lLm1faWRlbnQpOworICAgIH0KKyAgICBGQUlMKCJV
bmtub3duIGF0dHJpYnV0ZSwgdGhlIG9ubHkgc3VwcG9ydGVkIGF0dHJpYnV0ZXMgYXJlICdncm91
cCcsICdiaW5kaW5nJywgJ3N0YWdlJy4iKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+
CitFeHBlY3RlZDxBU1Q6OlN0cnVjdERlY2wsIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVN0
cnVjdERlY2woQVNUOjpBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKK3sKKyAgICBTVEFSVF9QQVJT
RSgpOworCisgICAgQ09OU1VNRV9UWVBFKEtleXdvcmRTdHJ1Y3QpOworICAgIENPTlNVTUVfVFlQ
RV9OQU1FRChuYW1lLCBJZGVudGlmaWVyKTsKKyAgICBDT05TVU1FX1RZUEUoQnJhY2VMZWZ0KTsK
KworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpTdHJ1Y3RNZW1iZXI+PiBtZW1iZXJzOworICAg
IHdoaWxlIChjdXJyZW50KCkubV90eXBlICE9IFRva2VuVHlwZTo6QnJhY2VSaWdodCkgeworICAg
ICAgICBQQVJTRShtZW1iZXIsIFN0cnVjdE1lbWJlcik7CisgICAgICAgIG1lbWJlcnMuYXBwZW5k
KG1ha2VVbmlxdWVSZWY8QVNUOjpTdHJ1Y3RNZW1iZXI+KFdURk1vdmUobWVtYmVyKSkpOworICAg
IH0KKworICAgIENPTlNVTUVfVFlQRShCcmFjZVJpZ2h0KTsKKworICAgIFJFVFVSTl9OT0RFKFN0
cnVjdERlY2wsIG5hbWUubV9pZGVudCwgV1RGTW92ZShtZW1iZXJzKSwgV1RGTW92ZShhdHRyaWJ1
dGVzKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNUOjpTdHJ1
Y3RNZW1iZXIsIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVN0cnVjdE1lbWJlcigpCit7Cisg
ICAgU1RBUlRfUEFSU0UoKTsKKworICAgIFBBUlNFKGF0dHJpYnV0ZXMsIEF0dHJpYnV0ZXMpOwor
ICAgIENPTlNVTUVfVFlQRV9OQU1FRChuYW1lLCBJZGVudGlmaWVyKTsKKyAgICBDT05TVU1FX1RZ
UEUoQ29sb24pOworICAgIFBBUlNFKHR5cGUsIFR5cGVEZWNsKTsKKyAgICBDT05TVU1FX1RZUEUo
U2VtaWNvbG9uKTsKKworICAgIFJFVFVSTl9OT0RFKFN0cnVjdE1lbWJlciwgbmFtZS5tX2lkZW50
LCBXVEZNb3ZlKHR5cGUpLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgTGV4ZXI+CitFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpUeXBlRGVjbD4sIEVycm9yPiBQ
YXJzZXI8TGV4ZXI+OjpwYXJzZVR5cGVEZWNsKCkKK3sKKyAgICBTVEFSVF9QQVJTRSgpOworCisg
ICAgaWYgKGN1cnJlbnQoKS5tX3R5cGUgPT0gVG9rZW5UeXBlOjpLZXl3b3JkSTMyKSB7CisgICAg
ICAgIGNvbnN1bWUoKTsKKyAgICAgICAgUkVUVVJOX05PREVfUkVGKE5hbWVkVHlwZSwgU3RyaW5n
VmlldyB7ICJpMzIiIH0pOworICAgIH0KKyAgICBpZiAoY3VycmVudCgpLm1fdHlwZSA9PSBUb2tl
blR5cGU6OktleXdvcmRGMzIpIHsKKyAgICAgICAgY29uc3VtZSgpOworICAgICAgICBSRVRVUk5f
Tk9ERV9SRUYoTmFtZWRUeXBlLCBTdHJpbmdWaWV3IHsgImYzMiIgfSk7CisgICAgfQorICAgIGlm
IChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6S2V5d29yZFUzMikgeworICAgICAgICBj
b25zdW1lKCk7CisgICAgICAgIFJFVFVSTl9OT0RFX1JFRihOYW1lZFR5cGUsIFN0cmluZ1ZpZXcg
eyAidTMyIiB9KTsKKyAgICB9CisgICAgaWYgKGN1cnJlbnQoKS5tX3R5cGUgPT0gVG9rZW5UeXBl
OjpLZXl3b3JkQm9vbCkgeworICAgICAgICBjb25zdW1lKCk7CisgICAgICAgIFJFVFVSTl9OT0RF
X1JFRihOYW1lZFR5cGUsIFN0cmluZ1ZpZXcgeyAiYm9vbCIgfSk7CisgICAgfQorICAgIGlmIChj
dXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6SWRlbnRpZmllcikgeworICAgICAgICBDT05T
VU1FX1RZUEVfTkFNRUQobmFtZSwgSWRlbnRpZmllcik7CisgICAgICAgIHJldHVybiBwYXJzZVR5
cGVEZWNsQWZ0ZXJJZGVudGlmaWVyKFdURk1vdmUobmFtZS5tX2lkZW50KSwgX3N0YXJ0T2ZFbGVt
ZW50UG9zaXRpb24pOworICAgIH0KKworICAgIEZBSUwoIlRyaWVkIHBhcnNpbmcgYSB0eXBlIGFu
ZCBpdCBkaWQgbm90IHN0YXJ0IHdpdGggYW4gaWRlbnRpZmllciIpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWNsPiwgRXJyb3I+
IFBhcnNlcjxMZXhlcj46OnBhcnNlVHlwZURlY2xBZnRlcklkZW50aWZpZXIoU3RyaW5nVmlldyYm
IG5hbWUsIFNvdXJjZVBvc2l0aW9uIF9zdGFydE9mRWxlbWVudFBvc2l0aW9uKQoreworICAgIGlm
IChhdXRvIGtpbmQgPSBBU1Q6OlBhcmFtZXRlcml6ZWRUeXBlOjpzdHJpbmdWaWV3VG9LaW5kKG5h
bWUpKSB7CisgICAgICAgIENPTlNVTUVfVFlQRShMVCk7CisgICAgICAgIFBBUlNFKGVsZW1lbnRU
eXBlLCBUeXBlRGVjbCk7CisgICAgICAgIENPTlNVTUVfVFlQRShHVCk7CisgICAgICAgIFJFVFVS
Tl9OT0RFX1JFRihQYXJhbWV0ZXJpemVkVHlwZSwgKmtpbmQsIFdURk1vdmUoZWxlbWVudFR5cGUp
KTsKKyAgICB9CisgICAgUkVUVVJOX05PREVfUkVGKE5hbWVkVHlwZSwgV1RGTW92ZShuYW1lKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNUOjpHbG9iYWxWYXJp
YWJsZURlY2wsIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZUdsb2JhbFZhcmlhYmxlRGVjbChB
U1Q6OkF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQoreworICAgIFNUQVJUX1BBUlNFKCk7CisKKyAg
ICBDT05TVU1FX1RZUEUoS2V5d29yZFZhcik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpW
YXJpYWJsZVF1YWxpZmllcj4gbWF5YmVRdWFsaWZpZXIgPSBudWxscHRyOworICAgIGlmIChjdXJy
ZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6TFQpIHsKKyAgICAgICAgUEFSU0UodmFyaWFibGVR
dWFsaWZpZXIsIFZhcmlhYmxlUXVhbGlmaWVyKTsKKyAgICAgICAgbWF5YmVRdWFsaWZpZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6VmFyaWFibGVRdWFsaWZpZXI+KFdURk1vdmUodmFyaWFibGVR
dWFsaWZpZXIpKTsKKyAgICB9CisKKyAgICBDT05TVU1FX1RZUEVfTkFNRUQobmFtZSwgSWRlbnRp
Zmllcik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlRGVjbD4gbWF5YmVUeXBlID0g
bnVsbHB0cjsKKyAgICBpZiAoY3VycmVudCgpLm1fdHlwZSA9PSBUb2tlblR5cGU6OkNvbG9uKSB7
CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgUEFSU0UodHlwZURlY2wsIFR5cGVEZWNsKTsK
KyAgICAgICAgbWF5YmVUeXBlID0gdHlwZURlY2wubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgfQor
CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4gbWF5YmVJbml0aWFsaXplciA9
IG51bGxwdHI7CisgICAgLy8gRklYTUU6IGluaXRpYWxpemVyCisKKyAgICBSRVRVUk5fTk9ERShH
bG9iYWxWYXJpYWJsZURlY2wsIG5hbWUubV9pZGVudCwgV1RGTW92ZShtYXliZVF1YWxpZmllciks
IFdURk1vdmUobWF5YmVUeXBlKSwgV1RGTW92ZShtYXliZUluaXRpYWxpemVyKSwgV1RGTW92ZShh
dHRyaWJ1dGVzKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNU
OjpWYXJpYWJsZVF1YWxpZmllciwgRXJyb3I+IFBhcnNlcjxMZXhlcj46OnBhcnNlVmFyaWFibGVR
dWFsaWZpZXIoKQoreworICAgIFNUQVJUX1BBUlNFKCk7CisKKyAgICBDT05TVU1FX1RZUEUoTFQp
OworICAgIFBBUlNFKHN0b3JhZ2VDbGFzcywgU3RvcmFnZUNsYXNzKTsKKworICAgIC8vIEZJWE1F
OiB2ZXJpZnkgdGhhdCBSZWFkIGlzIHRoZSBjb3JyZWN0IGRlZmF1bHQgaW4gYWxsIGNhc2VzLgor
ICAgIEFTVDo6QWNjZXNzTW9kZSBhY2Nlc3NNb2RlID0gQVNUOjpBY2Nlc3NNb2RlOjpSZWFkOwor
ICAgIGlmIChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6Q29tbWEpIHsKKyAgICAgICAg
Y29uc3VtZSgpOworICAgICAgICBQQVJTRShhY3R1YWxBY2Nlc3NNb2RlLCBBY2Nlc3NNb2RlKTsK
KyAgICAgICAgYWNjZXNzTW9kZSA9IGFjdHVhbEFjY2Vzc01vZGU7CisgICAgfQorCisgICAgQ09O
U1VNRV9UWVBFKEdUKTsKKworICAgIFJFVFVSTl9OT0RFKFZhcmlhYmxlUXVhbGlmaWVyLCBzdG9y
YWdlQ2xhc3MsIGFjY2Vzc01vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4
cGVjdGVkPEFTVDo6U3RvcmFnZUNsYXNzLCBFcnJvcj4gUGFyc2VyPExleGVyPjo6cGFyc2VTdG9y
YWdlQ2xhc3MoKQoreworICAgIFNUQVJUX1BBUlNFKCk7CisKKyAgICBpZiAoY3VycmVudCgpLm1f
dHlwZSA9PSBUb2tlblR5cGU6OktleXdvcmRGdW5jdGlvbikgeworICAgICAgICBjb25zdW1lKCk7
CisgICAgICAgIHJldHVybiB7IEFTVDo6U3RvcmFnZUNsYXNzOjpGdW5jdGlvbiB9OworICAgIH0K
KyAgICBpZiAoY3VycmVudCgpLm1fdHlwZSA9PSBUb2tlblR5cGU6OktleXdvcmRQcml2YXRlKSB7
CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgcmV0dXJuIHsgQVNUOjpTdG9yYWdlQ2xhc3M6
OlByaXZhdGUgfTsKKyAgICB9CisgICAgaWYgKGN1cnJlbnQoKS5tX3R5cGUgPT0gVG9rZW5UeXBl
OjpLZXl3b3JkV29ya2dyb3VwKSB7CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgcmV0dXJu
IHsgQVNUOjpTdG9yYWdlQ2xhc3M6Oldvcmtncm91cCB9OworICAgIH0KKyAgICBpZiAoY3VycmVu
dCgpLm1fdHlwZSA9PSBUb2tlblR5cGU6OktleXdvcmRVbmlmb3JtKSB7CisgICAgICAgIGNvbnN1
bWUoKTsKKyAgICAgICAgcmV0dXJuIHsgQVNUOjpTdG9yYWdlQ2xhc3M6OlVuaWZvcm0gfTsKKyAg
ICB9CisgICAgaWYgKGN1cnJlbnQoKS5tX3R5cGUgPT0gVG9rZW5UeXBlOjpLZXl3b3JkU3RvcmFn
ZSkgeworICAgICAgICBjb25zdW1lKCk7CisgICAgICAgIHJldHVybiB7IEFTVDo6U3RvcmFnZUNs
YXNzOjpTdG9yYWdlIH07CisgICAgfQorCisgICAgRkFJTCgiRXhwZWN0ZWQgb25lIG9mICdmdW5j
dGlvbicvJ3ByaXZhdGUnLydzdG9yYWdlJy8ndW5pZm9ybScvJ3dvcmtncm91cCciKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBlY3RlZDxBU1Q6OkFjY2Vzc01vZGUsIEVycm9y
PiBQYXJzZXI8TGV4ZXI+OjpwYXJzZUFjY2Vzc01vZGUoKQoreworICAgIFNUQVJUX1BBUlNFKCk7
CisKKyAgICBpZiAoY3VycmVudCgpLm1fdHlwZSA9PSBUb2tlblR5cGU6OktleXdvcmRSZWFkKSB7
CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgcmV0dXJuIHsgQVNUOjpBY2Nlc3NNb2RlOjpS
ZWFkIH07CisgICAgfQorICAgIGlmIChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6S2V5
d29yZFdyaXRlKSB7CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgcmV0dXJuIHsgQVNUOjpB
Y2Nlc3NNb2RlOjpXcml0ZSB9OworICAgIH0KKyAgICBpZiAoY3VycmVudCgpLm1fdHlwZSA9PSBU
b2tlblR5cGU6OktleXdvcmRSZWFkV3JpdGUpIHsKKyAgICAgICAgY29uc3VtZSgpOworICAgICAg
ICByZXR1cm4geyBBU1Q6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSB9OworICAgIH0KKworICAgIEZB
SUwoIkV4cGVjdGVkIG9uZSBvZiAncmVhZCcvJ3dyaXRlJy8ncmVhZF93cml0ZSciKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbCwgRXJy
b3I+IFBhcnNlcjxMZXhlcj46OnBhcnNlRnVuY3Rpb25EZWNsKEFTVDo6QXR0cmlidXRlcyYmIGF0
dHJpYnV0ZXMpCit7CisgICAgU1RBUlRfUEFSU0UoKTsKKworICAgIENPTlNVTUVfVFlQRShLZXl3
b3JkRm4pOworICAgIENPTlNVTUVfVFlQRV9OQU1FRChuYW1lLCBJZGVudGlmaWVyKTsKKworICAg
IENPTlNVTUVfVFlQRShQYXJlbkxlZnQpOworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpQYXJh
bWV0ZXI+PiBwYXJhbWV0ZXJzOworICAgIHdoaWxlIChjdXJyZW50KCkubV90eXBlICE9IFRva2Vu
VHlwZTo6UGFyZW5SaWdodCkgeworICAgICAgICBQQVJTRShwYXJhbWV0ZXIsIFBhcmFtZXRlcik7
CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpQYXJhbWV0ZXI+
KFdURk1vdmUocGFyYW1ldGVyKSkpOworICAgIH0KKyAgICBDT05TVU1FX1RZUEUoUGFyZW5SaWdo
dCk7CisKKyAgICBBU1Q6OkF0dHJpYnV0ZXMgcmV0dXJuQXR0cmlidXRlczsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpUeXBlRGVjbD4gbWF5YmVSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICBp
ZiAoY3VycmVudCgpLm1fdHlwZSA9PSBUb2tlblR5cGU6OkFycm93KSB7CisgICAgICAgIGNvbnN1
bWUoKTsKKyAgICAgICAgUEFSU0UocGFyc2VkUmV0dXJuQXR0cmlidXRlcywgQXR0cmlidXRlcyk7
CisgICAgICAgIHJldHVybkF0dHJpYnV0ZXMgPSBXVEZNb3ZlKHBhcnNlZFJldHVybkF0dHJpYnV0
ZXMpOworICAgICAgICBQQVJTRSh0eXBlLCBUeXBlRGVjbCk7CisgICAgICAgIG1heWJlUmV0dXJu
VHlwZSA9IHR5cGUubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgfQorCisgICAgUEFSU0UoYm9keSwg
Q29tcG91bmRTdGF0ZW1lbnQpOworCisgICAgUkVUVVJOX05PREUoRnVuY3Rpb25EZWNsLCBuYW1l
Lm1faWRlbnQsIFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUobWF5YmVSZXR1cm5UeXBlKSwg
V1RGTW92ZShib2R5KSwgV1RGTW92ZShhdHRyaWJ1dGVzKSwgV1RGTW92ZShyZXR1cm5BdHRyaWJ1
dGVzKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNUOjpQYXJh
bWV0ZXIsIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVBhcmFtZXRlcigpCit7CisgICAgU1RB
UlRfUEFSU0UoKTsKKworICAgIFBBUlNFKGF0dHJpYnV0ZXMsIEF0dHJpYnV0ZXMpOworICAgIENP
TlNVTUVfVFlQRV9OQU1FRChuYW1lLCBJZGVudGlmaWVyKQorICAgIENPTlNVTUVfVFlQRShDb2xv
bik7CisgICAgUEFSU0UodHlwZSwgVHlwZURlY2wpOworCisgICAgUkVUVVJOX05PREUoUGFyYW1l
dGVyLCBuYW1lLm1faWRlbnQsIFdURk1vdmUodHlwZSksIFdURk1vdmUoYXR0cmlidXRlcykpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlN0
YXRlbWVudD4sIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVN0YXRlbWVudCgpCit7CisgICAg
U1RBUlRfUEFSU0UoKTsKKworICAgIHN3aXRjaChjdXJyZW50KCkubV90eXBlKSB7CisgICAgY2Fz
ZSBUb2tlblR5cGU6OkJyYWNlTGVmdDogeworICAgICAgICBQQVJTRShjb21wb3VuZFN0bXQsIENv
bXBvdW5kU3RhdGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkNv
bXBvdW5kU3RhdGVtZW50PihXVEZNb3ZlKGNvbXBvdW5kU3RtdCkpIH07CisgICAgfQorICAgIGNh
c2UgVG9rZW5UeXBlOjpTZW1pY29sb246IHsKKyAgICAgICAgY29uc3VtZSgpOworICAgICAgICBW
ZWN0b3I8VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50Pj4gc3RhdGVtZW50czsKKyAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkNvbXBvdW5kU3RhdGVtZW50PihDVVJSRU5UX1NPVVJD
RV9TUEFOKCksIFdURk1vdmUoc3RhdGVtZW50cykpIH07CisgICAgfQorICAgIGNhc2UgVG9rZW5U
eXBlOjpLZXl3b3JkUmV0dXJuOiB7CisgICAgICAgIFBBUlNFKHJldHVyblN0bXQsIFJldHVyblN0
YXRlbWVudCk7CisgICAgICAgIENPTlNVTUVfVFlQRShTZW1pY29sb24pOworICAgICAgICByZXR1
cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6UmV0dXJuU3RhdGVtZW50PihXVEZNb3ZlKHJldHVyblN0
bXQpKSB9OworICAgIH0KKyAgICBjYXNlIFRva2VuVHlwZTo6SWRlbnRpZmllcjogeworICAgICAg
ICAvLyBGSVhNRTogdGhlcmUgd2lsbCBiZSBvdGhlciBjYXNlcyBoZXJlIGV2ZW50dWFsbHkgZm9y
IGZ1bmN0aW9uIGNhbGxzCisgICAgICAgIFBBUlNFKGxocywgTEhTRXhwcmVzc2lvbik7CisgICAg
ICAgIENPTlNVTUVfVFlQRShFcXVhbCk7CisgICAgICAgIFBBUlNFKHJocywgRXhwcmVzc2lvbik7
CisgICAgICAgIENPTlNVTUVfVFlQRShTZW1pY29sb24pOworICAgICAgICBSRVRVUk5fTk9ERV9S
RUYoQXNzaWdubWVudFN0YXRlbWVudCwgbGhzLm1vdmVUb1VuaXF1ZVB0cigpLCBXVEZNb3ZlKHJo
cykpOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBGQUlMKCJOb3QgYSB2YWxpZCBzdGF0
ZW1lbnQiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8
QVNUOjpDb21wb3VuZFN0YXRlbWVudCwgRXJyb3I+IFBhcnNlcjxMZXhlcj46OnBhcnNlQ29tcG91
bmRTdGF0ZW1lbnQoKQoreworICAgIFNUQVJUX1BBUlNFKCk7CisKKyAgICBDT05TVU1FX1RZUEUo
QnJhY2VMZWZ0KTsKKworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+PiBzdGF0
ZW1lbnRzOworICAgIHdoaWxlIChjdXJyZW50KCkubV90eXBlICE9IFRva2VuVHlwZTo6QnJhY2VS
aWdodCkgeworICAgICAgICBQQVJTRShzdG10LCBTdGF0ZW1lbnQpOworICAgICAgICBzdGF0ZW1l
bnRzLmFwcGVuZChXVEZNb3ZlKHN0bXQpKTsKKyAgICB9CisKKyAgICBDT05TVU1FX1RZUEUoQnJh
Y2VSaWdodCk7CisKKyAgICBSRVRVUk5fTk9ERShDb21wb3VuZFN0YXRlbWVudCwgV1RGTW92ZShz
dGF0ZW1lbnRzKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNU
OjpSZXR1cm5TdGF0ZW1lbnQsIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVJldHVyblN0YXRl
bWVudCgpCit7CisgICAgU1RBUlRfUEFSU0UoKTsKKworICAgIENPTlNVTUVfVFlQRShLZXl3b3Jk
UmV0dXJuKTsKKworICAgIGlmIChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6U2VtaWNv
bG9uKSB7CisgICAgICAgIFJFVFVSTl9OT0RFKFJldHVyblN0YXRlbWVudCwgeyB9KTsKKyAgICB9
CisKKyAgICBQQVJTRShleHByLCBTaG9ydENpcmN1aXRPckV4cHJlc3Npb24pOworICAgIFJFVFVS
Tl9OT0RFKFJldHVyblN0YXRlbWVudCwgZXhwci5tb3ZlVG9VbmlxdWVQdHIoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4sIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVNob3J0Q2lyY3VpdE9yRXhwcmVzc2lvbigp
Cit7CisgICAgLy8gRklYTUU6IGZpbGwgaW4KKyAgICByZXR1cm4gcGFyc2VSZWxhdGlvbmFsRXhw
cmVzc2lvbigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gUGFyc2VyPExleGVyPjo6cGFyc2VSZWxhdGlv
bmFsRXhwcmVzc2lvbigpCit7CisgICAgLy8gRklYTUU6IGZpbGwgaW4KKyAgICByZXR1cm4gcGFy
c2VTaGlmdEV4cHJlc3Npb24oKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBl
Y3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IFBhcnNlcjxMZXhlcj46OnBh
cnNlU2hpZnRFeHByZXNzaW9uKCkKK3sKKyAgICAvLyBGSVhNRTogZmlsbCBpbgorICAgIHJldHVy
biBwYXJzZUFkZGl0aXZlRXhwcmVzc2lvbigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMZXhl
cj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gUGFyc2VyPExl
eGVyPjo6cGFyc2VBZGRpdGl2ZUV4cHJlc3Npb24oKQoreworICAgIC8vIEZJWE1FOiBmaWxsIGlu
CisgICAgcmV0dXJuIHBhcnNlTXVsdGlwbGljYXRpdmVFeHByZXNzaW9uKCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4s
IEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbigpCit7
CisgICAgLy8gRklYTUU6IGZpbGwgaW4KKyAgICByZXR1cm4gcGFyc2VVbmFyeUV4cHJlc3Npb24o
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBlY3RlZDxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPiwgRXJyb3I+IFBhcnNlcjxMZXhlcj46OnBhcnNlVW5hcnlFeHByZXNzaW9u
KCkKK3sKKyAgICAvLyBGSVhNRTogZmlsbCBpbgorICAgIHJldHVybiBwYXJzZVNpbmd1bGFyRXhw
cmVzc2lvbigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gUGFyc2VyPExleGVyPjo6cGFyc2VTaW5ndWxh
ckV4cHJlc3Npb24oKQoreworICAgIFNUQVJUX1BBUlNFKCk7CisgICAgUEFSU0UoYmFzZSwgUHJp
bWFyeUV4cHJlc3Npb24pOworICAgIHJldHVybiBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKFdURk1v
dmUoYmFzZSksIF9zdGFydE9mRWxlbWVudFBvc2l0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgTGV4ZXI+CitFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IFBh
cnNlcjxMZXhlcj46OnBhcnNlUG9zdGZpeEV4cHJlc3Npb24oVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4mJiBiYXNlLCBTb3VyY2VQb3NpdGlvbiBzdGFydFBvc2l0aW9uKQoreworICAgIFNUQVJU
X1BBUlNFKCk7CisKKyAgICBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiBleHByID0gV1RGTW92
ZShiYXNlKTsKKyAgICAvLyBGSVhNRTogYWRkIHRoZSBjYXNlIGZvciBhcnJheS92ZWN0b3IvbWF0
cml4IGFjY2VzcworICAgIHdoaWxlIChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6UGVy
aW9kKSB7CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgQ09OU1VNRV9UWVBFX05BTUVEKGZp
ZWxkTmFtZSwgSWRlbnRpZmllcik7CisgICAgICAgIFNvdXJjZVNwYW4gc3BhbihzdGFydFBvc2l0
aW9uLCBtX2xleGVyLmN1cnJlbnRQb3NpdGlvbigpKTsKKyAgICAgICAgZXhwciA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpTdHJ1Y3R1cmVBY2Nlc3M+KHNwYW4sIFdURk1vdmUoZXhwciksIGZpZWxkTmFt
ZS5tX2lkZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4geyBXVEZNb3ZlKGV4cHIpIH07Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4sIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKCkKK3sK
KyAgICBTVEFSVF9QQVJTRSgpOworCisgICAgc3dpdGNoKGN1cnJlbnQoKS5tX3R5cGUpIHsKKyAg
ICBjYXNlIFRva2VuVHlwZTo6UGFyZW5MZWZ0OiB7CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICAg
ICAgUEFSU0UoZXhwciwgRXhwcmVzc2lvbik7CisgICAgICAgIENPTlNVTUVfVFlQRShQYXJlblJp
Z2h0KTsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShleHByKSB9OworICAgIH0KKyAgICBjYXNl
IFRva2VuVHlwZTo6SWRlbnRpZmllcjogeworICAgICAgICBDT05TVU1FX1RZUEVfTkFNRUQoaWRl
bnQsIElkZW50aWZpZXIpOworICAgICAgICBpZiAoaWRlbnQubV9pZGVudCA9PSAidHJ1ZSIpIHsK
KyAgICAgICAgICAgIFJFVFVSTl9OT0RFX1JFRihCb29sTGl0ZXJhbCwgdHJ1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGlkZW50Lm1faWRlbnQgPT0gImZhbHNlIikgeworICAgICAgICAgICAg
UkVUVVJOX05PREVfUkVGKEJvb2xMaXRlcmFsLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGN1cnJlbnQoKS5tX3R5cGUgPT0gVG9rZW5UeXBlOjpMVCB8fCBjdXJyZW50KCkubV90eXBl
ID09IFRva2VuVHlwZTo6UGFyZW5MZWZ0KSB7CisgICAgICAgICAgICBQQVJTRSh0eXBlLCBUeXBl
RGVjbEFmdGVySWRlbnRpZmllciwgV1RGTW92ZShpZGVudC5tX2lkZW50KSwgX3N0YXJ0T2ZFbGVt
ZW50UG9zaXRpb24pOworICAgICAgICAgICAgUEFSU0UoYXJndW1lbnRzLCBBcmd1bWVudEV4cHJl
c3Npb25MaXN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9OT0RFX1JFRihUeXBlQ29udmVyc2lvbiwg
V1RGTW92ZSh0eXBlKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgfQorICAgICAgICBS
RVRVUk5fTk9ERV9SRUYoSWRlbnRpZmllckV4cHJlc3Npb24sIGlkZW50Lm1faWRlbnQpOworICAg
IH0KKyAgICBjYXNlIFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxTaWduZWQ6IHsKKyAgICAgICAg
Q09OU1VNRV9UWVBFX05BTUVEKGxpdCwgSW50ZWdlckxpdGVyYWxTaWduZWQpOworICAgICAgICBS
RVRVUk5fTk9ERV9SRUYoSW50MzJMaXRlcmFsLCBsaXQubV9saXRlcmFsVmFsdWUpOworICAgIH0K
KyAgICBjYXNlIFRva2VuVHlwZTo6SW50ZWdlckxpdGVyYWxVbnNpZ25lZDogeworICAgICAgICBD
T05TVU1FX1RZUEVfTkFNRUQobGl0LCBJbnRlZ2VyTGl0ZXJhbFVuc2lnbmVkKTsKKyAgICAgICAg
UkVUVVJOX05PREVfUkVGKFVpbnQzMkxpdGVyYWwsIGxpdC5tX2xpdGVyYWxWYWx1ZSk7CisgICAg
fQorICAgIGNhc2UgVG9rZW5UeXBlOjpEZWNpbWFsRmxvYXRMaXRlcmFsOiB7CisgICAgICAgIENP
TlNVTUVfVFlQRV9OQU1FRChsaXQsIERlY2ltYWxGbG9hdExpdGVyYWwpOworICAgICAgICBSRVRV
Uk5fTk9ERV9SRUYoRmxvYXQzMkxpdGVyYWwsIGxpdC5tX2xpdGVyYWxWYWx1ZSk7CisgICAgfQor
ICAgIC8vIEZJWE1FOiBIZXhGbG9hdExpdGVyYWwgYW5kIEludGVnZXJMaXRlcmFsCisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEZBSUwoIkV4cGVjdGVkIG9uZSBvZiAn
KCcsIGEgbGl0ZXJhbCwgb3IgYW4gaWRlbnRpZmllciIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gUGFy
c2VyPExleGVyPjo6cGFyc2VFeHByZXNzaW9uKCkKK3sKKyAgICAvLyBGSVhNRTogRmlsbCBpbgor
ICAgIHJldHVybiBwYXJzZVJlbGF0aW9uYWxFeHByZXNzaW9uKCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9y
PiBQYXJzZXI8TGV4ZXI+OjpwYXJzZUxIU0V4cHJlc3Npb24oKQoreworICAgIFNUQVJUX1BBUlNF
KCk7CisKKyAgICAvLyBGSVhNRTogQWRkIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHByZWZpeAorICAg
IFBBUlNFKGJhc2UsIENvcmVMSFNFeHByZXNzaW9uKTsKKyAgICByZXR1cm4gcGFyc2VQb3N0Zml4
RXhwcmVzc2lvbihXVEZNb3ZlKGJhc2UpLCBfc3RhcnRPZkVsZW1lbnRQb3NpdGlvbik7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4sIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZUNvcmVMSFNFeHByZXNzaW9uKCkKK3sK
KyAgICBTVEFSVF9QQVJTRSgpOworCisgICAgc3dpdGNoIChjdXJyZW50KCkubV90eXBlKSB7Cisg
ICAgY2FzZSBUb2tlblR5cGU6OlBhcmVuTGVmdDogeworICAgICAgICBjb25zdW1lKCk7CisgICAg
ICAgIFBBUlNFKGV4cHIsIExIU0V4cHJlc3Npb24pOworICAgICAgICBDT05TVU1FX1RZUEUoUGFy
ZW5SaWdodCk7CisgICAgICAgIHJldHVybiB7IFdURk1vdmUoZXhwcikgfTsKKyAgICB9CisgICAg
Y2FzZSBUb2tlblR5cGU6OklkZW50aWZpZXI6IHsKKyAgICAgICAgQ09OU1VNRV9UWVBFX05BTUVE
KGlkZW50LCBJZGVudGlmaWVyKTsKKyAgICAgICAgUkVUVVJOX05PREVfUkVGKElkZW50aWZpZXJF
eHByZXNzaW9uLCBpZGVudC5tX2lkZW50KTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgRkFJTCgiVHJpZWQgdG8gcGFyc2UgdGhlIGxlZnQtaGFuZCBz
aWRlIG9mIGFuIGFzc2lnbm1lbnQgYW5kIGZhaWxlZCIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBMZXhlcj4KK0V4cGVjdGVkPFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4sIEVy
cm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZUFyZ3VtZW50RXhwcmVzc2lvbkxpc3QoKQoreworICAg
IFNUQVJUX1BBUlNFKCk7CisgICAgQ09OU1VNRV9UWVBFKFBhcmVuTGVmdCk7CisKKyAgICBWZWN0
b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKKyAgICB3aGlsZSAoY3Vy
cmVudCgpLm1fdHlwZSAhPSBUb2tlblR5cGU6OlBhcmVuUmlnaHQpIHsKKyAgICAgICAgUEFSU0Uo
ZXhwciwgRXhwcmVzc2lvbik7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShleHBy
KSk7CisgICAgICAgIGlmIChjdXJyZW50KCkubV90eXBlICE9IFRva2VuVHlwZTo6UGFyZW5SaWdo
dCkgeworICAgICAgICAgICAgQ09OU1VNRV9UWVBFKENvbW1hKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIENPTlNVTUVfVFlQRShQYXJlblJpZ2h0KTsKKyAgICByZXR1cm4geyBXVEZNb3ZlKGFy
Z3VtZW50cykgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XR1NML1BhcnNlci5oIGIvU291cmNlL1dlYkdQVS9XR1NML1BhcnNlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzEwOTNjMmVlMzU4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML1BhcnNlci5oCkBAIC0wLDAgKzEsNDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbXBpbGF0aW9uTWVzc2Fn
ZS5oIgorI2luY2x1ZGUgIkxleGVyLmgiCisjaW5jbHVkZSAiQVNUL1NoYWRlck1vZHVsZS5oIgor
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorCituYW1lc3BhY2UgV0dTTCB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNUOjpTaGFkZXJNb2R1bGUsIEVycm9yPiBwYXJz
ZShjb25zdCBTdHJpbmcmIHdnc2wpOworCitFeHBlY3RlZDxBU1Q6OlNoYWRlck1vZHVsZSwgRXJy
b3I+IHBhcnNlTENoYXIoY29uc3QgU3RyaW5nJiB3Z3NsKTsKK0V4cGVjdGVkPEFTVDo6U2hhZGVy
TW9kdWxlLCBFcnJvcj4gcGFyc2VVQ2hhcihjb25zdCBTdHJpbmcmIHdnc2wpOworCit9IC8vIG5h
bWVzcGFjZSBXR1NMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAgYi9T
b3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAKaW5kZXggZTNhOGUyYmZiNjg3Li42ZTc4NDEwZjc5
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmNwcAorKysgYi9Tb3VyY2Uv
V2ViR1BVL1dHU0wvV0dTTC5jcHAKQEAgLTI2LDMxICsyNiwzMiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldHU0wuaCIKIAotI2luY2x1ZGUgIkxleGVyLmgiCi0vLyBBbGwgb2Yg
dGhlc2UgYXJlIGp1c3QgdG8gY2hlY2sgdGhhdCB0aGV5IGNvbXBpbGUsIHNpbmNlIGZvciBub3cg
dGhleSBhcmUgbm90IHJlYWxseSB1c2VkLgotI2luY2x1ZGUgIkFTVC9HbG9iYWxWYXJpYWJsZURl
Y2wuaCIKLSNpbmNsdWRlICJBU1QvU3RydWN0dXJlRGVjbC5oIgotI2luY2x1ZGUgIkFTVC9GdW5j
dGlvbkRlY2wuaCIKLSNpbmNsdWRlICJBU1QvU2hhZGVyTW9kdWxlLmgiCi0jaW5jbHVkZSAiQVNU
L1N0YXRlbWVudHMvQXNzaWdubWVudFN0YXRlbWVudC5oIgotI2luY2x1ZGUgIkFTVC9TdGF0ZW1l
bnRzL1JldHVyblN0YXRlbWVudC5oIgotI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9JZGVudGlm
aWVyRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lv
bi5oIgotI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3MuaCIKLSNpbmNs
dWRlICJBU1QvRXhwcmVzc2lvbnMvTGl0ZXJhbEV4cHJlc3Npb25zLmgiCisjaW5jbHVkZSAiUGFy
c2VyLmgiCiAKIG5hbWVzcGFjZSBXR1NMIHsKIAotc3RkOjp2YXJpYW50PFN1Y2Nlc3NmdWxDaGVj
aywgRmFpbGVkQ2hlY2s+IHN0YXRpY0NoZWNrKGNvbnN0IFN0cmluZyYgc3RyLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPFNvdXJjZU1hcD4mKQorc3RkOjp2YXJpYW50PFN1Y2Nlc3NmdWxDaGVjaywgRmFp
bGVkQ2hlY2s+IHN0YXRpY0NoZWNrKGNvbnN0IFN0cmluZyYgd2dzbCwgY29uc3Qgc3RkOjpvcHRp
b25hbDxTb3VyY2VNYXA+JikKIHsKLSAgICAvLyBNYWtpbmcgc3VyZSB0aGF0IHRoZSBsZXhlciBi
dWlsZHMgY29ycmVjdGx5LCB3aWxsIGJlIHJlbW92ZWQgaW4gbGF0ZXIgcGF0Y2hlcwotICAgIExl
eGVyPExDaGFyPiBsZXhlcihzdHIpOwotICAgIGxleGVyLmxleCgpOwotICAgIHJldHVybiBGYWls
ZWRDaGVjayB7IHsgfSwgeyB9IH07CisgICAgRXhwZWN0ZWQ8QVNUOjpTaGFkZXJNb2R1bGUsIEVy
cm9yPiBwYXJzZXJSZXN1bHQgPSB3Z3NsLmlzOEJpdCgpID8gcGFyc2VMQ2hhcih3Z3NsKSA6IHBh
cnNlVUNoYXIod2dzbCk7CisgICAgaWYgKCFwYXJzZXJSZXN1bHQuaGFzX3ZhbHVlKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciByZXR1cm5pbmcgbXVsdGlwbGUgZXJyb3Jz
IGZyb20gdGhlIHBhcnNlci4KKyAgICAgICAgcmV0dXJuIEZhaWxlZENoZWNrIHsgeyBwYXJzZXJS
ZXN1bHQuZXJyb3IoKSB9LCB7IC8qIHdhcm5pbmdzICovIH0gfTsKKyAgICB9CisgICAgVW5pcXVl
UmVmPEFTVDo6U2hhZGVyTW9kdWxlPiBzaGFkZXIgPSBtYWtlVW5pcXVlUmVmPEFTVDo6U2hhZGVy
TW9kdWxlPihXVEZNb3ZlKHBhcnNlclJlc3VsdC52YWx1ZSgpKSk7CisKKyAgICBWZWN0b3I8V2Fy
bmluZz4gd2FybmluZ3MgeyB9OworICAgIC8vIEZJWE1FOiBhZGQgdmFsaWRhdGlvbgorICAgIHJl
dHVybiBzdGQ6OnZhcmlhbnQ8U3VjY2Vzc2Z1bENoZWNrLCBGYWlsZWRDaGVjaz4oc3RkOjppbl9w
bGFjZV90eXBlPFN1Y2Nlc3NmdWxDaGVjaz4sIFdURk1vdmUod2FybmluZ3MpLCBXVEZNb3ZlKHNo
YWRlcikpOwogfQogCiBTdWNjZXNzZnVsQ2hlY2s6OlN1Y2Nlc3NmdWxDaGVjayhTdWNjZXNzZnVs
Q2hlY2smJikgPSBkZWZhdWx0OwogCitTdWNjZXNzZnVsQ2hlY2s6OlN1Y2Nlc3NmdWxDaGVjayhW
ZWN0b3I8V2FybmluZz4mJiBtZXNzYWdlcywgVW5pcXVlUmVmPEFTVDo6U2hhZGVyTW9kdWxlPiYm
IHNoYWRlcikKKyAgICA6IHdhcm5pbmdzKFdURk1vdmUobWVzc2FnZXMpKQorICAgICwgYXN0KFdU
Rk1vdmUoc2hhZGVyKSkKK3sKK30KKwogU3VjY2Vzc2Z1bENoZWNrOjp+U3VjY2Vzc2Z1bENoZWNr
KCkgPSBkZWZhdWx0OwogCiBQcmVwYXJlUmVzdWx0IHByZXBhcmUoY29uc3QgQVNUOjpTaGFkZXJN
b2R1bGUmIGFzdCwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFBpcGVsaW5lTGF5b3V0PiYgcGlwZWxp
bmVMYXlvdXRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuaCBiL1NvdXJj
ZS9XZWJHUFUvV0dTTC9XR1NMLmgKaW5kZXggZWFlZGE4NGNmYjMyLi4yYzI2ZjEwYjNmYmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmgKKysrIGIvU291cmNlL1dlYkdQVS9X
R1NML1dHU0wuaApAQCAtNDksMTQgKzQ5LDE1IEBAIGNsYXNzIFNoYWRlck1vZHVsZTsKIHN0cnVj
dCBTdWNjZXNzZnVsQ2hlY2sgewogICAgIFN1Y2Nlc3NmdWxDaGVjaygpID0gZGVsZXRlOwogICAg
IFN1Y2Nlc3NmdWxDaGVjayhTdWNjZXNzZnVsQ2hlY2smJik7CisgICAgU3VjY2Vzc2Z1bENoZWNr
KFZlY3RvcjxXYXJuaW5nPiYmLCBVbmlxdWVSZWY8QVNUOjpTaGFkZXJNb2R1bGU+JiYpOwogICAg
IH5TdWNjZXNzZnVsQ2hlY2soKTsKLSAgICBWZWN0b3I8Q29tcGlsYXRpb25NZXNzYWdlPiB3YXJu
aW5nczsKKyAgICBWZWN0b3I8V2FybmluZz4gd2FybmluZ3M7CiAgICAgVW5pcXVlUmVmPEFTVDo6
U2hhZGVyTW9kdWxlPiBhc3Q7CiB9OwogCiBzdHJ1Y3QgRmFpbGVkQ2hlY2sgewotICAgIFZlY3Rv
cjxDb21waWxhdGlvbk1lc3NhZ2U+IGVycm9yczsKLSAgICBWZWN0b3I8Q29tcGlsYXRpb25NZXNz
YWdlPiB3YXJuaW5nczsKKyAgICBWZWN0b3I8RXJyb3I+IGVycm9yczsKKyAgICBWZWN0b3I8V2Fy
bmluZz4gd2FybmluZ3M7CiB9OwogCiBzdHJ1Y3QgU291cmNlTWFwIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTFVuaXRUZXN0cy9XR1NMUGFyc2VyVGVzdHMubW0gYi9Tb3VyY2UvV2Vi
R1BVL1dHU0xVbml0VGVzdHMvV0dTTFBhcnNlclRlc3RzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uZjBiOTllZTBhZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkdQVS9XR1NMVW5pdFRlc3RzL1dHU0xQYXJzZXJUZXN0cy5tbQpAQCAtMCwwICsxLDIw
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorCisjaW1wb3J0ICJBc3NpZ25tZW50U3RhdGVtZW50LmgiCisjaW1wb3J0
ICJJZGVudGlmaWVyRXhwcmVzc2lvbi5oIgorI2ltcG9ydCAiTGV4ZXIuaCIKKyNpbXBvcnQgIkxp
dGVyYWxFeHByZXNzaW9ucy5oIgorI2ltcG9ydCAiUGFyc2VyLmgiCisjaW1wb3J0ICJSZXR1cm5T
dGF0ZW1lbnQuaCIKKyNpbXBvcnQgIlN0cnVjdHVyZUFjY2Vzcy5oIgorI2ltcG9ydCAiVHlwZUNv
bnZlcnNpb24uaCIKKyNpbXBvcnQgIldHU0wuaCIKKyNpbXBvcnQgPHd0Zi9EYXRhTG9nLmg+Cisj
aW1wb3J0IDxYQ1Rlc3QvWENUZXN0Lmg+CisKK0BpbnRlcmZhY2UgV0dTTFBhcnNlclRlc3RzIDog
WENUZXN0Q2FzZQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXR1NMUGFyc2VyVGVzdHMKKwor
LSAodm9pZCl0ZXN0UGFyc2luZ1N0cnVjdCB7CisgICAgYXV0byBzaGFkZXIgPSBXR1NMOjpwYXJz
ZUxDaGFyKCJzdHJ1Y3QgQiB7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGE6IGkz
MjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ9Iik7CisgICAgaWYgKCFzaGFkZXIuaGFz
X3ZhbHVlKCkpCisgICAgICAgIGRhdGFMb2dMbihzaGFkZXIuZXJyb3IoKSk7CisgICAgWENUQXNz
ZXJ0KHNoYWRlci5oYXNfdmFsdWUoKSk7CisgICAgWENUQXNzZXJ0KCFzaGFkZXItPmRpcmVjdGl2
ZXMoKS5zaXplKCkpOworICAgIFhDVEFzc2VydChzaGFkZXItPnN0cnVjdHMoKS5zaXplKCkgPT0g
MSk7CisgICAgWENUQXNzZXJ0KHNoYWRlci0+Z2xvYmFsVmFycygpLnNpemUoKSA9PSAwKTsKKyAg
ICBYQ1RBc3NlcnQoc2hhZGVyLT5mdW5jdGlvbnMoKS5zaXplKCkgPT0gMCk7CisgICAgV0dTTDo6
QVNUOjpTdHJ1Y3REZWNsJiBzdHIgPSBzaGFkZXItPnN0cnVjdHMoKVswXTsKKyAgICBYQ1RBc3Nl
cnQoc3RyLm5hbWUoKSA9PSAiQiIpOworICAgIFhDVEFzc2VydChzdHIuYXR0cmlidXRlcygpLmlz
RW1wdHkoKSk7CisgICAgWENUQXNzZXJ0KHN0ci5tZW1iZXJzKCkuc2l6ZSgpID09IDEpOworICAg
IFhDVEFzc2VydChzdHIubWVtYmVycygpWzBdLT5hdHRyaWJ1dGVzKCkuaXNFbXB0eSgpKTsKKyAg
ICBYQ1RBc3NlcnQoc3RyLm1lbWJlcnMoKVswXS0+bmFtZSgpID09ICJhIik7CisgICAgWENUQXNz
ZXJ0KHN0ci5tZW1iZXJzKClbMF0tPnR5cGUoKS5pc05hbWVkKCkpOworICAgIFdHU0w6OkFTVDo6
TmFtZWRUeXBlJiBtZW1iZXJUeXBlID0gZG93bmNhc3Q8V0dTTDo6QVNUOjpOYW1lZFR5cGU+KHN0
ci5tZW1iZXJzKClbMF0tPnR5cGUoKSk7CisgICAgWENUQXNzZXJ0KG1lbWJlclR5cGUubmFtZSgp
ID09ICJpMzIiKTsKK30KKworLSAodm9pZCl0ZXN0UGFyc2luZ0dsb2JhbFZhcmlhYmxlIHsKKyAg
ICBhdXRvIHNoYWRlciA9IFdHU0w6OnBhcnNlTENoYXIoIkBncm91cCgwKSBAYmluZGluZygwKVxu
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFyPHN0b3JhZ2UsIHJlYWRf
d3JpdGU+IHg6IEI7XG4iKTsKKyAgICBpZiAoIXNoYWRlci5oYXNfdmFsdWUoKSkKKyAgICAgICAg
ZGF0YUxvZ0xuKHNoYWRlci5lcnJvcigpKTsKKyAgICBYQ1RBc3NlcnQoc2hhZGVyLmhhc192YWx1
ZSgpKTsKKyAgICBYQ1RBc3NlcnQoIXNoYWRlci0+ZGlyZWN0aXZlcygpLnNpemUoKSk7CisgICAg
WENUQXNzZXJ0KHNoYWRlci0+c3RydWN0cygpLnNpemUoKSA9PSAwKTsKKyAgICBYQ1RBc3NlcnQo
c2hhZGVyLT5nbG9iYWxWYXJzKCkuc2l6ZSgpID09IDEpOworICAgIFhDVEFzc2VydChzaGFkZXIt
PmZ1bmN0aW9ucygpLnNpemUoKSA9PSAwKTsKKyAgICBXR1NMOjpBU1Q6Okdsb2JhbFZhcmlhYmxl
RGVjbCYgdmFyID0gc2hhZGVyLT5nbG9iYWxWYXJzKClbMF07CisgICAgWENUQXNzZXJ0KHZhci5h
dHRyaWJ1dGVzKCkuc2l6ZSgpID09IDIpOworICAgIFhDVEFzc2VydCh2YXIuYXR0cmlidXRlcygp
WzBdLT5pc0dyb3VwKCkpOworICAgIFhDVEFzc2VydChkb3duY2FzdDxXR1NMOjpBU1Q6Okdyb3Vw
QXR0cmlidXRlPih2YXIuYXR0cmlidXRlcygpWzBdLmdldCgpKS5ncm91cCgpID09IDApOworICAg
IFhDVEFzc2VydCh2YXIuYXR0cmlidXRlcygpWzFdLT5pc0JpbmRpbmcoKSk7CisgICAgWENUQXNz
ZXJ0KGRvd25jYXN0PFdHU0w6OkFTVDo6QmluZGluZ0F0dHJpYnV0ZT4odmFyLmF0dHJpYnV0ZXMo
KVsxXS5nZXQoKSkuYmluZGluZygpID09IDApOworICAgIFhDVEFzc2VydCh2YXIubmFtZSgpID09
ICJ4Iik7CisgICAgWENUQXNzZXJ0KHZhci5tYXliZVF1YWxpZmllcigpKTsKKyAgICBYQ1RBc3Nl
cnQodmFyLm1heWJlUXVhbGlmaWVyKCktPnN0b3JhZ2VDbGFzcygpID09IFdHU0w6OkFTVDo6U3Rv
cmFnZUNsYXNzOjpTdG9yYWdlKTsKKyAgICBYQ1RBc3NlcnQodmFyLm1heWJlUXVhbGlmaWVyKCkt
PmFjY2Vzc01vZGUoKSA9PSBXR1NMOjpBU1Q6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAg
WENUQXNzZXJ0KHZhci5tYXliZVR5cGVEZWNsKCkpOworICAgIFhDVEFzc2VydCh2YXIubWF5YmVU
eXBlRGVjbCgpLT5pc05hbWVkKCkpOworICAgIFdHU0w6OkFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5
cGUgPSBkb3duY2FzdDxXR1NMOjpBU1Q6Ok5hbWVkVHlwZT4oKnZhci5tYXliZVR5cGVEZWNsKCkp
OworICAgIFhDVEFzc2VydChuYW1lZFR5cGUubmFtZSgpID09ICJCIik7CisgICAgWENUQXNzZXJ0
KCF2YXIubWF5YmVJbml0aWFsaXplcigpKTsKK30KKworLSAodm9pZCl0ZXN0UGFyc2luZ0Z1bmN0
aW9uRGVjbCB7CisgICAgYXV0byBzaGFkZXIgPSBXR1NMOjpwYXJzZUxDaGFyKCJAc3RhZ2UoY29t
cHV0ZSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZuIG1haW4oKSB7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgeC5hID0gNDJpO1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworICAgIGlmICghc2hh
ZGVyLmhhc192YWx1ZSgpKQorICAgICAgICBkYXRhTG9nTG4oc2hhZGVyLmVycm9yKCkpOworICAg
IFhDVEFzc2VydChzaGFkZXIuaGFzX3ZhbHVlKCkpOworICAgIFhDVEFzc2VydCghc2hhZGVyLT5k
aXJlY3RpdmVzKCkuc2l6ZSgpKTsKKyAgICBYQ1RBc3NlcnQoc2hhZGVyLT5zdHJ1Y3RzKCkuc2l6
ZSgpID09IDApOworICAgIFhDVEFzc2VydChzaGFkZXItPmdsb2JhbFZhcnMoKS5zaXplKCkgPT0g
MCk7CisgICAgWENUQXNzZXJ0KHNoYWRlci0+ZnVuY3Rpb25zKCkuc2l6ZSgpID09IDEpOworICAg
IFdHU0w6OkFTVDo6RnVuY3Rpb25EZWNsJiBmdW5jID0gc2hhZGVyLT5mdW5jdGlvbnMoKVswXTsK
KyAgICBYQ1RBc3NlcnQoZnVuYy5hdHRyaWJ1dGVzKCkuc2l6ZSgpID09IDEpOworICAgIFhDVEFz
c2VydChmdW5jLmF0dHJpYnV0ZXMoKVswXS0+aXNTdGFnZSgpKTsKKyAgICBYQ1RBc3NlcnQoZG93
bmNhc3Q8V0dTTDo6QVNUOjpTdGFnZUF0dHJpYnV0ZT4oZnVuYy5hdHRyaWJ1dGVzKClbMF0uZ2V0
KCkpLnN0YWdlKCkgPT0gV0dTTDo6QVNUOjpTdGFnZUF0dHJpYnV0ZTo6U3RhZ2U6OkNvbXB1dGUp
OworICAgIFhDVEFzc2VydChmdW5jLm5hbWUoKSA9PSAibWFpbiIpOworICAgIFhDVEFzc2VydChm
dW5jLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMCk7CisgICAgWENUQXNzZXJ0KGZ1bmMucmV0dXJu
QXR0cmlidXRlcygpLmlzRW1wdHkoKSk7CisgICAgWENUQXNzZXJ0KGZ1bmMubWF5YmVSZXR1cm5U
eXBlKCkgPT0gbnVsbHB0cik7CisgICAgWENUQXNzZXJ0KGZ1bmMuYm9keSgpLnN0YXRlbWVudHMo
KS5zaXplKCkgPT0gMSk7CisgICAgWENUQXNzZXJ0KGZ1bmMuYm9keSgpLnN0YXRlbWVudHMoKVsw
XS0+aXNBc3NpZ25tZW50KCkpOworICAgIFdHU0w6OkFTVDo6QXNzaWdubWVudFN0YXRlbWVudCYg
c3RtdCA9IGRvd25jYXN0PFdHU0w6OkFTVDo6QXNzaWdubWVudFN0YXRlbWVudD4oZnVuYy5ib2R5
KCkuc3RhdGVtZW50cygpWzBdLmdldCgpKTsKKyAgICBYQ1RBc3NlcnQoc3RtdC5tYXliZUxocygp
KTsKKyAgICBYQ1RBc3NlcnQoc3RtdC5tYXliZUxocygpLT5pc1N0cnVjdHVyZUFjY2VzcygpKTsK
KyAgICBXR1NMOjpBU1Q6OlN0cnVjdHVyZUFjY2VzcyYgc3RydWN0QWNjZXNzID0gZG93bmNhc3Q8
V0dTTDo6QVNUOjpTdHJ1Y3R1cmVBY2Nlc3M+KCpzdG10Lm1heWJlTGhzKCkpOworICAgIFhDVEFz
c2VydChzdHJ1Y3RBY2Nlc3MuYmFzZSgpLT5pc0lkZW50aWZpZXIoKSk7CisgICAgV0dTTDo6QVNU
OjpJZGVudGlmaWVyRXhwcmVzc2lvbiBiYXNlID0gZG93bmNhc3Q8V0dTTDo6QVNUOjpJZGVudGlm
aWVyRXhwcmVzc2lvbj4oc3RydWN0QWNjZXNzLmJhc2UoKS5nZXQoKSk7CisgICAgWENUQXNzZXJ0
KGJhc2UuaWRlbnRpZmllcigpID09ICJ4Iik7CisgICAgWENUQXNzZXJ0KHN0cnVjdEFjY2Vzcy5m
aWVsZE5hbWUoKSA9PSAiYSIpOworICAgIFhDVEFzc2VydChzdG10LnJocygpLmlzSW50MzJMaXRl
cmFsKCkpOworICAgIFdHU0w6OkFTVDo6SW50MzJMaXRlcmFsJiByaHMgPSBkb3duY2FzdDxXR1NM
OjpBU1Q6OkludDMyTGl0ZXJhbD4oc3RtdC5yaHMoKSk7CisgICAgWENUQXNzZXJ0KHJocy52YWx1
ZSgpID09IDQyKTsKK30KKworLSAodm9pZCl0ZXN0VHJpdmlhbEdyYXBoaWNzU2hhZGVyIHsKKyAg
ICBhdXRvIHNoYWRlciA9IFdHU0w6OnBhcnNlTENoYXIoIkBzdGFnZSh2ZXJ0ZXgpXG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbiB2ZXJ0ZXhTaGFkZXIoQGxvY2F0aW9u
KDApIHg6IHZlYzQ8ZjMyPikgLT4gQGJ1aWx0aW4ocG9zaXRpb24pIHZlYzQ8ZjMyPiB7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHg7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9XG5cbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIkBzdGFnZShmcmFnbWVudClcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImZuIGZyYWdtZW50U2hhZGVyKCkgLT4gQGxvY2F0aW9uKDApIHZl
YzQ8ZjMyPiB7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHZlYzQ8ZjMyPigwLjQsIDAuNCwgMC44LCAxLjApO1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAifSIpOworICAgIGlmICghc2hhZGVyLmhhc192YWx1ZSgpKQorICAg
ICAgICBkYXRhTG9nTG4oc2hhZGVyLmVycm9yKCkpOworICAgIFhDVEFzc2VydChzaGFkZXIuaGFz
X3ZhbHVlKCkpOworICAgIFhDVEFzc2VydCghc2hhZGVyLT5kaXJlY3RpdmVzKCkuc2l6ZSgpKTsK
KyAgICBYQ1RBc3NlcnQoc2hhZGVyLT5zdHJ1Y3RzKCkuc2l6ZSgpID09IDApOworICAgIFhDVEFz
c2VydChzaGFkZXItPmdsb2JhbFZhcnMoKS5zaXplKCkgPT0gMCk7CisgICAgWENUQXNzZXJ0KHNo
YWRlci0+ZnVuY3Rpb25zKCkuc2l6ZSgpID09IDIpOworCisgICAgeworICAgICAgICBXR1NMOjpB
U1Q6OkZ1bmN0aW9uRGVjbCYgZnVuYyA9IHNoYWRlci0+ZnVuY3Rpb25zKClbMF07CisgICAgICAg
IFhDVEFzc2VydChmdW5jLmF0dHJpYnV0ZXMoKS5zaXplKCkgPT0gMSk7CisgICAgICAgIFhDVEFz
c2VydChmdW5jLmF0dHJpYnV0ZXMoKVswXS0+aXNTdGFnZSgpKTsKKyAgICAgICAgWENUQXNzZXJ0
KGRvd25jYXN0PFdHU0w6OkFTVDo6U3RhZ2VBdHRyaWJ1dGU+KGZ1bmMuYXR0cmlidXRlcygpWzBd
LmdldCgpKS5zdGFnZSgpID09IFdHU0w6OkFTVDo6U3RhZ2VBdHRyaWJ1dGU6OlN0YWdlOjpWZXJ0
ZXgpOworICAgICAgICBYQ1RBc3NlcnQoZnVuYy5uYW1lKCkgPT0gInZlcnRleFNoYWRlciIpOwor
ICAgICAgICBYQ1RBc3NlcnQoZnVuYy5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOworICAgICAg
ICBYQ1RBc3NlcnQoZnVuYy5wYXJhbWV0ZXJzKClbMF0tPm5hbWUoKSA9PSAieCIpOworICAgICAg
ICBYQ1RBc3NlcnQoZnVuYy5wYXJhbWV0ZXJzKClbMF0tPmF0dHJpYnV0ZXMoKS5zaXplKCkgPT0g
MSk7CisgICAgICAgIFhDVEFzc2VydChmdW5jLnBhcmFtZXRlcnMoKVswXS0+YXR0cmlidXRlcygp
WzBdLT5pc0xvY2F0aW9uKCkpOworICAgICAgICBYQ1RBc3NlcnQoZG93bmNhc3Q8V0dTTDo6QVNU
OjpMb2NhdGlvbkF0dHJpYnV0ZT4oZnVuYy5wYXJhbWV0ZXJzKClbMF0tPmF0dHJpYnV0ZXMoKVsw
XS5nZXQoKSkubG9jYXRpb24oKSA9PSAwKTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMucGFyYW1l
dGVycygpWzBdLT50eXBlKCkuaXNQYXJhbWV0ZXJpemVkKCkpOworICAgICAgICBXR1NMOjpBU1Q6
OlBhcmFtZXRlcml6ZWRUeXBlJiBwYXJhbVR5cGUgPSBkb3duY2FzdDxXR1NMOjpBU1Q6OlBhcmFt
ZXRlcml6ZWRUeXBlPihmdW5jLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgWENU
QXNzZXJ0KHBhcmFtVHlwZS5iYXNlKCkgPT0gV0dTTDo6QVNUOjpQYXJhbWV0ZXJpemVkVHlwZTo6
QmFzZTo6VmVjNCk7CisgICAgICAgIFhDVEFzc2VydChwYXJhbVR5cGUuZWxlbWVudFR5cGUoKS5p
c05hbWVkKCkpOworICAgICAgICBYQ1RBc3NlcnQoZG93bmNhc3Q8V0dTTDo6QVNUOjpOYW1lZFR5
cGU+KHBhcmFtVHlwZS5lbGVtZW50VHlwZSgpKS5uYW1lKCkgPT0gImYzMiIpOworICAgICAgICBY
Q1RBc3NlcnQoZnVuYy5yZXR1cm5BdHRyaWJ1dGVzKCkuc2l6ZSgpID09IDEpOworICAgICAgICBY
Q1RBc3NlcnQoZnVuYy5yZXR1cm5BdHRyaWJ1dGVzKClbMF0tPmlzQnVpbHRpbigpKTsKKyAgICAg
ICAgWENUQXNzZXJ0KGRvd25jYXN0PFdHU0w6OkFTVDo6QnVpbHRpbkF0dHJpYnV0ZT4oZnVuYy5y
ZXR1cm5BdHRyaWJ1dGVzKClbMF0uZ2V0KCkpLm5hbWUoKSA9PSAicG9zaXRpb24iKTsKKyAgICAg
ICAgWENUQXNzZXJ0KGZ1bmMubWF5YmVSZXR1cm5UeXBlKCkpOworICAgICAgICBYQ1RBc3NlcnQo
ZnVuYy5tYXliZVJldHVyblR5cGUoKS0+aXNQYXJhbWV0ZXJpemVkKCkpOworICAgICAgICBYQ1RB
c3NlcnQoZnVuYy5ib2R5KCkuc3RhdGVtZW50cygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAgWENU
QXNzZXJ0KGZ1bmMuYm9keSgpLnN0YXRlbWVudHMoKVswXS0+aXNSZXR1cm4oKSk7CisgICAgICAg
IFdHU0w6OkFTVDo6UmV0dXJuU3RhdGVtZW50JiBzdG10ID0gZG93bmNhc3Q8V0dTTDo6QVNUOjpS
ZXR1cm5TdGF0ZW1lbnQ+KGZ1bmMuYm9keSgpLnN0YXRlbWVudHMoKVswXS5nZXQoKSk7CisgICAg
ICAgIFhDVEFzc2VydChzdG10Lm1heWJlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgWENUQXNzZXJ0
KHN0bXQubWF5YmVFeHByZXNzaW9uKCktPmlzSWRlbnRpZmllcigpKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIFdHU0w6OkFTVDo6RnVuY3Rpb25EZWNsJiBmdW5jID0gc2hhZGVyLT5mdW5jdGlv
bnMoKVsxXTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMuYXR0cmlidXRlcygpLnNpemUoKSA9PSAx
KTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMuYXR0cmlidXRlcygpWzBdLT5pc1N0YWdlKCkpOwor
ICAgICAgICBYQ1RBc3NlcnQoZG93bmNhc3Q8V0dTTDo6QVNUOjpTdGFnZUF0dHJpYnV0ZT4oZnVu
Yy5hdHRyaWJ1dGVzKClbMF0uZ2V0KCkpLnN0YWdlKCkgPT0gV0dTTDo6QVNUOjpTdGFnZUF0dHJp
YnV0ZTo6U3RhZ2U6OkZyYWdtZW50KTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMubmFtZSgpID09
ICJmcmFnbWVudFNoYWRlciIpOworICAgICAgICBYQ1RBc3NlcnQoZnVuYy5wYXJhbWV0ZXJzKCku
c2l6ZSgpID09IDApOworICAgICAgICBYQ1RBc3NlcnQoZnVuYy5yZXR1cm5BdHRyaWJ1dGVzKCku
c2l6ZSgpID09IDEpOworICAgICAgICBYQ1RBc3NlcnQoZnVuYy5yZXR1cm5BdHRyaWJ1dGVzKClb
MF0tPmlzTG9jYXRpb24oKSk7CisgICAgICAgIFhDVEFzc2VydChkb3duY2FzdDxXR1NMOjpBU1Q6
OkxvY2F0aW9uQXR0cmlidXRlPihmdW5jLnJldHVybkF0dHJpYnV0ZXMoKVswXS5nZXQoKSkubG9j
YXRpb24oKSA9PSAwKTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMubWF5YmVSZXR1cm5UeXBlKCkp
OworICAgICAgICBYQ1RBc3NlcnQoZnVuYy5tYXliZVJldHVyblR5cGUoKS0+aXNQYXJhbWV0ZXJp
emVkKCkpOworICAgICAgICBYQ1RBc3NlcnQoZnVuYy5ib2R5KCkuc3RhdGVtZW50cygpLnNpemUo
KSA9PSAxKTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMuYm9keSgpLnN0YXRlbWVudHMoKVswXS0+
aXNSZXR1cm4oKSk7CisgICAgICAgIFdHU0w6OkFTVDo6UmV0dXJuU3RhdGVtZW50JiBzdG10ID0g
ZG93bmNhc3Q8V0dTTDo6QVNUOjpSZXR1cm5TdGF0ZW1lbnQ+KGZ1bmMuYm9keSgpLnN0YXRlbWVu
dHMoKVswXS5nZXQoKSk7CisgICAgICAgIFhDVEFzc2VydChzdG10Lm1heWJlRXhwcmVzc2lvbigp
KTsKKyAgICAgICAgWENUQXNzZXJ0KHN0bXQubWF5YmVFeHByZXNzaW9uKCktPmlzVHlwZUNvbnZl
cnNpb24oKSk7CisgICAgICAgIFdHU0w6OkFTVDo6VHlwZUNvbnZlcnNpb24mIGV4cHIgPSBkb3du
Y2FzdDxXR1NMOjpBU1Q6OlR5cGVDb252ZXJzaW9uPigqc3RtdC5tYXliZUV4cHJlc3Npb24oKSk7
CisgICAgICAgIFhDVEFzc2VydChleHByLnR5cGVEZWNsKCktPmlzUGFyYW1ldGVyaXplZCgpKTsK
KyAgICAgICAgWENUQXNzZXJ0KGV4cHIuYXJndW1lbnRzKCkuc2l6ZSgpID09IDQpOworICAgICAg
ICBYQ1RBc3NlcnQoZXhwci5hcmd1bWVudHMoKVswXS0+aXNGbG9hdDMyTGl0ZXJhbCgpKTsKKyAg
ICAgICAgWENUQXNzZXJ0KGV4cHIuYXJndW1lbnRzKClbMV0tPmlzRmxvYXQzMkxpdGVyYWwoKSk7
CisgICAgICAgIFhDVEFzc2VydChleHByLmFyZ3VtZW50cygpWzJdLT5pc0Zsb2F0MzJMaXRlcmFs
KCkpOworICAgICAgICBYQ1RBc3NlcnQoZXhwci5hcmd1bWVudHMoKVszXS0+aXNGbG9hdDMyTGl0
ZXJhbCgpKTsKKyAgICB9Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2Vi
R1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGEwMzdhNjQzMmJkNy4uYzQyNjBhYWRiYTZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQ4LDEzICs0OCwxNSBAQAogCQkzMzhCQjJEMjI3QjZCNjNGMDBFMDY2QUIgLyogU291cmNlU3Bh
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM4QkIy
RDEyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCAqLzsgfTsKIAkJMzM4QkIyRDQyN0I2
QjY2QzAwRTA2NkFCIC8qIExleGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCAqLzsgfTsK
IAkJMzM4QkIyRDYyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOEJCMkQ1MjdCNkI2ODcwMEUwNjZBQiAv
KiBMZXhlci5jcHAgKi87IH07Ci0JCUREMDVBMzVDMjdCRjA5QzYwMDk2RUZBQiAvKiBsaWJXVEYu
YSBpbiBQcm9kdWN0IERlcGVuZGVuY2llcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQ0VCRDgyOTI3MTZDQUU3MDBBNTI1NEQgLyogbGliV1RGLmEgKi87IH07CisJCTMzOUI3
QjE4MjdEN0ZGQTQwMDcyQkY5QSAvKiBQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOUI3QjE3MjdEN0ZGQTQwMDcyQkY5QSAvKiBQYXJzZXIu
aCAqLzsgfTsKKwkJMzM5QjdCMUIyN0Q4MDAwOTAwNzJCRjlBIC8qIFBhcnNlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzlCN0IxQTI3RDgwMDA5
MDA3MkJGOUEgLyogUGFyc2VyLmNwcCAqLzsgfTsKKwkJMzM5QjdCMUQyN0Q4MEExQzAwNzJCRjlB
IC8qIFdHU0xQYXJzZXJUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMzOUI3QjFDMjdEODBBMUMwMDcyQkY5QSAvKiBXR1NMUGFyc2VyVGVzdHMu
bW0gKi87IH07CisJCTMzOUI3QjFFMjdEODE2MjcwMDcyQkY5QSAvKiBDb21waWxhdGlvbk1lc3Nh
Z2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNF
QTE4NjcyN0JDMUIxNDAwQTFERDUyIC8qIENvbXBpbGF0aW9uTWVzc2FnZS5jcHAgKi87IH07CiAJ
CTMzRUExODVFMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg1RDI3QkMxOTRGMDBBMURENTIgLyog
QVNUTm9kZS5oICovOyB9OwogCQkzM0VBMTg2MDI3QkMxOTgxMDBBMURENTIgLyogR2xvYmFsRGly
ZWN0aXZlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
M0VBMTg1RjI3QkMxOTgxMDBBMURENTIgLyogR2xvYmFsRGlyZWN0aXZlLmggKi87IH07CiAJCTMz
RUExODYyMjdCQzE5QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2MTI3QkMxOUMxMDBBMURENTIgLyog
R2xvYmFsRGVjbC5oICovOyB9OwogCQkzM0VBMTg2NDI3QkMxQTFEMDBBMURENTIgLyogR2xvYmFs
VmFyaWFibGVEZWNsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzM0VBMTg2MzI3QkMxQTFEMDBBMURENTIgLyogR2xvYmFsVmFyaWFibGVEZWNsLmggKi87
IH07CiAJCTMzRUExODY2MjdCQzFBRDUwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODY1MjdC
QzFBRDUwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuaCAqLzsgfTsKLQkJMzNFQTE4Njgy
N0JDMUIxNDAwQTFERDUyIC8qIENvbXBpbGF0aW9uTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2NzI3QkMxQjE0MDBBMURENTIg
LyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCAqLzsgfTsKIAkJMzNFQTE4NkEyN0JDMUJFNjAwQTFE
RDUyIC8qIEF0dHJpYnV0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzNFQTE4NjkyN0JDMUJFNjAwQTFERDUyIC8qIEF0dHJpYnV0ZS5oICovOyB9Owog
CQkzM0VBMTg2QzI3QkMxQ0JDMDBBMURENTIgLyogRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NkIyN0JDMUNCQzAwQTFERDUy
IC8qIEV4cHJlc3Npb24uaCAqLzsgfTsKIAkJMzNFQTE4NkUyN0JDMUQ0QzAwQTFERDUyIC8qIFR5
cGVEZWNsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
M0VBMTg2RDI3QkMxRDRDMDBBMURENTIgLyogVHlwZURlY2wuaCAqLzsgfTsKQEAgLTcwLDYgKzcy
LDcgQEAKIAkJMzNFQTE4ODQyN0JDMjY4NjAwQTFERDUyIC8qIFN0cnVjdHVyZUFjY2Vzcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4ODMyN0JD
MjY4NjAwQTFERDUyIC8qIFN0cnVjdHVyZUFjY2Vzcy5oICovOyB9OwogCQkzM0VBMTg4NjI3QkMy
NkRGMDBBMURENTIgLyogVHlwZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODg1MjdCQzI2REYwMEExREQ1MiAvKiBUeXBlQ29u
dmVyc2lvbi5oICovOyB9OwogCQkzM0VBMTg4ODI3QkMzNjFFMDBBMURENTIgLyogTGl0ZXJhbEV4
cHJlc3Npb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzM0VBMTg4NzI3QkMzNjFFMDBBMURENTIgLyogTGl0ZXJhbEV4cHJlc3Npb25zLmggKi87IH07
CisJCUREMDVBMzVDMjdCRjA5QzYwMDk2RUZBQiAvKiBsaWJXVEYuYSBpbiBQcm9kdWN0IERlcGVu
ZGVuY2llcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0VCRDgyOTI3MTZD
QUU3MDBBNTI1NEQgLyogbGliV1RGLmEgKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rp
b24gKi8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KQEAgLTIw
MSw2ICsyMDQsOSBAQAogCQkzMzhCQjJEMTI3QjZCNjNGMDBFMDY2QUIgLyogU291cmNlU3Bhbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTb3VyY2VTcGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMzOEJCMkQzMjdCNkI2NkMwMEUwNjZBQiAvKiBMZXhlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
ZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMzhCQjJENTI3QjZCNjg3MDBF
MDY2QUIgLyogTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGV4ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMzlCN0IxNzI3RDdGRkE0MDA3MkJGOUEgLyogUGFyc2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMzlCN0IxQTI3RDgwMDA5MDA3MkJGOUEgLyogUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOUI3QjFDMjdE
ODBBMUMwMDcyQkY5QSAvKiBXR1NMUGFyc2VyVGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXR1NMUGFyc2VyVGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzRUEx
ODVEMjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFTVE5vZGUu
aDsgcGF0aCA9IFdHU0wvQVNUTm9kZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJ
CTMzRUExODVGMjdCQzE5ODEwMEExREQ1MiAvKiBHbG9iYWxEaXJlY3RpdmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR2xvYmFsRGlyZWN0aXZlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMz
RUExODYxMjdCQzE5QzEwMEExREQ1MiAvKiBHbG9iYWxEZWNsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEds
b2JhbERlY2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2NSw2ICsyNzEsNyBA
QAogCQkxQzAyM0QzRDI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTFVuaXRUZXN0cyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMzM5QjdCMUMyN0Q4MEExQzAw
NzJCRjlBIC8qIFdHU0xQYXJzZXJUZXN0cy5tbSAqLywKIAkJCQkxQzAyM0QzRTI3NDQ5MDcwMDAx
REI3MzQgLyogV0dTTExleGVyVGVzdHMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdHU0xVbml0
VGVzdHM7CkBAIC0zNjgsMTEgKzM3NSwxMiBAQAogCQkJCTFDRUJEODA0MjcxNkJGQUIwMEE1MjU0
RCAvKiBjb25maWcuaCAqLywKIAkJCQkzM0VBMTg2NTI3QkMxQUQ1MDBBMURENTIgLyogQ29tcGls
YXRpb25NZXNzYWdlLmggKi8sCiAJCQkJMzNFQTE4NjcyN0JDMUIxNDAwQTFERDUyIC8qIENvbXBp
bGF0aW9uTWVzc2FnZS5jcHAgKi8sCi0JCQkJMzM4QkIyRDMyN0I2QjY2QzAwRTA2NkFCIC8qIExl
eGVyLmggKi8sCiAJCQkJMzM4QkIyRDUyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCAqLywK
IAkJCQkzMzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCAqLywKIAkJCQkzMzhCQjJE
MTI3QjZCNjNGMDBFMDY2QUIgLyogU291cmNlU3Bhbi5oICovLAogCQkJCTMzOEJCMkNGMjdCNkI2
MUIwMEUwNjZBQiAvKiBUb2tlbi5jcHAgKi8sCisJCQkJMzM5QjdCMTcyN0Q3RkZBNDAwNzJCRjlB
IC8qIFBhcnNlci5oICovLAorCQkJCTMzOUI3QjFBMjdEODAwMDkwMDcyQkY5QSAvKiBQYXJzZXIu
Y3BwICovLAogCQkJCTMzOEJCMkNEMjdCNkI2MDIwMEUwNjZBQiAvKiBUb2tlbi5oICovLAogCQkJ
CTFDRUJEODAyMjcxNkJGODIwMEE1MjU0RCAvKiBXR1NMLmNwcCAqLywKIAkJCQkxQ0VCRDdGNzI3
MTZCMzQ0MDBBNTI1NEQgLyogV0dTTC5oICovLApAQCAtNDcyLDYgKzQ4MCw3IEBACiAJCQkJMzNF
QTE4NUUyN0JDMTk0RjAwQTFERDUyIC8qIEFTVE5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMz
RUExODg2MjdCQzI2REYwMEExREQ1MiAvKiBUeXBlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzNFQTE4NjQyN0JDMUExRDAwQTFERDUyIC8qIEdsb2JhbFZhcmlhYmxlRGVjbC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzM5QjdCMTgyN0Q3RkZBNDAwNzJCRjlBIC8qIFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzNFQTE4N0IyN0JDMjMwRTAwQTFERDUyIC8qIENvbXBvdW5kU3Rh
dGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzM0VBMTg3NjI3QkMyMTZCMDBBMURENTIgLyog
RnVuY3Rpb25EZWNsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzhCQjJEMjI3QjZCNjNGMDBFMDY2
QUIgLyogU291cmNlU3Bhbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODAsNiArNjg5LDcgQEAKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQkxQzAyM0Qz
RjI3NDQ5MDcwMDAxREI3MzQgLyogV0dTTExleGVyVGVzdHMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQkzMzlCN0IxRDI3RDgwQTFDMDA3MkJGOUEgLyogV0dTTFBhcnNlclRlc3RzLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC03MjUsNiArNzM1LDggQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNl
OwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTMz
OUI3QjFFMjdEODE2MjcwMDcyQkY5QSAvKiBDb21waWxhdGlvbk1lc3NhZ2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMzM5QjdCMUIyN0Q4MDAwOTAwNzJCRjlBIC8qIFBhcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMzhCQjJENjI3QjZCNjg3MDBFMDY2QUIgLyogTGV4ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzM4QkIyRDAyN0I2QjYxQjAwRTA2NkFCIC8qIFRva2VuLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFDRUJEODAzMjcxNkJGODIwMEE1MjU0RCAvKiBXR1NMLmNwcCBpbiBT
b3VyY2VzICovLAo=
</data>
<flag name="review"
          id="481769"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454275</attachid>
            <date>2022-03-09 11:56:41 -0800</date>
            <delta_ts>2022-03-09 14:26:34 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patchParser</filename>
            <type>text/plain</type>
            <size>57576</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggOGIxNjE3NzJhMWFmLi43MjAwYTk3NjhlZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNzIgQEAKKzIwMjItMDMtMDggIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNv
bT4KKworICAgICAgICBbV0dTTF0gSW1wbGVtZW50IGVub3VnaCBvZiB0aGUgUGFyc2VyIGZvciB0
aGUgc2ltcGxlc3Qgc2hhZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM3NjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTXlsZXMgTWF4ZmllbGQu
CisKKyAgICAgICAgVGhlIHNwZWNpZmljICJoZWxsby13b3JsZCItbGlrZSBzaGFkZXJzIHRoYXQg
SSB3YW50IHRoaXMgdG8gYmUgYWJsZSB0byBwYXJzZSBhcmUgaW5jbHVkZWQgaW4gV0dTTFBhcnNl
clRlc3RzLm1tLgorCisgICAgICAgIFRoZSBnZW5lcmFsIGFwcHJvYWNoIHRvIHRoZSBwYXJzZXIs
IHN1Y2ggYXMgaXRzIHRlbXBsYXRpbmcgYnkgdGhlIExleGVyLCBpcyBkaXJlY3RseSBjb3BpZWQg
ZnJvbSBKU0MncyBwYXJzZXIuCisgICAgICAgIFRoaW5ncyBhcmUgYSBiaXQgc2ltcGxlciBmb3Ig
dXMgYXMgV0dTTCBpcyBzdWNoIGEgc2ltcGxlIGxhbmd1YWdlIHRvIHBhcnNlLCBiZWluZyBzdHJp
Y3RseSBMUigxKS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoIEkgYWxzbyBkZWxldGVkIEJsb2Nr
QXR0cmlidXRlLCBzaW5jZSB0aGlzIGF0dHJpYnV0ZSB3YXMgcmVjZW50bHkgcmVtb3ZlZCBmcm9t
IHRoZSBsYW5ndWFnZS4KKworICAgICAgICAqIFdHU0wvQVNUL0F0dHJpYnV0ZS5oOgorICAgICAg
ICAoV0dTTDo6QVNUOjpBdHRyaWJ1dGU6OmlzQmxvY2sgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIFdHU0wvQVNUL0V4cHJlc3Npb25zL1R5cGVDb252ZXJzaW9uLmg6CisgICAgICAgICogV0dT
TC9BU1QvRnVuY3Rpb25EZWNsLmg6CisgICAgICAgICogV0dTTC9BU1QvU2hhZGVyTW9kdWxlLmg6
CisgICAgICAgICogV0dTTC9BU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50Lmg6Cisg
ICAgICAgICogV0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oOgorICAgICAgICAqIFdHU0wvQVNUL1R5
cGVEZWNsLmg6CisgICAgICAgIChXR1NMOjpBU1Q6OlBhcmFtZXRlcml6ZWRUeXBlOjpzdHJpbmdW
aWV3VG9LaW5kKToKKyAgICAgICAgKiBXR1NML0NvbXBpbGF0aW9uTWVzc2FnZS5oOgorICAgICAg
ICAqIFdHU0wvUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXR1NMOjpQYXJzZXI6OlBhcnNl
cik6CisgICAgICAgIChXR1NMOjpQYXJzZXI6OmN1cnJlbnQpOgorICAgICAgICAoV0dTTDo6cGFy
c2UpOgorICAgICAgICAoV0dTTDo6cGFyc2VMQ2hhcik6CisgICAgICAgIChXR1NMOjpwYXJzZVVD
aGFyKToKKyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OmNvbnN1bWVUeXBlKToKKyAgICAg
ICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OmNvbnN1bWUpOgorICAgICAgICAoV0dTTDo6UGFyc2Vy
PExleGVyPjo6cGFyc2VTaGFkZXIpOgorICAgICAgICAoV0dTTDo6UGFyc2VyPExleGVyPjo6cGFy
c2VHbG9iYWxEZWNsKToKKyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlQXR0cmli
dXRlcyk6CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZUF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZVN0cnVjdERlY2wpOgorICAgICAgICAo
V0dTTDo6UGFyc2VyPExleGVyPjo6cGFyc2VTdHJ1Y3RNZW1iZXIpOgorICAgICAgICAoV0dTTDo6
UGFyc2VyPExleGVyPjo6cGFyc2VUeXBlRGVjbCk6CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4
ZXI+OjpwYXJzZVR5cGVEZWNsQWZ0ZXJJZGVudGlmaWVyKToKKyAgICAgICAgKFdHU0w6OlBhcnNl
cjxMZXhlcj46OnBhcnNlR2xvYmFsVmFyaWFibGVEZWNsKToKKyAgICAgICAgKFdHU0w6OlBhcnNl
cjxMZXhlcj46OnBhcnNlVmFyaWFibGVRdWFsaWZpZXIpOgorICAgICAgICAoV0dTTDo6UGFyc2Vy
PExleGVyPjo6cGFyc2VTdG9yYWdlQ2xhc3MpOgorICAgICAgICAoV0dTTDo6UGFyc2VyPExleGVy
Pjo6cGFyc2VBY2Nlc3NNb2RlKToKKyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNl
RnVuY3Rpb25EZWNsKToKKyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlUGFyYW1l
dGVyKToKKyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlU3RhdGVtZW50KToKKyAg
ICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlQ29tcG91bmRTdGF0ZW1lbnQpOgorICAg
ICAgICAoV0dTTDo6UGFyc2VyPExleGVyPjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQpOgorICAgICAg
ICAoV0dTTDo6UGFyc2VyPExleGVyPjo6cGFyc2VTaG9ydENpcmN1aXRPckV4cHJlc3Npb24pOgor
ICAgICAgICAoV0dTTDo6UGFyc2VyPExleGVyPjo6cGFyc2VSZWxhdGlvbmFsRXhwcmVzc2lvbik6
CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZVNoaWZ0RXhwcmVzc2lvbik6Cisg
ICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZUFkZGl0aXZlRXhwcmVzc2lvbik6Cisg
ICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lv
bik6CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZVVuYXJ5RXhwcmVzc2lvbik6
CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZVNpbmd1bGFyRXhwcmVzc2lvbik6
CisgICAgICAgIChXR1NMOjpQYXJzZXI8TGV4ZXI+OjpwYXJzZVBvc3RmaXhFeHByZXNzaW9uKToK
KyAgICAgICAgKFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOgor
ICAgICAgICAoV0dTTDo6UGFyc2VyPExleGVyPjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAg
KFdHU0w6OlBhcnNlcjxMZXhlcj46OnBhcnNlTEhTRXhwcmVzc2lvbik6CisgICAgICAgIChXR1NM
OjpQYXJzZXI8TGV4ZXI+OjpwYXJzZUNvcmVMSFNFeHByZXNzaW9uKToKKyAgICAgICAgKFdHU0w6
OlBhcnNlcjxMZXhlcj46OnBhcnNlQXJndW1lbnRFeHByZXNzaW9uTGlzdCk6CisgICAgICAgICog
V0dTTC9QYXJzZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkdQVS9XR1NML0NvbXBpbGF0aW9u
TWVzc2FnZS5oLgorICAgICAgICAqIFdHU0wvV0dTTC5jcHA6CisgICAgICAgIChXR1NMOjpzdGF0
aWNDaGVjayk6CisgICAgICAgIChXR1NMOjpTdWNjZXNzZnVsQ2hlY2s6OlN1Y2Nlc3NmdWxDaGVj
ayk6CisgICAgICAgICogV0dTTC9XR1NMLmg6CisgICAgICAgICogV2ViR1BVLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisKIDIwMjItMDMtMDggIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0
QGFwcGxlLmNvbT4KIAogICAgICAgICBbV0dTTF0gQWRkIGVub3VnaCBvZiB0aGUgQVNUIGZvciB0
aGUgc2ltcGxlc3Qgc2hhZGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML0FTVC9B
dHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvQXR0cmlidXRlLmgKaW5kZXggN2Uy
MGFmNzI1YjA0Li5hNzcxMzY3MDcxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvQXR0cmlidXRlLmgKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9BdHRyaWJ1dGUuaApA
QCAtMzYsNyArMzYsNiBAQCBjbGFzcyBBdHRyaWJ1dGUgOiBwdWJsaWMgQVNUTm9kZSB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBLaW5kIHsK
LSAgICAgICAgQmxvY2ssCiAgICAgICAgIEdyb3VwLAogICAgICAgICBCaW5kaW5nLAogICAgICAg
ICBTdGFnZSwKQEAgLTUyLDcgKzUxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF0dHJpYnV0
ZSgpIHt9OwogCiAgICAgdmlydHVhbCBLaW5kIGtpbmQoKSBjb25zdCA9IDAgOwotICAgIGJvb2wg
aXNCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpCbG9jazsgfQogICAgIGJv
b2wgaXNHcm91cCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpHcm91cDsgfQogICAg
IGJvb2wgaXNCaW5kaW5nKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEtpbmQ6OkJpbmRpbmc7
IH0KICAgICBib29sIGlzU3RhZ2UoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gS2luZDo6U3Rh
Z2U7IH0KQEAgLTYwLDE3ICs1OCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQnVpbHRpbigpIGNv
bnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBLaW5kOjpCdWlsdGluOyB9CiB9OwogCi1jbGFzcyBCbG9j
a0F0dHJpYnV0ZSBmaW5hbCA6IHB1YmxpYyBBdHRyaWJ1dGUgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIEJsb2NrQXR0cmlidXRlKFNvdXJjZVNwYW4gc3BhbikK
LSAgICAgICAgOiBBdHRyaWJ1dGUoc3BhbikKLSAgICB7Ci0gICAgfQotCi0gICAgS2luZCBraW5k
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2luZDo6QmxvY2s7IH0KLX07Ci0KIGNsYXNzIEdy
b3VwQXR0cmlidXRlIGZpbmFsIDogcHVibGljIEF0dHJpYnV0ZSB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xNjYsNyArMTUzLDYgQEAgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXR1NMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAogICAgIHN0YXRpYyBi
b29sIGlzVHlwZShjb25zdCBXR1NMOjpBU1Q6OkF0dHJpYnV0ZSYgYXR0cikgeyByZXR1cm4gYXR0
ci5wcmVkaWNhdGU7IH0gXAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKEJsb2NrQXR0cmlidXRlLCBpc0Jsb2NrKCkp
CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKEdyb3VwQXR0cmlidXRlLCBp
c0dyb3VwKCkpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dHU0xfQVRUUklCVVRFKEJpbmRpbmdB
dHRyaWJ1dGUsIGlzQmluZGluZygpKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XR1NMX0FUVFJJ
QlVURShTdGFnZUF0dHJpYnV0ZSwgaXNTdGFnZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQ
VS9XR1NML0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oIGIvU291cmNlL1dlYkdQVS9X
R1NML0FTVC9FeHByZXNzaW9ucy9UeXBlQ29udmVyc2lvbi5oCmluZGV4IGQxNTdlOWY4YWUwZC4u
OTU0MmJlODEzOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0V4cHJlc3Np
b25zL1R5cGVDb252ZXJzaW9uLmgKKysrIGIvU291cmNlL1dlYkdQVS9XR1NML0FTVC9FeHByZXNz
aW9ucy9UeXBlQ29udmVyc2lvbi5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJUeXBlRGVjbC5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvRnVuY3Rpb25EZWNsLmggYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvQVNUL0Z1bmN0aW9uRGVjbC5oCmluZGV4IGQzY2Y3MmRlODg5NC4uMWU5MzU2OTgxMGMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL0Z1bmN0aW9uRGVjbC5oCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvRnVuY3Rpb25EZWNsLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJBU1ROb2RlLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiQ29t
cGlsYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiR2xvYmFsRGVjbC5oIgogI2luY2x1ZGUgIlN0
YXRlbWVudHMvQ29tcG91bmRTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJUeXBlRGVjbC5oIgogCkBA
IC00Niw2ICs0Nyw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBUeXBlRGVjbCYgdHlwZSgpIHsgcmV0dXJuIG1f
dHlwZTsgfQorICAgIEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSB7IHJldHVybiBtX2F0dHJpYnV0
ZXM7IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmdWaWV3IG1fbmFtZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvU2hhZGVyTW9kdWxlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wv
QVNUL1NoYWRlck1vZHVsZS5oCmluZGV4IGYwNmRkZjMwNzBmMS4uMTI2MTVmMWJkMmYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQVNUL1NoYWRlck1vZHVsZS5oCisrKyBiL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1QvU2hhZGVyTW9kdWxlLmgKQEAgLTI2LDggKzI2LDExIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkFTVE5vZGUuaCIKKyNpbmNsdWRlICJGdW5jdGlvbkRlY2wu
aCIKICNpbmNsdWRlICJHbG9iYWxEZWNsLmgiCiAjaW5jbHVkZSAiR2xvYmFsRGlyZWN0aXZlLmgi
CisjaW5jbHVkZSAiR2xvYmFsVmFyaWFibGVEZWNsLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlRGVj
bC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkdQVS9XR1NML0FTVC9TdGF0ZW1lbnRzL0Fzc2lnbm1lbnRTdGF0ZW1lbnQuaCBiL1Nv
dXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50LmgKaW5k
ZXggOGU0YzY0MWVmMGUzLi41NjZhZWJiMTViNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUv
V0dTTC9BU1QvU3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkdQVS9XR1NML0FTVC9TdGF0ZW1lbnRzL0Fzc2lnbm1lbnRTdGF0ZW1lbnQuaApAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlN0YXRlbWVudC5o
IgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdHU0w6OkFTVCB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oIGIvU291
cmNlL1dlYkdQVS9XR1NML0FTVC9TdHJ1Y3R1cmVEZWNsLmgKaW5kZXggNGFkZWJlNTllYmFhLi42
N2Y1MjFkMDM2ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RydWN0dXJl
RGVjbC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvU3RydWN0dXJlRGVjbC5oCkBAIC01
MCw2ICs1MCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUoKSBjb25z
dCB7IHJldHVybiBtX25hbWU7IH0KICAgICBUeXBlRGVjbCYgdHlwZSgpIHsgcmV0dXJuIG1fdHlw
ZTsgfQorICAgIEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmdWaWV3IG1fbmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV0dTTC9BU1QvVHlwZURlY2wuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9BU1QvVHlw
ZURlY2wuaAppbmRleCBkZGRmODIwNzliMzguLmEyODhlNGNhMGQ5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XR1NML0FTVC9UeXBlRGVjbC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9B
U1QvVHlwZURlY2wuaApAQCAtOTIsNiArOTIsMzUgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxCYXNlPiBzdHJpbmdWaWV3VG9LaW5kKFN0cmluZ1Zp
ZXcmIHZpZXcpCisgICAgeworICAgICAgICBpZiAodmlldyA9PSAidmVjMiIpCisgICAgICAgICAg
ICByZXR1cm4gQmFzZTo6VmVjMjsKKyAgICAgICAgaWYgKHZpZXcgPT0gInZlYzMiKQorICAgICAg
ICAgICAgcmV0dXJuIEJhc2U6OlZlYzM7CisgICAgICAgIGlmICh2aWV3ID09ICJ2ZWM0IikKKyAg
ICAgICAgICAgIHJldHVybiBCYXNlOjpWZWM0OworICAgICAgICBpZiAodmlldyA9PSAibWF0Mngy
IikKKyAgICAgICAgICAgIHJldHVybiBCYXNlOjpNYXQyeDI7CisgICAgICAgIGlmICh2aWV3ID09
ICJtYXQyeDMiKQorICAgICAgICAgICAgcmV0dXJuIEJhc2U6Ok1hdDJ4MzsKKyAgICAgICAgaWYg
KHZpZXcgPT0gIm1hdDJ4NCIpCisgICAgICAgICAgICByZXR1cm4gQmFzZTo6TWF0Mng0OworICAg
ICAgICBpZiAodmlldyA9PSAibWF0M3gyIikKKyAgICAgICAgICAgIHJldHVybiBCYXNlOjpNYXQz
eDI7CisgICAgICAgIGlmICh2aWV3ID09ICJtYXQzeDMiKQorICAgICAgICAgICAgcmV0dXJuIEJh
c2U6Ok1hdDN4MzsKKyAgICAgICAgaWYgKHZpZXcgPT0gIm1hdDN4NCIpCisgICAgICAgICAgICBy
ZXR1cm4gQmFzZTo6TWF0M3g0OworICAgICAgICBpZiAodmlldyA9PSAibWF0NHgyIikKKyAgICAg
ICAgICAgIHJldHVybiBCYXNlOjpNYXQ0eDI7CisgICAgICAgIGlmICh2aWV3ID09ICJtYXQ0eDMi
KQorICAgICAgICAgICAgcmV0dXJuIEJhc2U6Ok1hdDR4MzsKKyAgICAgICAgaWYgKHZpZXcgPT0g
Im1hdDR4NCIpCisgICAgICAgICAgICByZXR1cm4gQmFzZTo6TWF0NHg0OworICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwogICAgIEtpbmQga2luZCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEtpbmQ6OlBhcmFtZXRlcml6ZWQ7IH0KICAgICBCYXNlIGJhc2UoKSBjb25zdCB7
IHJldHVybiBtX2Jhc2U7IH0KICAgICBUeXBlRGVjbCYgZWxlbWVudFR5cGUoKSB7IHJldHVybiBt
X2VsZW1lbnRUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dHU0wvQ29tcGlsYXRp
b25NZXNzYWdlLmggYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQ29tcGlsYXRpb25NZXNzYWdlLmgKaW5k
ZXggNzA0M2ZmM2VhMzVlLi5lMjEwNTI4MWEwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUv
V0dTTC9Db21waWxhdGlvbk1lc3NhZ2UuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dHU0wvQ29tcGls
YXRpb25NZXNzYWdlLmgKQEAgLTUzLDQgKzUzLDcgQEAgcHJpdmF0ZToKICAgICBTb3VyY2VTcGFu
IG1fc3BhbjsKIH07CiAKK3VzaW5nIFdhcm5pbmcgPSBDb21waWxhdGlvbk1lc3NhZ2U7Cit1c2lu
ZyBFcnJvciA9IENvbXBpbGF0aW9uTWVzc2FnZTsKKwogfSAvLyBuYW1lc3BhY2UgV0dTTApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViR1BVL1dH
U0wvUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjYy
NTQ4N2RlMTg1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9QYXJzZXIu
Y3BwCkBAIC0wLDAgKzEsNzU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlBhcnNlci5oIgor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQVNUL0F0dHJpYnV0ZS5oIgorI2luY2x1
ZGUgIkFTVC9FeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL0lkZW50aWZp
ZXJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiQVNUL0V4cHJlc3Npb25zL0xpdGVyYWxFeHByZXNz
aW9ucy5oIgorI2luY2x1ZGUgIkFTVC9FeHByZXNzaW9ucy9TdHJ1Y3R1cmVBY2Nlc3MuaCIKKyNp
bmNsdWRlICJBU1QvRXhwcmVzc2lvbnMvVHlwZUNvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJBU1Qv
R2xvYmFsRGVjbC5oIgorI2luY2x1ZGUgIkFTVC9TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1Qv
U3RhdGVtZW50cy9Bc3NpZ25tZW50U3RhdGVtZW50LmgiCisjaW5jbHVkZSAiQVNUL1N0YXRlbWVu
dHMvQ29tcG91bmRTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1QvU3RhdGVtZW50cy9SZXR1cm5T
dGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJBU1QvU3RydWN0dXJlRGVjbC5oIgorI2luY2x1ZGUgIkxl
eGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2Ug
V0dTTCB7CisKKyNkZWZpbmUgU1RBUlRfUEFSU0UoKSBcCisgICAgYXV0byBfc3RhcnRPZkVsZW1l
bnRQb3NpdGlvbiA9IG1fbGV4ZXIuY3VycmVudFBvc2l0aW9uKCk7CisKKyNkZWZpbmUgQ1VSUkVO
VF9TT1VSQ0VfU1BBTigpIFwKKyAgICBTb3VyY2VTcGFuKF9zdGFydE9mRWxlbWVudFBvc2l0aW9u
LCBtX2xleGVyLmN1cnJlbnRQb3NpdGlvbigpKQorCisjZGVmaW5lIFJFVFVSTl9OT0RFKHR5cGUs
IC4uLikgXAorICAgIGRvIHsgXAorICAgICAgICBBU1Q6OnR5cGUgYXN0Tm9kZVJlc3VsdChDVVJS
RU5UX1NPVVJDRV9TUEFOKCksIF9fVkFfQVJHU19fKTsgXAorICAgICAgICByZXR1cm4geyBXVEZN
b3ZlKGFzdE5vZGVSZXN1bHQpIH07IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworLy8gUGFzc2lu
ZyAwIGFyZ3VtZW50cyBiZXlvbmQgdGhlIHR5cGUgdG8gUkVUVVJOX05PREUgaXMgaW52YWxpZCBi
ZWNhdXNlIG9mIGEgc3R1cGlkIGxpbWl0YXRpb24gb2YgdGhlIEMgcHJlcHJvY2Vzc29yCisjZGVm
aW5lIFJFVFVSTl9OT0RFX05PX0FSR1ModHlwZSkgXAorICAgIGRvIHsgXAorICAgICAgICBBU1Q6
OnR5cGUgYXN0Tm9kZVJlc3VsdChDVVJSRU5UX1NPVVJDRV9TUEFOKCkpOyBcCisgICAgICAgIHJl
dHVybiB7IFdURk1vdmUoYXN0Tm9kZVJlc3VsdCkgfTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQor
CisjZGVmaW5lIFJFVFVSTl9OT0RFX1JFRih0eXBlLCAuLi4pIFwKKyAgICByZXR1cm4geyBtYWtl
VW5pcXVlUmVmPEFTVDo6dHlwZT4oQ1VSUkVOVF9TT1VSQ0VfU1BBTigpLCBfX1ZBX0FSR1NfXykg
fTsKKworLy8gUGFzc2luZyAwIGFyZ3VtZW50cyBiZXlvbmQgdGhlIHR5cGUgdG8gUkVUVVJOX05P
REVfUkVGIGlzIGludmFsaWQgYmVjYXVzZSBvZiBhIHN0dXBpZCBsaW1pdGF0aW9uIG9mIHRoZSBD
IHByZXByb2Nlc3NvcgorI2RlZmluZSBSRVRVUk5fTk9ERV9SRUZfTk9fQVJHUyh0eXBlKSBcCisg
ICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OnR5cGU+KENVUlJFTlRfU09VUkNFX1NQQU4o
KSkgfTsKKworI2RlZmluZSBGQUlMKHN0cmluZykgXAorICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChFcnJvcihzdHJpbmcsIENVUlJFTlRfU09VUkNFX1NQQU4oKSkpOworCisvLyBXYXJuaW5nOiBj
YW5ub3QgdXNlIHRoZSBkby4ud2hpbGUgdHJpY2sgYmVjYXVzZSBpdCBkZWZpbmVzIGEgbmV3IGlk
ZW50aWZpZXIgbmFtZWQgYG5hbWVgLgorLy8gU28gZG8gbm90IHVzZSBhZnRlciBhbiBpZi9mb3Iv
d2hpbGUgd2l0aG91dCBicmFjZXMuCisjZGVmaW5lIFBBUlNFKG5hbWUsIGVsZW1lbnQsIC4uLikg
XAorICAgIGF1dG8gbmFtZSMjRXhwZWN0ZWQgPSBwYXJzZSMjZWxlbWVudChfX1ZBX0FSR1NfXyk7
IFwKKyAgICBpZiAoIW5hbWUjI0V4cGVjdGVkKSBcCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChuYW1lIyNFeHBlY3RlZC5lcnJvcigpKTsgXAorICAgIGF1dG8mIG5hbWUgPSAqbmFtZSMj
RXhwZWN0ZWQ7CisKKy8vIFdhcm5pbmc6IGNhbm5vdCB1c2UgdGhlIGRvLi53aGlsZSB0cmljayBi
ZWNhdXNlIGl0IGRlZmluZXMgYSBuZXcgaWRlbnRpZmllciBuYW1lZCBgbmFtZWAuCisvLyBTbyBk
byBub3QgdXNlIGFmdGVyIGFuIGlmL2Zvci93aGlsZSB3aXRob3V0IGJyYWNlcy4KKyNkZWZpbmUg
Q09OU1VNRV9UWVBFX05BTUVEKG5hbWUsIHR5cGUpIFwKKyAgICBhdXRvIG5hbWUjI0V4cGVjdGVk
ID0gY29uc3VtZVR5cGUoVG9rZW5UeXBlOjp0eXBlKTsgXAorICAgIGlmICghbmFtZSMjRXhwZWN0
ZWQpIHsgXAorICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7IFwKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIkV4cGVjdGVkIGEgIik7IFwKKyAgICAgICAgYnVpbGRlci5hcHBlbmQodG9TdHJp
bmcoVG9rZW5UeXBlOjp0eXBlKSk7IFwKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgYnV0IGdv
dCBhICIpOyBcCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRvU3RyaW5nKG5hbWUjI0V4cGVjdGVk
LmVycm9yKCkpKTsgXAorICAgICAgICBGQUlMKGJ1aWxkZXIudG9TdHJpbmcoKSk7IFwKKyAgICB9
IFwKKyAgICBhdXRvJiBuYW1lID0gKm5hbWUjI0V4cGVjdGVkOworCisjZGVmaW5lIENPTlNVTUVf
VFlQRSh0eXBlKSBcCisgICAgZG8geyBcCisgICAgICAgIGF1dG8gZXhwZWN0ZWRUb2tlbiA9IGNv
bnN1bWVUeXBlKFRva2VuVHlwZTo6dHlwZSk7IFwKKyAgICAgICAgaWYgKCFleHBlY3RlZFRva2Vu
KSB7IFwKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsgXAorICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIkV4cGVjdGVkIGEgIik7IFwKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKHRvU3RyaW5nKFRva2VuVHlwZTo6dHlwZSkpOyBcCisgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgiLCBidXQgZ290IGEgIik7IFwKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRvU3Ry
aW5nKGV4cGVjdGVkVG9rZW4uZXJyb3IoKSkpOyBcCisgICAgICAgICAgICBGQUlMKGJ1aWxkZXIu
dG9TdHJpbmcoKSk7IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKK3RlbXBs
YXRlPHR5cGVuYW1lIExleGVyPgorY2xhc3MgUGFyc2VyIHsKK3B1YmxpYzoKKyAgICBQYXJzZXIo
TGV4ZXImIGxleGVyKQorICAgICAgICA6IG1fbGV4ZXIobGV4ZXIpCisgICAgICAgICwgbV9jdXJy
ZW50KGxleGVyLmxleCgpKQorICAgIHsKKyAgICB9CisKKyAgICBFeHBlY3RlZDxBU1Q6OlNoYWRl
ck1vZHVsZSwgRXJyb3I+IHBhcnNlU2hhZGVyKCk7CisKK3ByaXZhdGU6CisgICAgLy8gVW5pcXVl
UmVmIHdoZW5ldmVyIGl0IGNhbiByZXR1cm4gbXVsdGlwbGUgdHlwZXMuCisgICAgRXhwZWN0ZWQ8
VW5pcXVlUmVmPEFTVDo6R2xvYmFsRGVjbD4sIEVycm9yPiBwYXJzZUdsb2JhbERlY2woKTsKKyAg
ICBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZXMsIEVycm9yPiBwYXJzZUF0dHJpYnV0ZXMoKTsKKyAg
ICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpBdHRyaWJ1dGU+LCBFcnJvcj4gcGFyc2VBdHRyaWJ1
dGUoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlN0cnVjdERlY2wsIEVycm9yPiBwYXJzZVN0cnVjdERl
Y2woQVNUOjpBdHRyaWJ1dGVzJiYpOworICAgIEV4cGVjdGVkPEFTVDo6U3RydWN0TWVtYmVyLCBF
cnJvcj4gcGFyc2VTdHJ1Y3RNZW1iZXIoKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpU
eXBlRGVjbD4sIEVycm9yPiBwYXJzZVR5cGVEZWNsKCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVm
PEFTVDo6VHlwZURlY2w+LCBFcnJvcj4gcGFyc2VUeXBlRGVjbEFmdGVySWRlbnRpZmllcihTdHJp
bmdWaWV3JiYsIFNvdXJjZVBvc2l0aW9uIHN0YXJ0KTsKKyAgICBFeHBlY3RlZDxBU1Q6Okdsb2Jh
bFZhcmlhYmxlRGVjbCwgRXJyb3I+IHBhcnNlR2xvYmFsVmFyaWFibGVEZWNsKEFTVDo6QXR0cmli
dXRlcyYmKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlUXVhbGlmaWVyLCBFcnJvcj4gcGFy
c2VWYXJpYWJsZVF1YWxpZmllcigpOworICAgIEV4cGVjdGVkPEFTVDo6U3RvcmFnZUNsYXNzLCBF
cnJvcj4gcGFyc2VTdG9yYWdlQ2xhc3MoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OkFjY2Vzc01vZGUs
IEVycm9yPiBwYXJzZUFjY2Vzc01vZGUoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVj
bCwgRXJyb3I+IHBhcnNlRnVuY3Rpb25EZWNsKEFTVDo6QXR0cmlidXRlcyYmKTsKKyAgICBFeHBl
Y3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHBhcnNlUGFyYW1ldGVyKCk7CisgICAgRXhwZWN0
ZWQ8VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50PiwgRXJyb3I+IHBhcnNlU3RhdGVtZW50KCk7Cisg
ICAgRXhwZWN0ZWQ8QVNUOjpDb21wb3VuZFN0YXRlbWVudCwgRXJyb3I+IHBhcnNlQ29tcG91bmRT
dGF0ZW1lbnQoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlJldHVyblN0YXRlbWVudCwgRXJyb3I+IHBh
cnNlUmV0dXJuU3RhdGVtZW50KCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4sIEVycm9yPiBwYXJzZVNob3J0Q2lyY3VpdE9yRXhwcmVzc2lvbigpOworICAgIEV4cGVj
dGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VSZWxhdGlvbmFsRXhw
cmVzc2lvbigpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJv
cj4gcGFyc2VTaGlmdEV4cHJlc3Npb24oKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPiwgRXJyb3I+IHBhcnNlQWRkaXRpdmVFeHByZXNzaW9uKCk7CisgICAgRXhwZWN0
ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZU11bHRpcGxpY2F0aXZl
RXhwcmVzc2lvbigpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBF
cnJvcj4gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPiwgRXJyb3I+IHBhcnNlU2luZ3VsYXJFeHByZXNzaW9uKCk7CisgICAgRXhw
ZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVBvc3RmaXhFeHBy
ZXNzaW9uKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgYmFzZSwgU291cmNlUG9zaXRpb24g
c3RhcnRQb3NpdGlvbik7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4s
IEVycm9yPiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICBFeHBlY3Rl
ZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHBhcnNlTEhTRXhwcmVzc2lvbigp
OworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VD
b3JlTEhTRXhwcmVzc2lvbigpOworICAgIEV4cGVjdGVkPFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPj4sIEVycm9yPiBwYXJzZUFyZ3VtZW50RXhwcmVzc2lvbkxpc3QoKTsKKworICAg
IEV4cGVjdGVkPFRva2VuLCBUb2tlblR5cGU+IGNvbnN1bWVUeXBlKFRva2VuVHlwZSk7CisgICAg
dm9pZCBjb25zdW1lKCk7CisKKyAgICBUb2tlbiYgY3VycmVudCgpIHsgcmV0dXJuIG1fY3VycmVu
dDsgfQorCisgICAgTGV4ZXImIG1fbGV4ZXI7CisgICAgVG9rZW4gbV9jdXJyZW50OworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBlY3RlZDxBU1Q6OlNoYWRlck1vZHVsZSwgRXJy
b3I+IHBhcnNlKGNvbnN0IFN0cmluZyYgd2dzbCkKK3sKKyAgICBMZXhlciBsZXhlcih3Z3NsKTsK
KyAgICBQYXJzZXIgcGFyc2VyKGxleGVyKTsKKyAgICAKKyAgICByZXR1cm4gcGFyc2VyLnBhcnNl
U2hhZGVyKCk7Cit9CisKK0V4cGVjdGVkPEFTVDo6U2hhZGVyTW9kdWxlLCBFcnJvcj4gcGFyc2VM
Q2hhcihjb25zdCBTdHJpbmcmIHdnc2wpCit7CisgICAgcmV0dXJuIHBhcnNlPExleGVyPExDaGFy
Pj4od2dzbCk7Cit9CisKK0V4cGVjdGVkPEFTVDo6U2hhZGVyTW9kdWxlLCBFcnJvcj4gcGFyc2VV
Q2hhcihjb25zdCBTdHJpbmcmIHdnc2wpCit7CisgICAgcmV0dXJuIHBhcnNlPExleGVyPFVDaGFy
Pj4od2dzbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VG9rZW4s
IFRva2VuVHlwZT4gUGFyc2VyPExleGVyPjo6Y29uc3VtZVR5cGUoVG9rZW5UeXBlIHR5cGUpCit7
CisgICAgaWYgKGN1cnJlbnQoKS5tX3R5cGUgPT0gdHlwZSkgeworICAgICAgICBFeHBlY3RlZDxU
b2tlbiwgVG9rZW5UeXBlPiByZXN1bHQgPSB7IG1fY3VycmVudCB9OworICAgICAgICBtX2N1cnJl
bnQgPSBtX2xleGVyLmxleCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoY3VycmVudCgpLm1fdHlwZSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIExleGVyPgordm9pZCBQYXJzZXI8TGV4ZXI+Ojpjb25zdW1lKCkKK3sKKyAgICBtX2N1
cnJlbnQgPSBtX2xleGVyLmxleCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4
cGVjdGVkPEFTVDo6U2hhZGVyTW9kdWxlLCBFcnJvcj4gUGFyc2VyPExleGVyPjo6cGFyc2VTaGFk
ZXIoKQoreworICAgIFNUQVJUX1BBUlNFKCk7CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
R2xvYmFsRGlyZWN0aXZlPj4gZGlyZWN0aXZlczsKKyAgICAvLyBGSVhNRTogcGFyc2UgZGlyZWN0
aXZlcyBoZXJlLgorCisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6Okdsb2JhbERlY2w+PiBkZWNs
czsKKyAgICB3aGlsZSAoIW1fbGV4ZXIuaXNBdEVuZE9mRmlsZSgpKSB7CisgICAgICAgIFBBUlNF
KGdsb2JhbERlY2wsIEdsb2JhbERlY2wpCisgICAgICAgIGRlY2xzLmFwcGVuZChXVEZNb3ZlKGds
b2JhbERlY2wpKTsKKyAgICB9CisKKyAgICBSRVRVUk5fTk9ERShTaGFkZXJNb2R1bGUsIFdURk1v
dmUoZGlyZWN0aXZlcyksIFdURk1vdmUoZGVjbHMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
TGV4ZXI+CitFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpHbG9iYWxEZWNsPiwgRXJyb3I+IFBhcnNl
cjxMZXhlcj46OnBhcnNlR2xvYmFsRGVjbCgpCit7CisgICAgU1RBUlRfUEFSU0UoKTsKKworICAg
IFBBUlNFKGF0dHJpYnV0ZXMsIEF0dHJpYnV0ZXMpOworCisgICAgc3dpdGNoIChjdXJyZW50KCku
bV90eXBlKSB7CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRTdHJ1Y3Q6IHsKKyAgICAgICAg
UEFSU0Uoc3RydWN0RGVjbCwgU3RydWN0RGVjbCwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7CisgICAg
ICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpTdHJ1Y3REZWNsPihXVEZNb3ZlKHN0cnVj
dERlY2wpKSB9OworICAgIH0KKyAgICBjYXNlIFRva2VuVHlwZTo6S2V5d29yZFZhcjogeworICAg
ICAgICBQQVJTRSh2YXJEZWNsLCBHbG9iYWxWYXJpYWJsZURlY2wsIFdURk1vdmUoYXR0cmlidXRl
cykpOworICAgICAgICBDT05TVU1FX1RZUEUoU2VtaWNvbG9uKTsKKyAgICAgICAgcmV0dXJuIHsg
bWFrZVVuaXF1ZVJlZjxBU1Q6Okdsb2JhbFZhcmlhYmxlRGVjbD4oV1RGTW92ZSh2YXJEZWNsKSkg
fTsKKyAgICB9CisgICAgY2FzZSBUb2tlblR5cGU6OktleXdvcmRGbjogeworICAgICAgICBQQVJT
RShmbiwgRnVuY3Rpb25EZWNsLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgcmV0dXJu
IHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkZ1bmN0aW9uRGVjbD4oV1RGTW92ZShmbikpIH07CisgICAg
fQorICAgIGRlZmF1bHQ6CisgICAgICAgIEZBSUwoIlRyeWluZyB0byBwYXJzZSBhIEdsb2JhbERl
Y2wsIGV4cGVjdGVkICd2YXInLCAnZm4nLCBvciAnc3RydWN0Jy4iKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVzLCBFcnJvcj4g
UGFyc2VyPExleGVyPjo6cGFyc2VBdHRyaWJ1dGVzKCkKK3sKKyAgICBBU1Q6OkF0dHJpYnV0ZXMg
YXR0cmlidXRlczsKKworICAgIHdoaWxlIChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6
QXR0cmlidXRlKSB7CisgICAgICAgIFBBUlNFKGZpcnN0QXR0cmlidXRlLCBBdHRyaWJ1dGUpOwor
ICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChXVEZNb3ZlKGZpcnN0QXR0cmlidXRlKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHsgV1RGTW92ZShhdHRyaWJ1dGVzKSB9OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkF0dHJpYnV0ZT4sIEVycm9y
PiBQYXJzZXI8TGV4ZXI+OjpwYXJzZUF0dHJpYnV0ZSgpCit7CisgICAgU1RBUlRfUEFSU0UoKTsK
KworICAgIENPTlNVTUVfVFlQRShBdHRyaWJ1dGUpOworICAgIENPTlNVTUVfVFlQRV9OQU1FRChp
ZGVudCwgSWRlbnRpZmllcik7CisgICAgaWYgKGlkZW50Lm1faWRlbnQgPT0gImdyb3VwIikgewor
ICAgICAgICBDT05TVU1FX1RZUEUoUGFyZW5MZWZ0KTsKKyAgICAgICAgLy8gRklYTUU6IHNob3Vs
ZCBtb3JlIGtpbmRzIG9mIGxpdGVyYWxzIGJlIGFjY2VwdGVkIGhlcmU/CisgICAgICAgIENPTlNV
TUVfVFlQRV9OQU1FRChpZCwgSW50ZWdlckxpdGVyYWwpOworICAgICAgICBDT05TVU1FX1RZUEUo
UGFyZW5SaWdodCk7CisgICAgICAgIFJFVFVSTl9OT0RFX1JFRihHcm91cEF0dHJpYnV0ZSwgaWQu
bV9saXRlcmFsVmFsdWUpOworICAgIH0KKyAgICBpZiAoaWRlbnQubV9pZGVudCA9PSAiYmluZGlu
ZyIpIHsKKyAgICAgICAgQ09OU1VNRV9UWVBFKFBhcmVuTGVmdCk7CisgICAgICAgIC8vIEZJWE1F
OiBzaG91bGQgbW9yZSBraW5kcyBvZiBsaXRlcmFscyBiZSBhY2NlcHRlZCBoZXJlPworICAgICAg
ICBDT05TVU1FX1RZUEVfTkFNRUQoaWQsIEludGVnZXJMaXRlcmFsKTsKKyAgICAgICAgQ09OU1VN
RV9UWVBFKFBhcmVuUmlnaHQpOworICAgICAgICBSRVRVUk5fTk9ERV9SRUYoQmluZGluZ0F0dHJp
YnV0ZSwgaWQubV9saXRlcmFsVmFsdWUpOworICAgIH0KKyAgICBpZiAoaWRlbnQubV9pZGVudCA9
PSAic3RhZ2UiKSB7CisgICAgICAgIENPTlNVTUVfVFlQRShQYXJlbkxlZnQpOworICAgICAgICBD
T05TVU1FX1RZUEVfTkFNRUQoc3RhZ2UsIElkZW50aWZpZXIpOworICAgICAgICBDT05TVU1FX1RZ
UEUoUGFyZW5SaWdodCk7CisgICAgICAgIGlmIChzdGFnZS5tX2lkZW50ID09ICJjb21wdXRlIikK
KyAgICAgICAgICAgIFJFVFVSTl9OT0RFX1JFRihTdGFnZUF0dHJpYnV0ZSwgQVNUOjpTdGFnZUF0
dHJpYnV0ZTo6U3RhZ2U6OkNvbXB1dGUpOworICAgICAgICBpZiAoc3RhZ2UubV9pZGVudCA9PSAi
dmVydGV4IikKKyAgICAgICAgICAgIFJFVFVSTl9OT0RFX1JFRihTdGFnZUF0dHJpYnV0ZSwgQVNU
OjpTdGFnZUF0dHJpYnV0ZTo6U3RhZ2U6OlZlcnRleCk7CisgICAgICAgIGlmIChzdGFnZS5tX2lk
ZW50ID09ICJmcmFnbWVudCIpCisgICAgICAgICAgICBSRVRVUk5fTk9ERV9SRUYoU3RhZ2VBdHRy
aWJ1dGUsIEFTVDo6U3RhZ2VBdHRyaWJ1dGU6OlN0YWdlOjpGcmFnbWVudCk7CisgICAgICAgIEZB
SUwoIkludmFsaWQgc3RhZ2UgYXR0cmlidXRlLCB0aGUgb25seSBvcHRpb25zIGFyZSAnY29tcHV0
ZScsICd2ZXJ0ZXgnLCAnZnJhZ21lbnQnLiIpOworICAgIH0KKyAgICBpZiAoaWRlbnQubV9pZGVu
dCA9PSAibG9jYXRpb24iKSB7CisgICAgICAgIENPTlNVTUVfVFlQRShQYXJlbkxlZnQpOworICAg
ICAgICAvLyBGSVhNRTogc2hvdWxkIG1vcmUga2luZHMgb2YgbGl0ZXJhbHMgYmUgYWNjZXB0ZWQg
aGVyZT8KKyAgICAgICAgQ09OU1VNRV9UWVBFX05BTUVEKGlkLCBJbnRlZ2VyTGl0ZXJhbCk7Cisg
ICAgICAgIENPTlNVTUVfVFlQRShQYXJlblJpZ2h0KTsKKyAgICAgICAgUkVUVVJOX05PREVfUkVG
KExvY2F0aW9uQXR0cmlidXRlLCBpZC5tX2xpdGVyYWxWYWx1ZSk7CisgICAgfQorICAgIGlmIChp
ZGVudC5tX2lkZW50ID09ICJidWlsdGluIikgeworICAgICAgICBDT05TVU1FX1RZUEUoUGFyZW5M
ZWZ0KTsKKyAgICAgICAgQ09OU1VNRV9UWVBFX05BTUVEKG5hbWUsIElkZW50aWZpZXIpOworICAg
ICAgICBDT05TVU1FX1RZUEUoUGFyZW5SaWdodCk7CisgICAgICAgIFJFVFVSTl9OT0RFX1JFRihC
dWlsdGluQXR0cmlidXRlLCBuYW1lLm1faWRlbnQpOworICAgIH0KKyAgICBGQUlMKCJVbmtub3du
IGF0dHJpYnV0ZSwgdGhlIG9ubHkgc3VwcG9ydGVkIGF0dHJpYnV0ZXMgYXJlICdncm91cCcsICdi
aW5kaW5nJywgJ3N0YWdlJy4iKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBl
Y3RlZDxBU1Q6OlN0cnVjdERlY2wsIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVN0cnVjdERl
Y2woQVNUOjpBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKK3sKKyAgICBTVEFSVF9QQVJTRSgpOwor
CisgICAgQ09OU1VNRV9UWVBFKEtleXdvcmRTdHJ1Y3QpOworICAgIENPTlNVTUVfVFlQRV9OQU1F
RChuYW1lLCBJZGVudGlmaWVyKTsKKyAgICBDT05TVU1FX1RZUEUoQnJhY2VMZWZ0KTsKKworICAg
IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpTdHJ1Y3RNZW1iZXI+PiBtZW1iZXJzOworICAgIHdoaWxl
IChjdXJyZW50KCkubV90eXBlICE9IFRva2VuVHlwZTo6QnJhY2VSaWdodCkgeworICAgICAgICBQ
QVJTRShtZW1iZXIsIFN0cnVjdE1lbWJlcik7CisgICAgICAgIG1lbWJlcnMuYXBwZW5kKG1ha2VV
bmlxdWVSZWY8QVNUOjpTdHJ1Y3RNZW1iZXI+KFdURk1vdmUobWVtYmVyKSkpOworICAgIH0KKwor
ICAgIENPTlNVTUVfVFlQRShCcmFjZVJpZ2h0KTsKKworICAgIFJFVFVSTl9OT0RFKFN0cnVjdERl
Y2wsIG5hbWUubV9pZGVudCwgV1RGTW92ZShtZW1iZXJzKSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNUOjpTdHJ1Y3RNZW1i
ZXIsIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVN0cnVjdE1lbWJlcigpCit7CisgICAgU1RB
UlRfUEFSU0UoKTsKKworICAgIFBBUlNFKGF0dHJpYnV0ZXMsIEF0dHJpYnV0ZXMpOworICAgIENP
TlNVTUVfVFlQRV9OQU1FRChuYW1lLCBJZGVudGlmaWVyKTsKKyAgICBDT05TVU1FX1RZUEUoQ29s
b24pOworICAgIFBBUlNFKHR5cGUsIFR5cGVEZWNsKTsKKyAgICBDT05TVU1FX1RZUEUoU2VtaWNv
bG9uKTsKKworICAgIFJFVFVSTl9OT0RFKFN0cnVjdE1lbWJlciwgbmFtZS5tX2lkZW50LCBXVEZN
b3ZlKHR5cGUpLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
TGV4ZXI+CitFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpUeXBlRGVjbD4sIEVycm9yPiBQYXJzZXI8
TGV4ZXI+OjpwYXJzZVR5cGVEZWNsKCkKK3sKKyAgICBTVEFSVF9QQVJTRSgpOworCisgICAgaWYg
KGN1cnJlbnQoKS5tX3R5cGUgPT0gVG9rZW5UeXBlOjpLZXl3b3JkSTMyKSB7CisgICAgICAgIGNv
bnN1bWUoKTsKKyAgICAgICAgUkVUVVJOX05PREVfUkVGKE5hbWVkVHlwZSwgU3RyaW5nVmlldyB7
ICJpMzIiIH0pOworICAgIH0KKyAgICBpZiAoY3VycmVudCgpLm1fdHlwZSA9PSBUb2tlblR5cGU6
OktleXdvcmRGMzIpIHsKKyAgICAgICAgY29uc3VtZSgpOworICAgICAgICBSRVRVUk5fTk9ERV9S
RUYoTmFtZWRUeXBlLCBTdHJpbmdWaWV3IHsgImYzMiIgfSk7CisgICAgfQorICAgIGlmIChjdXJy
ZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6S2V5d29yZFUzMikgeworICAgICAgICBjb25zdW1l
KCk7CisgICAgICAgIFJFVFVSTl9OT0RFX1JFRihOYW1lZFR5cGUsIFN0cmluZ1ZpZXcgeyAidTMy
IiB9KTsKKyAgICB9CisgICAgaWYgKGN1cnJlbnQoKS5tX3R5cGUgPT0gVG9rZW5UeXBlOjpLZXl3
b3JkQm9vbCkgeworICAgICAgICBjb25zdW1lKCk7CisgICAgICAgIFJFVFVSTl9OT0RFX1JFRihO
YW1lZFR5cGUsIFN0cmluZ1ZpZXcgeyAiYm9vbCIgfSk7CisgICAgfQorICAgIGlmIChjdXJyZW50
KCkubV90eXBlID09IFRva2VuVHlwZTo6SWRlbnRpZmllcikgeworICAgICAgICBDT05TVU1FX1RZ
UEVfTkFNRUQobmFtZSwgSWRlbnRpZmllcik7CisgICAgICAgIHJldHVybiBwYXJzZVR5cGVEZWNs
QWZ0ZXJJZGVudGlmaWVyKFdURk1vdmUobmFtZS5tX2lkZW50KSwgX3N0YXJ0T2ZFbGVtZW50UG9z
aXRpb24pOworICAgIH0KKworICAgIEZBSUwoIlRyaWVkIHBhcnNpbmcgYSB0eXBlIGFuZCBpdCBk
aWQgbm90IHN0YXJ0IHdpdGggYW4gaWRlbnRpZmllciIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWNsPiwgRXJyb3I+IFBhcnNl
cjxMZXhlcj46OnBhcnNlVHlwZURlY2xBZnRlcklkZW50aWZpZXIoU3RyaW5nVmlldyYmIG5hbWUs
IFNvdXJjZVBvc2l0aW9uIF9zdGFydE9mRWxlbWVudFBvc2l0aW9uKQoreworICAgIGlmIChhdXRv
IGtpbmQgPSBBU1Q6OlBhcmFtZXRlcml6ZWRUeXBlOjpzdHJpbmdWaWV3VG9LaW5kKG5hbWUpKSB7
CisgICAgICAgIENPTlNVTUVfVFlQRShMVCk7CisgICAgICAgIFBBUlNFKGVsZW1lbnRUeXBlLCBU
eXBlRGVjbCk7CisgICAgICAgIENPTlNVTUVfVFlQRShHVCk7CisgICAgICAgIFJFVFVSTl9OT0RF
X1JFRihQYXJhbWV0ZXJpemVkVHlwZSwgKmtpbmQsIFdURk1vdmUoZWxlbWVudFR5cGUpKTsKKyAg
ICB9CisgICAgUkVUVVJOX05PREVfUkVGKE5hbWVkVHlwZSwgV1RGTW92ZShuYW1lKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNUOjpHbG9iYWxWYXJpYWJsZURl
Y2wsIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZUdsb2JhbFZhcmlhYmxlRGVjbChBU1Q6OkF0
dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQoreworICAgIFNUQVJUX1BBUlNFKCk7CisKKyAgICBDT05T
VU1FX1RZUEUoS2V5d29yZFZhcik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpWYXJpYWJs
ZVF1YWxpZmllcj4gbWF5YmVRdWFsaWZpZXIgPSBudWxscHRyOworICAgIGlmIChjdXJyZW50KCku
bV90eXBlID09IFRva2VuVHlwZTo6TFQpIHsKKyAgICAgICAgUEFSU0UodmFyaWFibGVRdWFsaWZp
ZXIsIFZhcmlhYmxlUXVhbGlmaWVyKTsKKyAgICAgICAgbWF5YmVRdWFsaWZpZXIgPSBXVEY6Om1h
a2VVbmlxdWU8QVNUOjpWYXJpYWJsZVF1YWxpZmllcj4oV1RGTW92ZSh2YXJpYWJsZVF1YWxpZmll
cikpOworICAgIH0KKworICAgIENPTlNVTUVfVFlQRV9OQU1FRChuYW1lLCBJZGVudGlmaWVyKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVEZWNsPiBtYXliZVR5cGUgPSBudWxscHRy
OworICAgIGlmIChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6Q29sb24pIHsKKyAgICAg
ICAgY29uc3VtZSgpOworICAgICAgICBQQVJTRSh0eXBlRGVjbCwgVHlwZURlY2wpOworICAgICAg
ICBtYXliZVR5cGUgPSB0eXBlRGVjbC5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICB9CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiBtYXliZUluaXRpYWxpemVyID0gbnVsbHB0
cjsKKyAgICAvLyBGSVhNRTogaW5pdGlhbGl6ZXIKKworICAgIFJFVFVSTl9OT0RFKEdsb2JhbFZh
cmlhYmxlRGVjbCwgbmFtZS5tX2lkZW50LCBXVEZNb3ZlKG1heWJlUXVhbGlmaWVyKSwgV1RGTW92
ZShtYXliZVR5cGUpLCBXVEZNb3ZlKG1heWJlSW5pdGlhbGl6ZXIpLCBXVEZNb3ZlKGF0dHJpYnV0
ZXMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBlY3RlZDxBU1Q6OlZhcmlh
YmxlUXVhbGlmaWVyLCBFcnJvcj4gUGFyc2VyPExleGVyPjo6cGFyc2VWYXJpYWJsZVF1YWxpZmll
cigpCit7CisgICAgU1RBUlRfUEFSU0UoKTsKKworICAgIENPTlNVTUVfVFlQRShMVCk7CisgICAg
UEFSU0Uoc3RvcmFnZUNsYXNzLCBTdG9yYWdlQ2xhc3MpOworCisgICAgLy8gRklYTUU6IHZlcmlm
eSB0aGF0IFJlYWQgaXMgdGhlIGNvcnJlY3QgZGVmYXVsdCBpbiBhbGwgY2FzZXMuCisgICAgQVNU
OjpBY2Nlc3NNb2RlIGFjY2Vzc01vZGUgPSBBU1Q6OkFjY2Vzc01vZGU6OlJlYWQ7CisgICAgaWYg
KGN1cnJlbnQoKS5tX3R5cGUgPT0gVG9rZW5UeXBlOjpDb21tYSkgeworICAgICAgICBjb25zdW1l
KCk7CisgICAgICAgIFBBUlNFKGFjdHVhbEFjY2Vzc01vZGUsIEFjY2Vzc01vZGUpOworICAgICAg
ICBhY2Nlc3NNb2RlID0gYWN0dWFsQWNjZXNzTW9kZTsKKyAgICB9CisKKyAgICBDT05TVU1FX1RZ
UEUoR1QpOworCisgICAgUkVUVVJOX05PREUoVmFyaWFibGVRdWFsaWZpZXIsIHN0b3JhZ2VDbGFz
cywgYWNjZXNzTW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8
QVNUOjpTdG9yYWdlQ2xhc3MsIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVN0b3JhZ2VDbGFz
cygpCit7CisgICAgU1RBUlRfUEFSU0UoKTsKKworICAgIGlmIChjdXJyZW50KCkubV90eXBlID09
IFRva2VuVHlwZTo6S2V5d29yZEZ1bmN0aW9uKSB7CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICAg
ICAgcmV0dXJuIHsgQVNUOjpTdG9yYWdlQ2xhc3M6OkZ1bmN0aW9uIH07CisgICAgfQorICAgIGlm
IChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6S2V5d29yZFByaXZhdGUpIHsKKyAgICAg
ICAgY29uc3VtZSgpOworICAgICAgICByZXR1cm4geyBBU1Q6OlN0b3JhZ2VDbGFzczo6UHJpdmF0
ZSB9OworICAgIH0KKyAgICBpZiAoY3VycmVudCgpLm1fdHlwZSA9PSBUb2tlblR5cGU6OktleXdv
cmRXb3JrZ3JvdXApIHsKKyAgICAgICAgY29uc3VtZSgpOworICAgICAgICByZXR1cm4geyBBU1Q6
OlN0b3JhZ2VDbGFzczo6V29ya2dyb3VwIH07CisgICAgfQorICAgIGlmIChjdXJyZW50KCkubV90
eXBlID09IFRva2VuVHlwZTo6S2V5d29yZFVuaWZvcm0pIHsKKyAgICAgICAgY29uc3VtZSgpOwor
ICAgICAgICByZXR1cm4geyBBU1Q6OlN0b3JhZ2VDbGFzczo6VW5pZm9ybSB9OworICAgIH0KKyAg
ICBpZiAoY3VycmVudCgpLm1fdHlwZSA9PSBUb2tlblR5cGU6OktleXdvcmRTdG9yYWdlKSB7Cisg
ICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgcmV0dXJuIHsgQVNUOjpTdG9yYWdlQ2xhc3M6OlN0
b3JhZ2UgfTsKKyAgICB9CisKKyAgICBGQUlMKCJFeHBlY3RlZCBvbmUgb2YgJ2Z1bmN0aW9uJy8n
cHJpdmF0ZScvJ3N0b3JhZ2UnLyd1bmlmb3JtJy8nd29ya2dyb3VwJyIpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPEFTVDo6QWNjZXNzTW9kZSwgRXJyb3I+IFBhcnNl
cjxMZXhlcj46OnBhcnNlQWNjZXNzTW9kZSgpCit7CisgICAgU1RBUlRfUEFSU0UoKTsKKworICAg
IGlmIChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6S2V5d29yZFJlYWQpIHsKKyAgICAg
ICAgY29uc3VtZSgpOworICAgICAgICByZXR1cm4geyBBU1Q6OkFjY2Vzc01vZGU6OlJlYWQgfTsK
KyAgICB9CisgICAgaWYgKGN1cnJlbnQoKS5tX3R5cGUgPT0gVG9rZW5UeXBlOjpLZXl3b3JkV3Jp
dGUpIHsKKyAgICAgICAgY29uc3VtZSgpOworICAgICAgICByZXR1cm4geyBBU1Q6OkFjY2Vzc01v
ZGU6OldyaXRlIH07CisgICAgfQorICAgIGlmIChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlw
ZTo6S2V5d29yZFJlYWRXcml0ZSkgeworICAgICAgICBjb25zdW1lKCk7CisgICAgICAgIHJldHVy
biB7IEFTVDo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlIH07CisgICAgfQorCisgICAgRkFJTCgiRXhw
ZWN0ZWQgb25lIG9mICdyZWFkJy8nd3JpdGUnLydyZWFkX3dyaXRlJyIpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsLCBFcnJvcj4gUGFy
c2VyPExleGVyPjo6cGFyc2VGdW5jdGlvbkRlY2woQVNUOjpBdHRyaWJ1dGVzJiYgYXR0cmlidXRl
cykKK3sKKyAgICBTVEFSVF9QQVJTRSgpOworCisgICAgQ09OU1VNRV9UWVBFKEtleXdvcmRGbik7
CisgICAgQ09OU1VNRV9UWVBFX05BTUVEKG5hbWUsIElkZW50aWZpZXIpOworCisgICAgQ09OU1VN
RV9UWVBFKFBhcmVuTGVmdCk7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlBhcmFtZXRlcj4+
IHBhcmFtZXRlcnM7CisgICAgd2hpbGUgKGN1cnJlbnQoKS5tX3R5cGUgIT0gVG9rZW5UeXBlOjpQ
YXJlblJpZ2h0KSB7CisgICAgICAgIFBBUlNFKHBhcmFtZXRlciwgUGFyYW1ldGVyKTsKKyAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlBhcmFtZXRlcj4oV1RGTW92
ZShwYXJhbWV0ZXIpKSk7CisgICAgfQorICAgIENPTlNVTUVfVFlQRShQYXJlblJpZ2h0KTsKKwor
ICAgIEFTVDo6QXR0cmlidXRlcyByZXR1cm5BdHRyaWJ1dGVzOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGVEZWNsPiBtYXliZVJldHVyblR5cGUgPSBudWxscHRyOworICAgIGlmIChjdXJy
ZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6QXJyb3cpIHsKKyAgICAgICAgY29uc3VtZSgpOwor
ICAgICAgICBQQVJTRShwYXJzZWRSZXR1cm5BdHRyaWJ1dGVzLCBBdHRyaWJ1dGVzKTsKKyAgICAg
ICAgcmV0dXJuQXR0cmlidXRlcyA9IFdURk1vdmUocGFyc2VkUmV0dXJuQXR0cmlidXRlcyk7Cisg
ICAgICAgIFBBUlNFKHR5cGUsIFR5cGVEZWNsKTsKKyAgICAgICAgbWF5YmVSZXR1cm5UeXBlID0g
dHlwZS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICB9CisKKyAgICBQQVJTRShib2R5LCBDb21wb3Vu
ZFN0YXRlbWVudCk7CisKKyAgICBSRVRVUk5fTk9ERShGdW5jdGlvbkRlY2wsIG5hbWUubV9pZGVu
dCwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShtYXliZVJldHVyblR5cGUpLCBXVEZNb3Zl
KGJvZHkpLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpLCBXVEZNb3ZlKHJldHVybkF0dHJpYnV0ZXMpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwg
RXJyb3I+IFBhcnNlcjxMZXhlcj46OnBhcnNlUGFyYW1ldGVyKCkKK3sKKyAgICBTVEFSVF9QQVJT
RSgpOworCisgICAgUEFSU0UoYXR0cmlidXRlcywgQXR0cmlidXRlcyk7CisgICAgQ09OU1VNRV9U
WVBFX05BTUVEKG5hbWUsIElkZW50aWZpZXIpCisgICAgQ09OU1VNRV9UWVBFKENvbG9uKTsKKyAg
ICBQQVJTRSh0eXBlLCBUeXBlRGVjbCk7CisKKyAgICBSRVRVUk5fTk9ERShQYXJhbWV0ZXIsIG5h
bWUubV9pZGVudCwgV1RGTW92ZSh0eXBlKSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50
PiwgRXJyb3I+IFBhcnNlcjxMZXhlcj46OnBhcnNlU3RhdGVtZW50KCkKK3sKKyAgICBTVEFSVF9Q
QVJTRSgpOworCisgICAgc3dpdGNoIChjdXJyZW50KCkubV90eXBlKSB7CisgICAgY2FzZSBUb2tl
blR5cGU6OkJyYWNlTGVmdDogeworICAgICAgICBQQVJTRShjb21wb3VuZFN0bXQsIENvbXBvdW5k
U3RhdGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkNvbXBvdW5k
U3RhdGVtZW50PihXVEZNb3ZlKGNvbXBvdW5kU3RtdCkpIH07CisgICAgfQorICAgIGNhc2UgVG9r
ZW5UeXBlOjpTZW1pY29sb246IHsKKyAgICAgICAgY29uc3VtZSgpOworICAgICAgICBWZWN0b3I8
VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50Pj4gc3RhdGVtZW50czsKKyAgICAgICAgcmV0dXJuIHsg
bWFrZVVuaXF1ZVJlZjxBU1Q6OkNvbXBvdW5kU3RhdGVtZW50PihDVVJSRU5UX1NPVVJDRV9TUEFO
KCksIFdURk1vdmUoc3RhdGVtZW50cykpIH07CisgICAgfQorICAgIGNhc2UgVG9rZW5UeXBlOjpL
ZXl3b3JkUmV0dXJuOiB7CisgICAgICAgIFBBUlNFKHJldHVyblN0bXQsIFJldHVyblN0YXRlbWVu
dCk7CisgICAgICAgIENPTlNVTUVfVFlQRShTZW1pY29sb24pOworICAgICAgICByZXR1cm4geyBt
YWtlVW5pcXVlUmVmPEFTVDo6UmV0dXJuU3RhdGVtZW50PihXVEZNb3ZlKHJldHVyblN0bXQpKSB9
OworICAgIH0KKyAgICBjYXNlIFRva2VuVHlwZTo6SWRlbnRpZmllcjogeworICAgICAgICAvLyBG
SVhNRTogdGhlcmUgd2lsbCBiZSBvdGhlciBjYXNlcyBoZXJlIGV2ZW50dWFsbHkgZm9yIGZ1bmN0
aW9uIGNhbGxzCisgICAgICAgIFBBUlNFKGxocywgTEhTRXhwcmVzc2lvbik7CisgICAgICAgIENP
TlNVTUVfVFlQRShFcXVhbCk7CisgICAgICAgIFBBUlNFKHJocywgRXhwcmVzc2lvbik7CisgICAg
ICAgIENPTlNVTUVfVFlQRShTZW1pY29sb24pOworICAgICAgICBSRVRVUk5fTk9ERV9SRUYoQXNz
aWdubWVudFN0YXRlbWVudCwgbGhzLm1vdmVUb1VuaXF1ZVB0cigpLCBXVEZNb3ZlKHJocykpOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBGQUlMKCJOb3QgYSB2YWxpZCBzdGF0ZW1lbnQi
KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNUOjpD
b21wb3VuZFN0YXRlbWVudCwgRXJyb3I+IFBhcnNlcjxMZXhlcj46OnBhcnNlQ29tcG91bmRTdGF0
ZW1lbnQoKQoreworICAgIFNUQVJUX1BBUlNFKCk7CisKKyAgICBDT05TVU1FX1RZUEUoQnJhY2VM
ZWZ0KTsKKworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+PiBzdGF0ZW1lbnRz
OworICAgIHdoaWxlIChjdXJyZW50KCkubV90eXBlICE9IFRva2VuVHlwZTo6QnJhY2VSaWdodCkg
eworICAgICAgICBQQVJTRShzdG10LCBTdGF0ZW1lbnQpOworICAgICAgICBzdGF0ZW1lbnRzLmFw
cGVuZChXVEZNb3ZlKHN0bXQpKTsKKyAgICB9CisKKyAgICBDT05TVU1FX1RZUEUoQnJhY2VSaWdo
dCk7CisKKyAgICBSRVRVUk5fTk9ERShDb21wb3VuZFN0YXRlbWVudCwgV1RGTW92ZShzdGF0ZW1l
bnRzKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8QVNUOjpSZXR1
cm5TdGF0ZW1lbnQsIEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVJldHVyblN0YXRlbWVudCgp
Cit7CisgICAgU1RBUlRfUEFSU0UoKTsKKworICAgIENPTlNVTUVfVFlQRShLZXl3b3JkUmV0dXJu
KTsKKworICAgIGlmIChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6U2VtaWNvbG9uKSB7
CisgICAgICAgIFJFVFVSTl9OT0RFKFJldHVyblN0YXRlbWVudCwgeyB9KTsKKyAgICB9CisKKyAg
ICBQQVJTRShleHByLCBTaG9ydENpcmN1aXRPckV4cHJlc3Npb24pOworICAgIFJFVFVSTl9OT0RF
KFJldHVyblN0YXRlbWVudCwgZXhwci5tb3ZlVG9VbmlxdWVQdHIoKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVy
cm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVNob3J0Q2lyY3VpdE9yRXhwcmVzc2lvbigpCit7Cisg
ICAgLy8gRklYTUU6IGZpbGwgaW4KKyAgICByZXR1cm4gcGFyc2VSZWxhdGlvbmFsRXhwcmVzc2lv
bigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gUGFyc2VyPExleGVyPjo6cGFyc2VSZWxhdGlvbmFsRXhw
cmVzc2lvbigpCit7CisgICAgLy8gRklYTUU6IGZpbGwgaW4KKyAgICByZXR1cm4gcGFyc2VTaGlm
dEV4cHJlc3Npb24oKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBlY3RlZDxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IFBhcnNlcjxMZXhlcj46OnBhcnNlU2hp
ZnRFeHByZXNzaW9uKCkKK3sKKyAgICAvLyBGSVhNRTogZmlsbCBpbgorICAgIHJldHVybiBwYXJz
ZUFkZGl0aXZlRXhwcmVzc2lvbigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4
cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gUGFyc2VyPExleGVyPjo6
cGFyc2VBZGRpdGl2ZUV4cHJlc3Npb24oKQoreworICAgIC8vIEZJWE1FOiBmaWxsIGluCisgICAg
cmV0dXJuIHBhcnNlTXVsdGlwbGljYXRpdmVFeHByZXNzaW9uKCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9y
PiBQYXJzZXI8TGV4ZXI+OjpwYXJzZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbigpCit7CisgICAg
Ly8gRklYTUU6IGZpbGwgaW4KKyAgICByZXR1cm4gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgTGV4ZXI+CitFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiwgRXJyb3I+IFBhcnNlcjxMZXhlcj46OnBhcnNlVW5hcnlFeHByZXNzaW9uKCkKK3sK
KyAgICAvLyBGSVhNRTogZmlsbCBpbgorICAgIHJldHVybiBwYXJzZVNpbmd1bGFyRXhwcmVzc2lv
bigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gUGFyc2VyPExleGVyPjo6cGFyc2VTaW5ndWxhckV4cHJl
c3Npb24oKQoreworICAgIFNUQVJUX1BBUlNFKCk7CisgICAgUEFSU0UoYmFzZSwgUHJpbWFyeUV4
cHJlc3Npb24pOworICAgIHJldHVybiBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKFdURk1vdmUoYmFz
ZSksIF9zdGFydE9mRWxlbWVudFBvc2l0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4
ZXI+CitFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IFBhcnNlcjxM
ZXhlcj46OnBhcnNlUG9zdGZpeEV4cHJlc3Npb24oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4m
JiBiYXNlLCBTb3VyY2VQb3NpdGlvbiBzdGFydFBvc2l0aW9uKQoreworICAgIFNUQVJUX1BBUlNF
KCk7CisKKyAgICBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiBleHByID0gV1RGTW92ZShiYXNl
KTsKKyAgICAvLyBGSVhNRTogYWRkIHRoZSBjYXNlIGZvciBhcnJheS92ZWN0b3IvbWF0cml4IGFj
Y2VzcworICAgIHdoaWxlIChjdXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6UGVyaW9kKSB7
CisgICAgICAgIGNvbnN1bWUoKTsKKyAgICAgICAgQ09OU1VNRV9UWVBFX05BTUVEKGZpZWxkTmFt
ZSwgSWRlbnRpZmllcik7CisgICAgICAgIFNvdXJjZVNwYW4gc3BhbihzdGFydFBvc2l0aW9uLCBt
X2xleGVyLmN1cnJlbnRQb3NpdGlvbigpKTsKKyAgICAgICAgZXhwciA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpTdHJ1Y3R1cmVBY2Nlc3M+KHNwYW4sIFdURk1vdmUoZXhwciksIGZpZWxkTmFtZS5tX2lk
ZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4geyBXVEZNb3ZlKGV4cHIpIH07Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIExleGVyPgorRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4s
IEVycm9yPiBQYXJzZXI8TGV4ZXI+OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKCkKK3sKKyAgICBT
VEFSVF9QQVJTRSgpOworCisgICAgc3dpdGNoIChjdXJyZW50KCkubV90eXBlKSB7CisgICAgY2Fz
ZSBUb2tlblR5cGU6OlBhcmVuTGVmdDogeworICAgICAgICBjb25zdW1lKCk7CisgICAgICAgIFBB
UlNFKGV4cHIsIEV4cHJlc3Npb24pOworICAgICAgICBDT05TVU1FX1RZUEUoUGFyZW5SaWdodCk7
CisgICAgICAgIHJldHVybiB7IFdURk1vdmUoZXhwcikgfTsKKyAgICB9CisgICAgY2FzZSBUb2tl
blR5cGU6OklkZW50aWZpZXI6IHsKKyAgICAgICAgQ09OU1VNRV9UWVBFX05BTUVEKGlkZW50LCBJ
ZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGlkZW50Lm1faWRlbnQgPT0gInRydWUiKSB7CisgICAg
ICAgICAgICBSRVRVUk5fTk9ERV9SRUYoQm9vbExpdGVyYWwsIHRydWUpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChpZGVudC5tX2lkZW50ID09ICJmYWxzZSIpIHsKKyAgICAgICAgICAgIFJFVFVS
Tl9OT0RFX1JFRihCb29sTGl0ZXJhbCwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGlmIChj
dXJyZW50KCkubV90eXBlID09IFRva2VuVHlwZTo6TFQgfHwgY3VycmVudCgpLm1fdHlwZSA9PSBU
b2tlblR5cGU6OlBhcmVuTGVmdCkgeworICAgICAgICAgICAgUEFSU0UodHlwZSwgVHlwZURlY2xB
ZnRlcklkZW50aWZpZXIsIFdURk1vdmUoaWRlbnQubV9pZGVudCksIF9zdGFydE9mRWxlbWVudFBv
c2l0aW9uKTsKKyAgICAgICAgICAgIFBBUlNFKGFyZ3VtZW50cywgQXJndW1lbnRFeHByZXNzaW9u
TGlzdCk7CisgICAgICAgICAgICBSRVRVUk5fTk9ERV9SRUYoVHlwZUNvbnZlcnNpb24sIFdURk1v
dmUodHlwZSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgIH0KKyAgICAgICAgUkVUVVJO
X05PREVfUkVGKElkZW50aWZpZXJFeHByZXNzaW9uLCBpZGVudC5tX2lkZW50KTsKKyAgICB9Cisg
ICAgY2FzZSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsU2lnbmVkOiB7CisgICAgICAgIENPTlNV
TUVfVFlQRV9OQU1FRChsaXQsIEludGVnZXJMaXRlcmFsU2lnbmVkKTsKKyAgICAgICAgUkVUVVJO
X05PREVfUkVGKEludDMyTGl0ZXJhbCwgbGl0Lm1fbGl0ZXJhbFZhbHVlKTsKKyAgICB9CisgICAg
Y2FzZSBUb2tlblR5cGU6OkludGVnZXJMaXRlcmFsVW5zaWduZWQ6IHsKKyAgICAgICAgQ09OU1VN
RV9UWVBFX05BTUVEKGxpdCwgSW50ZWdlckxpdGVyYWxVbnNpZ25lZCk7CisgICAgICAgIFJFVFVS
Tl9OT0RFX1JFRihVaW50MzJMaXRlcmFsLCBsaXQubV9saXRlcmFsVmFsdWUpOworICAgIH0KKyAg
ICBjYXNlIFRva2VuVHlwZTo6RGVjaW1hbEZsb2F0TGl0ZXJhbDogeworICAgICAgICBDT05TVU1F
X1RZUEVfTkFNRUQobGl0LCBEZWNpbWFsRmxvYXRMaXRlcmFsKTsKKyAgICAgICAgUkVUVVJOX05P
REVfUkVGKEZsb2F0MzJMaXRlcmFsLCBsaXQubV9saXRlcmFsVmFsdWUpOworICAgIH0KKyAgICAv
LyBGSVhNRTogSGV4RmxvYXRMaXRlcmFsIGFuZCBJbnRlZ2VyTGl0ZXJhbAorICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBGQUlMKCJFeHBlY3RlZCBvbmUgb2YgJygnLCBh
IGxpdGVyYWwsIG9yIGFuIGlkZW50aWZpZXIiKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4
ZXI+CitFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IFBhcnNlcjxM
ZXhlcj46OnBhcnNlRXhwcmVzc2lvbigpCit7CisgICAgLy8gRklYTUU6IEZpbGwgaW4KKyAgICBy
ZXR1cm4gcGFyc2VSZWxhdGlvbmFsRXhwcmVzc2lvbigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gUGFy
c2VyPExleGVyPjo6cGFyc2VMSFNFeHByZXNzaW9uKCkKK3sKKyAgICBTVEFSVF9QQVJTRSgpOwor
CisgICAgLy8gRklYTUU6IEFkZCB0aGUgcG9zc2liaWxpdHkgb2YgYSBwcmVmaXgKKyAgICBQQVJT
RShiYXNlLCBDb3JlTEhTRXhwcmVzc2lvbik7CisgICAgcmV0dXJuIHBhcnNlUG9zdGZpeEV4cHJl
c3Npb24oV1RGTW92ZShiYXNlKSwgX3N0YXJ0T2ZFbGVtZW50UG9zaXRpb24pOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBMZXhlcj4KK0V4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
LCBFcnJvcj4gUGFyc2VyPExleGVyPjo6cGFyc2VDb3JlTEhTRXhwcmVzc2lvbigpCit7CisgICAg
U1RBUlRfUEFSU0UoKTsKKworICAgIHN3aXRjaCAoY3VycmVudCgpLm1fdHlwZSkgeworICAgIGNh
c2UgVG9rZW5UeXBlOjpQYXJlbkxlZnQ6IHsKKyAgICAgICAgY29uc3VtZSgpOworICAgICAgICBQ
QVJTRShleHByLCBMSFNFeHByZXNzaW9uKTsKKyAgICAgICAgQ09OU1VNRV9UWVBFKFBhcmVuUmln
aHQpOworICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGV4cHIpIH07CisgICAgfQorICAgIGNhc2Ug
VG9rZW5UeXBlOjpJZGVudGlmaWVyOiB7CisgICAgICAgIENPTlNVTUVfVFlQRV9OQU1FRChpZGVu
dCwgSWRlbnRpZmllcik7CisgICAgICAgIFJFVFVSTl9OT0RFX1JFRihJZGVudGlmaWVyRXhwcmVz
c2lvbiwgaWRlbnQubV9pZGVudCk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIEZBSUwoIlRyaWVkIHRvIHBhcnNlIHRoZSBsZWZ0LWhhbmQgc2lkZSBv
ZiBhbiBhc3NpZ25tZW50IGFuZCBmYWlsZWQiKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGV4
ZXI+CitFeHBlY3RlZDxWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+LCBFcnJvcj4g
UGFyc2VyPExleGVyPjo6cGFyc2VBcmd1bWVudEV4cHJlc3Npb25MaXN0KCkKK3sKKyAgICBTVEFS
VF9QQVJTRSgpOworICAgIENPTlNVTUVfVFlQRShQYXJlbkxlZnQpOworCisgICAgVmVjdG9yPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CisgICAgd2hpbGUgKGN1cnJlbnQo
KS5tX3R5cGUgIT0gVG9rZW5UeXBlOjpQYXJlblJpZ2h0KSB7CisgICAgICAgIFBBUlNFKGV4cHIs
IEV4cHJlc3Npb24pOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoZXhwcikpOwor
ICAgICAgICBpZiAoY3VycmVudCgpLm1fdHlwZSAhPSBUb2tlblR5cGU6OlBhcmVuUmlnaHQpIHsK
KyAgICAgICAgICAgIENPTlNVTUVfVFlQRShDb21tYSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBDT05TVU1FX1RZUEUoUGFyZW5SaWdodCk7CisgICAgcmV0dXJuIHsgV1RGTW92ZShhcmd1bWVu
dHMpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdHU0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJH
UFUvV0dTTC9QYXJzZXIuaCBiL1NvdXJjZS9XZWJHUFUvV0dTTC9QYXJzZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI1YjlkZWFhMjY5YgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9QYXJzZXIuaApAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBU1QvU2hhZGVyTW9kdWxlLmgiCisj
aW5jbHVkZSAiQ29tcGlsYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiTGV4ZXIuaCIKKyNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIFdHU0wgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBMZXhlcj4KK0V4cGVjdGVkPEFTVDo6U2hhZGVyTW9kdWxlLCBFcnJvcj4gcGFyc2UoY29u
c3QgU3RyaW5nJiB3Z3NsKTsKKworRXhwZWN0ZWQ8QVNUOjpTaGFkZXJNb2R1bGUsIEVycm9yPiBw
YXJzZUxDaGFyKGNvbnN0IFN0cmluZyYgd2dzbCk7CitFeHBlY3RlZDxBU1Q6OlNoYWRlck1vZHVs
ZSwgRXJyb3I+IHBhcnNlVUNoYXIoY29uc3QgU3RyaW5nJiB3Z3NsKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV0dTTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XR1NML1dHU0wuY3BwIGIvU291cmNl
L1dlYkdQVS9XR1NML1dHU0wuY3BwCmluZGV4IGUzYThlMmJmYjY4Ny4uNmU3ODQxMGY3OTlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5jcHAKKysrIGIvU291cmNlL1dlYkdQ
VS9XR1NML1dHU0wuY3BwCkBAIC0yNiwzMSArMjYsMzIgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXR1NMLmgiCiAKLSNpbmNsdWRlICJMZXhlci5oIgotLy8gQWxsIG9mIHRoZXNl
IGFyZSBqdXN0IHRvIGNoZWNrIHRoYXQgdGhleSBjb21waWxlLCBzaW5jZSBmb3Igbm93IHRoZXkg
YXJlIG5vdCByZWFsbHkgdXNlZC4KLSNpbmNsdWRlICJBU1QvR2xvYmFsVmFyaWFibGVEZWNsLmgi
Ci0jaW5jbHVkZSAiQVNUL1N0cnVjdHVyZURlY2wuaCIKLSNpbmNsdWRlICJBU1QvRnVuY3Rpb25E
ZWNsLmgiCi0jaW5jbHVkZSAiQVNUL1NoYWRlck1vZHVsZS5oIgotI2luY2x1ZGUgIkFTVC9TdGF0
ZW1lbnRzL0Fzc2lnbm1lbnRTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJBU1QvU3RhdGVtZW50cy9S
ZXR1cm5TdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJBU1QvRXhwcmVzc2lvbnMvSWRlbnRpZmllckV4
cHJlc3Npb24uaCIKLSNpbmNsdWRlICJBU1QvRXhwcmVzc2lvbnMvVHlwZUNvbnZlcnNpb24uaCIK
LSNpbmNsdWRlICJBU1QvRXhwcmVzc2lvbnMvU3RydWN0dXJlQWNjZXNzLmgiCi0jaW5jbHVkZSAi
QVNUL0V4cHJlc3Npb25zL0xpdGVyYWxFeHByZXNzaW9ucy5oIgorI2luY2x1ZGUgIlBhcnNlci5o
IgogCiBuYW1lc3BhY2UgV0dTTCB7CiAKLXN0ZDo6dmFyaWFudDxTdWNjZXNzZnVsQ2hlY2ssIEZh
aWxlZENoZWNrPiBzdGF0aWNDaGVjayhjb25zdCBTdHJpbmcmIHN0ciwgY29uc3Qgc3RkOjpvcHRp
b25hbDxTb3VyY2VNYXA+JikKK3N0ZDo6dmFyaWFudDxTdWNjZXNzZnVsQ2hlY2ssIEZhaWxlZENo
ZWNrPiBzdGF0aWNDaGVjayhjb25zdCBTdHJpbmcmIHdnc2wsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
U291cmNlTWFwPiYpCiB7Ci0gICAgLy8gTWFraW5nIHN1cmUgdGhhdCB0aGUgbGV4ZXIgYnVpbGRz
IGNvcnJlY3RseSwgd2lsbCBiZSByZW1vdmVkIGluIGxhdGVyIHBhdGNoZXMKLSAgICBMZXhlcjxM
Q2hhcj4gbGV4ZXIoc3RyKTsKLSAgICBsZXhlci5sZXgoKTsKLSAgICByZXR1cm4gRmFpbGVkQ2hl
Y2sgeyB7IH0sIHsgfSB9OworICAgIEV4cGVjdGVkPEFTVDo6U2hhZGVyTW9kdWxlLCBFcnJvcj4g
cGFyc2VyUmVzdWx0ID0gd2dzbC5pczhCaXQoKSA/IHBhcnNlTENoYXIod2dzbCkgOiBwYXJzZVVD
aGFyKHdnc2wpOworICAgIGlmICghcGFyc2VyUmVzdWx0Lmhhc192YWx1ZSgpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcmV0dXJuaW5nIG11bHRpcGxlIGVycm9ycyBmcm9t
IHRoZSBwYXJzZXIuCisgICAgICAgIHJldHVybiBGYWlsZWRDaGVjayB7IHsgcGFyc2VyUmVzdWx0
LmVycm9yKCkgfSwgeyAvKiB3YXJuaW5ncyAqLyB9IH07CisgICAgfQorICAgIFVuaXF1ZVJlZjxB
U1Q6OlNoYWRlck1vZHVsZT4gc2hhZGVyID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlNoYWRlck1vZHVs
ZT4oV1RGTW92ZShwYXJzZXJSZXN1bHQudmFsdWUoKSkpOworCisgICAgVmVjdG9yPFdhcm5pbmc+
IHdhcm5pbmdzIHsgfTsKKyAgICAvLyBGSVhNRTogYWRkIHZhbGlkYXRpb24KKyAgICByZXR1cm4g
c3RkOjp2YXJpYW50PFN1Y2Nlc3NmdWxDaGVjaywgRmFpbGVkQ2hlY2s+KHN0ZDo6aW5fcGxhY2Vf
dHlwZTxTdWNjZXNzZnVsQ2hlY2s+LCBXVEZNb3ZlKHdhcm5pbmdzKSwgV1RGTW92ZShzaGFkZXIp
KTsKIH0KIAogU3VjY2Vzc2Z1bENoZWNrOjpTdWNjZXNzZnVsQ2hlY2soU3VjY2Vzc2Z1bENoZWNr
JiYpID0gZGVmYXVsdDsKIAorU3VjY2Vzc2Z1bENoZWNrOjpTdWNjZXNzZnVsQ2hlY2soVmVjdG9y
PFdhcm5pbmc+JiYgbWVzc2FnZXMsIFVuaXF1ZVJlZjxBU1Q6OlNoYWRlck1vZHVsZT4mJiBzaGFk
ZXIpCisgICAgOiB3YXJuaW5ncyhXVEZNb3ZlKG1lc3NhZ2VzKSkKKyAgICAsIGFzdChXVEZNb3Zl
KHNoYWRlcikpCit7Cit9CisKIFN1Y2Nlc3NmdWxDaGVjazo6flN1Y2Nlc3NmdWxDaGVjaygpID0g
ZGVmYXVsdDsKIAogUHJlcGFyZVJlc3VsdCBwcmVwYXJlKGNvbnN0IEFTVDo6U2hhZGVyTW9kdWxl
JiBhc3QsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBQaXBlbGluZUxheW91dD4mIHBpcGVsaW5lTGF5
b3V0cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV0dTTC9XR1NMLmggYi9Tb3VyY2UvV2Vi
R1BVL1dHU0wvV0dTTC5oCmluZGV4IGVhZWRhODRjZmIzMi4uMmMyNmYxMGIzZmJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViR1BVL1dHU0wvV0dTTC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV0dTTC9X
R1NMLmgKQEAgLTQ5LDE0ICs0OSwxNSBAQCBjbGFzcyBTaGFkZXJNb2R1bGU7CiBzdHJ1Y3QgU3Vj
Y2Vzc2Z1bENoZWNrIHsKICAgICBTdWNjZXNzZnVsQ2hlY2soKSA9IGRlbGV0ZTsKICAgICBTdWNj
ZXNzZnVsQ2hlY2soU3VjY2Vzc2Z1bENoZWNrJiYpOworICAgIFN1Y2Nlc3NmdWxDaGVjayhWZWN0
b3I8V2FybmluZz4mJiwgVW5pcXVlUmVmPEFTVDo6U2hhZGVyTW9kdWxlPiYmKTsKICAgICB+U3Vj
Y2Vzc2Z1bENoZWNrKCk7Ci0gICAgVmVjdG9yPENvbXBpbGF0aW9uTWVzc2FnZT4gd2FybmluZ3M7
CisgICAgVmVjdG9yPFdhcm5pbmc+IHdhcm5pbmdzOwogICAgIFVuaXF1ZVJlZjxBU1Q6OlNoYWRl
ck1vZHVsZT4gYXN0OwogfTsKIAogc3RydWN0IEZhaWxlZENoZWNrIHsKLSAgICBWZWN0b3I8Q29t
cGlsYXRpb25NZXNzYWdlPiBlcnJvcnM7Ci0gICAgVmVjdG9yPENvbXBpbGF0aW9uTWVzc2FnZT4g
d2FybmluZ3M7CisgICAgVmVjdG9yPEVycm9yPiBlcnJvcnM7CisgICAgVmVjdG9yPFdhcm5pbmc+
IHdhcm5pbmdzOwogfTsKIAogc3RydWN0IFNvdXJjZU1hcCB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViR1BVL1dHU0xVbml0VGVzdHMvV0dTTFBhcnNlclRlc3RzLm1tIGIvU291cmNlL1dlYkdQVS9X
R1NMVW5pdFRlc3RzL1dHU0xQYXJzZXJUZXN0cy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmYwYjk5ZWUwYWU1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJHUFUvV0dTTFVuaXRUZXN0cy9XR1NMUGFyc2VyVGVzdHMubW0KQEAgLTAsMCArMSwyMDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKworI2ltcG9ydCAiQXNzaWdubWVudFN0YXRlbWVudC5oIgorI2ltcG9ydCAiSWRl
bnRpZmllckV4cHJlc3Npb24uaCIKKyNpbXBvcnQgIkxleGVyLmgiCisjaW1wb3J0ICJMaXRlcmFs
RXhwcmVzc2lvbnMuaCIKKyNpbXBvcnQgIlBhcnNlci5oIgorI2ltcG9ydCAiUmV0dXJuU3RhdGVt
ZW50LmgiCisjaW1wb3J0ICJTdHJ1Y3R1cmVBY2Nlc3MuaCIKKyNpbXBvcnQgIlR5cGVDb252ZXJz
aW9uLmgiCisjaW1wb3J0ICJXR1NMLmgiCisjaW1wb3J0IDx3dGYvRGF0YUxvZy5oPgorI2ltcG9y
dCA8WENUZXN0L1hDVGVzdC5oPgorCitAaW50ZXJmYWNlIFdHU0xQYXJzZXJUZXN0cyA6IFhDVGVz
dENhc2UKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0dTTFBhcnNlclRlc3RzCisKKy0gKHZv
aWQpdGVzdFBhcnNpbmdTdHJ1Y3QgeworICAgIGF1dG8gc2hhZGVyID0gV0dTTDo6cGFyc2VMQ2hh
cigic3RydWN0IEIge1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBhOiBpMzI7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICAifSIpOworICAgIGlmICghc2hhZGVyLmhhc192YWx1
ZSgpKQorICAgICAgICBkYXRhTG9nTG4oc2hhZGVyLmVycm9yKCkpOworICAgIFhDVEFzc2VydChz
aGFkZXIuaGFzX3ZhbHVlKCkpOworICAgIFhDVEFzc2VydCghc2hhZGVyLT5kaXJlY3RpdmVzKCku
c2l6ZSgpKTsKKyAgICBYQ1RBc3NlcnQoc2hhZGVyLT5zdHJ1Y3RzKCkuc2l6ZSgpID09IDEpOwor
ICAgIFhDVEFzc2VydChzaGFkZXItPmdsb2JhbFZhcnMoKS5zaXplKCkgPT0gMCk7CisgICAgWENU
QXNzZXJ0KHNoYWRlci0+ZnVuY3Rpb25zKCkuc2l6ZSgpID09IDApOworICAgIFdHU0w6OkFTVDo6
U3RydWN0RGVjbCYgc3RyID0gc2hhZGVyLT5zdHJ1Y3RzKClbMF07CisgICAgWENUQXNzZXJ0KHN0
ci5uYW1lKCkgPT0gIkIiKTsKKyAgICBYQ1RBc3NlcnQoc3RyLmF0dHJpYnV0ZXMoKS5pc0VtcHR5
KCkpOworICAgIFhDVEFzc2VydChzdHIubWVtYmVycygpLnNpemUoKSA9PSAxKTsKKyAgICBYQ1RB
c3NlcnQoc3RyLm1lbWJlcnMoKVswXS0+YXR0cmlidXRlcygpLmlzRW1wdHkoKSk7CisgICAgWENU
QXNzZXJ0KHN0ci5tZW1iZXJzKClbMF0tPm5hbWUoKSA9PSAiYSIpOworICAgIFhDVEFzc2VydChz
dHIubWVtYmVycygpWzBdLT50eXBlKCkuaXNOYW1lZCgpKTsKKyAgICBXR1NMOjpBU1Q6Ok5hbWVk
VHlwZSYgbWVtYmVyVHlwZSA9IGRvd25jYXN0PFdHU0w6OkFTVDo6TmFtZWRUeXBlPihzdHIubWVt
YmVycygpWzBdLT50eXBlKCkpOworICAgIFhDVEFzc2VydChtZW1iZXJUeXBlLm5hbWUoKSA9PSAi
aTMyIik7Cit9CisKKy0gKHZvaWQpdGVzdFBhcnNpbmdHbG9iYWxWYXJpYWJsZSB7CisgICAgYXV0
byBzaGFkZXIgPSBXR1NMOjpwYXJzZUxDaGFyKCJAZ3JvdXAoMCkgQGJpbmRpbmcoMClcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhcjxzdG9yYWdlLCByZWFkX3dyaXRl
PiB4OiBCO1xuIik7CisgICAgaWYgKCFzaGFkZXIuaGFzX3ZhbHVlKCkpCisgICAgICAgIGRhdGFM
b2dMbihzaGFkZXIuZXJyb3IoKSk7CisgICAgWENUQXNzZXJ0KHNoYWRlci5oYXNfdmFsdWUoKSk7
CisgICAgWENUQXNzZXJ0KCFzaGFkZXItPmRpcmVjdGl2ZXMoKS5zaXplKCkpOworICAgIFhDVEFz
c2VydChzaGFkZXItPnN0cnVjdHMoKS5zaXplKCkgPT0gMCk7CisgICAgWENUQXNzZXJ0KHNoYWRl
ci0+Z2xvYmFsVmFycygpLnNpemUoKSA9PSAxKTsKKyAgICBYQ1RBc3NlcnQoc2hhZGVyLT5mdW5j
dGlvbnMoKS5zaXplKCkgPT0gMCk7CisgICAgV0dTTDo6QVNUOjpHbG9iYWxWYXJpYWJsZURlY2wm
IHZhciA9IHNoYWRlci0+Z2xvYmFsVmFycygpWzBdOworICAgIFhDVEFzc2VydCh2YXIuYXR0cmli
dXRlcygpLnNpemUoKSA9PSAyKTsKKyAgICBYQ1RBc3NlcnQodmFyLmF0dHJpYnV0ZXMoKVswXS0+
aXNHcm91cCgpKTsKKyAgICBYQ1RBc3NlcnQoZG93bmNhc3Q8V0dTTDo6QVNUOjpHcm91cEF0dHJp
YnV0ZT4odmFyLmF0dHJpYnV0ZXMoKVswXS5nZXQoKSkuZ3JvdXAoKSA9PSAwKTsKKyAgICBYQ1RB
c3NlcnQodmFyLmF0dHJpYnV0ZXMoKVsxXS0+aXNCaW5kaW5nKCkpOworICAgIFhDVEFzc2VydChk
b3duY2FzdDxXR1NMOjpBU1Q6OkJpbmRpbmdBdHRyaWJ1dGU+KHZhci5hdHRyaWJ1dGVzKClbMV0u
Z2V0KCkpLmJpbmRpbmcoKSA9PSAwKTsKKyAgICBYQ1RBc3NlcnQodmFyLm5hbWUoKSA9PSAieCIp
OworICAgIFhDVEFzc2VydCh2YXIubWF5YmVRdWFsaWZpZXIoKSk7CisgICAgWENUQXNzZXJ0KHZh
ci5tYXliZVF1YWxpZmllcigpLT5zdG9yYWdlQ2xhc3MoKSA9PSBXR1NMOjpBU1Q6OlN0b3JhZ2VD
bGFzczo6U3RvcmFnZSk7CisgICAgWENUQXNzZXJ0KHZhci5tYXliZVF1YWxpZmllcigpLT5hY2Nl
c3NNb2RlKCkgPT0gV0dTTDo6QVNUOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIFhDVEFz
c2VydCh2YXIubWF5YmVUeXBlRGVjbCgpKTsKKyAgICBYQ1RBc3NlcnQodmFyLm1heWJlVHlwZURl
Y2woKS0+aXNOYW1lZCgpKTsKKyAgICBXR1NMOjpBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlID0g
ZG93bmNhc3Q8V0dTTDo6QVNUOjpOYW1lZFR5cGU+KCp2YXIubWF5YmVUeXBlRGVjbCgpKTsKKyAg
ICBYQ1RBc3NlcnQobmFtZWRUeXBlLm5hbWUoKSA9PSAiQiIpOworICAgIFhDVEFzc2VydCghdmFy
Lm1heWJlSW5pdGlhbGl6ZXIoKSk7Cit9CisKKy0gKHZvaWQpdGVzdFBhcnNpbmdGdW5jdGlvbkRl
Y2wgeworICAgIGF1dG8gc2hhZGVyID0gV0dTTDo6cGFyc2VMQ2hhcigiQHN0YWdlKGNvbXB1dGUp
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbiBtYWluKCkge1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHguYSA9IDQyaTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKKyAgICBpZiAoIXNoYWRlci5o
YXNfdmFsdWUoKSkKKyAgICAgICAgZGF0YUxvZ0xuKHNoYWRlci5lcnJvcigpKTsKKyAgICBYQ1RB
c3NlcnQoc2hhZGVyLmhhc192YWx1ZSgpKTsKKyAgICBYQ1RBc3NlcnQoIXNoYWRlci0+ZGlyZWN0
aXZlcygpLnNpemUoKSk7CisgICAgWENUQXNzZXJ0KHNoYWRlci0+c3RydWN0cygpLnNpemUoKSA9
PSAwKTsKKyAgICBYQ1RBc3NlcnQoc2hhZGVyLT5nbG9iYWxWYXJzKCkuc2l6ZSgpID09IDApOwor
ICAgIFhDVEFzc2VydChzaGFkZXItPmZ1bmN0aW9ucygpLnNpemUoKSA9PSAxKTsKKyAgICBXR1NM
OjpBU1Q6OkZ1bmN0aW9uRGVjbCYgZnVuYyA9IHNoYWRlci0+ZnVuY3Rpb25zKClbMF07CisgICAg
WENUQXNzZXJ0KGZ1bmMuYXR0cmlidXRlcygpLnNpemUoKSA9PSAxKTsKKyAgICBYQ1RBc3NlcnQo
ZnVuYy5hdHRyaWJ1dGVzKClbMF0tPmlzU3RhZ2UoKSk7CisgICAgWENUQXNzZXJ0KGRvd25jYXN0
PFdHU0w6OkFTVDo6U3RhZ2VBdHRyaWJ1dGU+KGZ1bmMuYXR0cmlidXRlcygpWzBdLmdldCgpKS5z
dGFnZSgpID09IFdHU0w6OkFTVDo6U3RhZ2VBdHRyaWJ1dGU6OlN0YWdlOjpDb21wdXRlKTsKKyAg
ICBYQ1RBc3NlcnQoZnVuYy5uYW1lKCkgPT0gIm1haW4iKTsKKyAgICBYQ1RBc3NlcnQoZnVuYy5w
YXJhbWV0ZXJzKCkuc2l6ZSgpID09IDApOworICAgIFhDVEFzc2VydChmdW5jLnJldHVybkF0dHJp
YnV0ZXMoKS5pc0VtcHR5KCkpOworICAgIFhDVEFzc2VydChmdW5jLm1heWJlUmV0dXJuVHlwZSgp
ID09IG51bGxwdHIpOworICAgIFhDVEFzc2VydChmdW5jLmJvZHkoKS5zdGF0ZW1lbnRzKCkuc2l6
ZSgpID09IDEpOworICAgIFhDVEFzc2VydChmdW5jLmJvZHkoKS5zdGF0ZW1lbnRzKClbMF0tPmlz
QXNzaWdubWVudCgpKTsKKyAgICBXR1NMOjpBU1Q6OkFzc2lnbm1lbnRTdGF0ZW1lbnQmIHN0bXQg
PSBkb3duY2FzdDxXR1NMOjpBU1Q6OkFzc2lnbm1lbnRTdGF0ZW1lbnQ+KGZ1bmMuYm9keSgpLnN0
YXRlbWVudHMoKVswXS5nZXQoKSk7CisgICAgWENUQXNzZXJ0KHN0bXQubWF5YmVMaHMoKSk7Cisg
ICAgWENUQXNzZXJ0KHN0bXQubWF5YmVMaHMoKS0+aXNTdHJ1Y3R1cmVBY2Nlc3MoKSk7CisgICAg
V0dTTDo6QVNUOjpTdHJ1Y3R1cmVBY2Nlc3MmIHN0cnVjdEFjY2VzcyA9IGRvd25jYXN0PFdHU0w6
OkFTVDo6U3RydWN0dXJlQWNjZXNzPigqc3RtdC5tYXliZUxocygpKTsKKyAgICBYQ1RBc3NlcnQo
c3RydWN0QWNjZXNzLmJhc2UoKS0+aXNJZGVudGlmaWVyKCkpOworICAgIFdHU0w6OkFTVDo6SWRl
bnRpZmllckV4cHJlc3Npb24gYmFzZSA9IGRvd25jYXN0PFdHU0w6OkFTVDo6SWRlbnRpZmllckV4
cHJlc3Npb24+KHN0cnVjdEFjY2Vzcy5iYXNlKCkuZ2V0KCkpOworICAgIFhDVEFzc2VydChiYXNl
LmlkZW50aWZpZXIoKSA9PSAieCIpOworICAgIFhDVEFzc2VydChzdHJ1Y3RBY2Nlc3MuZmllbGRO
YW1lKCkgPT0gImEiKTsKKyAgICBYQ1RBc3NlcnQoc3RtdC5yaHMoKS5pc0ludDMyTGl0ZXJhbCgp
KTsKKyAgICBXR1NMOjpBU1Q6OkludDMyTGl0ZXJhbCYgcmhzID0gZG93bmNhc3Q8V0dTTDo6QVNU
OjpJbnQzMkxpdGVyYWw+KHN0bXQucmhzKCkpOworICAgIFhDVEFzc2VydChyaHMudmFsdWUoKSA9
PSA0Mik7Cit9CisKKy0gKHZvaWQpdGVzdFRyaXZpYWxHcmFwaGljc1NoYWRlciB7CisgICAgYXV0
byBzaGFkZXIgPSBXR1NMOjpwYXJzZUxDaGFyKCJAc3RhZ2UodmVydGV4KVxuIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZm4gdmVydGV4U2hhZGVyKEBsb2NhdGlvbigwKSB4
OiB2ZWM0PGYzMj4pIC0+IEBidWlsdGluKHBvc2l0aW9uKSB2ZWM0PGYzMj4ge1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB4O1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAifVxuXG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJAc3RhZ2UoZnJhZ21lbnQpXG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJmbiBmcmFnbWVudFNoYWRlcigpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYz
Mj4ge1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB2
ZWM0PGYzMj4oMC40LCAwLjQsIDAuOCwgMS4wKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIn0iKTsKKyAgICBpZiAoIXNoYWRlci5oYXNfdmFsdWUoKSkKKyAgICAgICAg
ZGF0YUxvZ0xuKHNoYWRlci5lcnJvcigpKTsKKyAgICBYQ1RBc3NlcnQoc2hhZGVyLmhhc192YWx1
ZSgpKTsKKyAgICBYQ1RBc3NlcnQoIXNoYWRlci0+ZGlyZWN0aXZlcygpLnNpemUoKSk7CisgICAg
WENUQXNzZXJ0KHNoYWRlci0+c3RydWN0cygpLnNpemUoKSA9PSAwKTsKKyAgICBYQ1RBc3NlcnQo
c2hhZGVyLT5nbG9iYWxWYXJzKCkuc2l6ZSgpID09IDApOworICAgIFhDVEFzc2VydChzaGFkZXIt
PmZ1bmN0aW9ucygpLnNpemUoKSA9PSAyKTsKKworICAgIHsKKyAgICAgICAgV0dTTDo6QVNUOjpG
dW5jdGlvbkRlY2wmIGZ1bmMgPSBzaGFkZXItPmZ1bmN0aW9ucygpWzBdOworICAgICAgICBYQ1RB
c3NlcnQoZnVuYy5hdHRyaWJ1dGVzKCkuc2l6ZSgpID09IDEpOworICAgICAgICBYQ1RBc3NlcnQo
ZnVuYy5hdHRyaWJ1dGVzKClbMF0tPmlzU3RhZ2UoKSk7CisgICAgICAgIFhDVEFzc2VydChkb3du
Y2FzdDxXR1NMOjpBU1Q6OlN0YWdlQXR0cmlidXRlPihmdW5jLmF0dHJpYnV0ZXMoKVswXS5nZXQo
KSkuc3RhZ2UoKSA9PSBXR1NMOjpBU1Q6OlN0YWdlQXR0cmlidXRlOjpTdGFnZTo6VmVydGV4KTsK
KyAgICAgICAgWENUQXNzZXJ0KGZ1bmMubmFtZSgpID09ICJ2ZXJ0ZXhTaGFkZXIiKTsKKyAgICAg
ICAgWENUQXNzZXJ0KGZ1bmMucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAgWENU
QXNzZXJ0KGZ1bmMucGFyYW1ldGVycygpWzBdLT5uYW1lKCkgPT0gIngiKTsKKyAgICAgICAgWENU
QXNzZXJ0KGZ1bmMucGFyYW1ldGVycygpWzBdLT5hdHRyaWJ1dGVzKCkuc2l6ZSgpID09IDEpOwor
ICAgICAgICBYQ1RBc3NlcnQoZnVuYy5wYXJhbWV0ZXJzKClbMF0tPmF0dHJpYnV0ZXMoKVswXS0+
aXNMb2NhdGlvbigpKTsKKyAgICAgICAgWENUQXNzZXJ0KGRvd25jYXN0PFdHU0w6OkFTVDo6TG9j
YXRpb25BdHRyaWJ1dGU+KGZ1bmMucGFyYW1ldGVycygpWzBdLT5hdHRyaWJ1dGVzKClbMF0uZ2V0
KCkpLmxvY2F0aW9uKCkgPT0gMCk7CisgICAgICAgIFhDVEFzc2VydChmdW5jLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpLmlzUGFyYW1ldGVyaXplZCgpKTsKKyAgICAgICAgV0dTTDo6QVNUOjpQYXJh
bWV0ZXJpemVkVHlwZSYgcGFyYW1UeXBlID0gZG93bmNhc3Q8V0dTTDo6QVNUOjpQYXJhbWV0ZXJp
emVkVHlwZT4oZnVuYy5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIFhDVEFzc2Vy
dChwYXJhbVR5cGUuYmFzZSgpID09IFdHU0w6OkFTVDo6UGFyYW1ldGVyaXplZFR5cGU6OkJhc2U6
OlZlYzQpOworICAgICAgICBYQ1RBc3NlcnQocGFyYW1UeXBlLmVsZW1lbnRUeXBlKCkuaXNOYW1l
ZCgpKTsKKyAgICAgICAgWENUQXNzZXJ0KGRvd25jYXN0PFdHU0w6OkFTVDo6TmFtZWRUeXBlPihw
YXJhbVR5cGUuZWxlbWVudFR5cGUoKSkubmFtZSgpID09ICJmMzIiKTsKKyAgICAgICAgWENUQXNz
ZXJ0KGZ1bmMucmV0dXJuQXR0cmlidXRlcygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAgWENUQXNz
ZXJ0KGZ1bmMucmV0dXJuQXR0cmlidXRlcygpWzBdLT5pc0J1aWx0aW4oKSk7CisgICAgICAgIFhD
VEFzc2VydChkb3duY2FzdDxXR1NMOjpBU1Q6OkJ1aWx0aW5BdHRyaWJ1dGU+KGZ1bmMucmV0dXJu
QXR0cmlidXRlcygpWzBdLmdldCgpKS5uYW1lKCkgPT0gInBvc2l0aW9uIik7CisgICAgICAgIFhD
VEFzc2VydChmdW5jLm1heWJlUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMu
bWF5YmVSZXR1cm5UeXBlKCktPmlzUGFyYW1ldGVyaXplZCgpKTsKKyAgICAgICAgWENUQXNzZXJ0
KGZ1bmMuYm9keSgpLnN0YXRlbWVudHMoKS5zaXplKCkgPT0gMSk7CisgICAgICAgIFhDVEFzc2Vy
dChmdW5jLmJvZHkoKS5zdGF0ZW1lbnRzKClbMF0tPmlzUmV0dXJuKCkpOworICAgICAgICBXR1NM
OjpBU1Q6OlJldHVyblN0YXRlbWVudCYgc3RtdCA9IGRvd25jYXN0PFdHU0w6OkFTVDo6UmV0dXJu
U3RhdGVtZW50PihmdW5jLmJvZHkoKS5zdGF0ZW1lbnRzKClbMF0uZ2V0KCkpOworICAgICAgICBY
Q1RBc3NlcnQoc3RtdC5tYXliZUV4cHJlc3Npb24oKSk7CisgICAgICAgIFhDVEFzc2VydChzdG10
Lm1heWJlRXhwcmVzc2lvbigpLT5pc0lkZW50aWZpZXIoKSk7CisgICAgfQorCisgICAgeworICAg
ICAgICBXR1NMOjpBU1Q6OkZ1bmN0aW9uRGVjbCYgZnVuYyA9IHNoYWRlci0+ZnVuY3Rpb25zKClb
MV07CisgICAgICAgIFhDVEFzc2VydChmdW5jLmF0dHJpYnV0ZXMoKS5zaXplKCkgPT0gMSk7Cisg
ICAgICAgIFhDVEFzc2VydChmdW5jLmF0dHJpYnV0ZXMoKVswXS0+aXNTdGFnZSgpKTsKKyAgICAg
ICAgWENUQXNzZXJ0KGRvd25jYXN0PFdHU0w6OkFTVDo6U3RhZ2VBdHRyaWJ1dGU+KGZ1bmMuYXR0
cmlidXRlcygpWzBdLmdldCgpKS5zdGFnZSgpID09IFdHU0w6OkFTVDo6U3RhZ2VBdHRyaWJ1dGU6
OlN0YWdlOjpGcmFnbWVudCk7CisgICAgICAgIFhDVEFzc2VydChmdW5jLm5hbWUoKSA9PSAiZnJh
Z21lbnRTaGFkZXIiKTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMucGFyYW1ldGVycygpLnNpemUo
KSA9PSAwKTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMucmV0dXJuQXR0cmlidXRlcygpLnNpemUo
KSA9PSAxKTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMucmV0dXJuQXR0cmlidXRlcygpWzBdLT5p
c0xvY2F0aW9uKCkpOworICAgICAgICBYQ1RBc3NlcnQoZG93bmNhc3Q8V0dTTDo6QVNUOjpMb2Nh
dGlvbkF0dHJpYnV0ZT4oZnVuYy5yZXR1cm5BdHRyaWJ1dGVzKClbMF0uZ2V0KCkpLmxvY2F0aW9u
KCkgPT0gMCk7CisgICAgICAgIFhDVEFzc2VydChmdW5jLm1heWJlUmV0dXJuVHlwZSgpKTsKKyAg
ICAgICAgWENUQXNzZXJ0KGZ1bmMubWF5YmVSZXR1cm5UeXBlKCktPmlzUGFyYW1ldGVyaXplZCgp
KTsKKyAgICAgICAgWENUQXNzZXJ0KGZ1bmMuYm9keSgpLnN0YXRlbWVudHMoKS5zaXplKCkgPT0g
MSk7CisgICAgICAgIFhDVEFzc2VydChmdW5jLmJvZHkoKS5zdGF0ZW1lbnRzKClbMF0tPmlzUmV0
dXJuKCkpOworICAgICAgICBXR1NMOjpBU1Q6OlJldHVyblN0YXRlbWVudCYgc3RtdCA9IGRvd25j
YXN0PFdHU0w6OkFTVDo6UmV0dXJuU3RhdGVtZW50PihmdW5jLmJvZHkoKS5zdGF0ZW1lbnRzKClb
MF0uZ2V0KCkpOworICAgICAgICBYQ1RBc3NlcnQoc3RtdC5tYXliZUV4cHJlc3Npb24oKSk7Cisg
ICAgICAgIFhDVEFzc2VydChzdG10Lm1heWJlRXhwcmVzc2lvbigpLT5pc1R5cGVDb252ZXJzaW9u
KCkpOworICAgICAgICBXR1NMOjpBU1Q6OlR5cGVDb252ZXJzaW9uJiBleHByID0gZG93bmNhc3Q8
V0dTTDo6QVNUOjpUeXBlQ29udmVyc2lvbj4oKnN0bXQubWF5YmVFeHByZXNzaW9uKCkpOworICAg
ICAgICBYQ1RBc3NlcnQoZXhwci50eXBlRGVjbCgpLT5pc1BhcmFtZXRlcml6ZWQoKSk7CisgICAg
ICAgIFhDVEFzc2VydChleHByLmFyZ3VtZW50cygpLnNpemUoKSA9PSA0KTsKKyAgICAgICAgWENU
QXNzZXJ0KGV4cHIuYXJndW1lbnRzKClbMF0tPmlzRmxvYXQzMkxpdGVyYWwoKSk7CisgICAgICAg
IFhDVEFzc2VydChleHByLmFyZ3VtZW50cygpWzFdLT5pc0Zsb2F0MzJMaXRlcmFsKCkpOworICAg
ICAgICBYQ1RBc3NlcnQoZXhwci5hcmd1bWVudHMoKVsyXS0+aXNGbG9hdDMyTGl0ZXJhbCgpKTsK
KyAgICAgICAgWENUQXNzZXJ0KGV4cHIuYXJndW1lbnRzKClbM10tPmlzRmxvYXQzMkxpdGVyYWwo
KSk7CisgICAgfQorfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBhMDM3YTY0MzJiZDcuLmM0MjYwYWFkYmE2YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCwx
MyArNDgsMTUgQEAKIAkJMzM4QkIyRDIyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOEJCMkQxMjdC
NkI2M0YwMEUwNjZBQiAvKiBTb3VyY2VTcGFuLmggKi87IH07CiAJCTMzOEJCMkQ0MjdCNkI2NkMw
MEUwNjZBQiAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzM4QkIyRDMyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmggKi87IH07CiAJCTMz
OEJCMkQ2MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzhCQjJENTI3QjZCNjg3MDBFMDY2QUIgLyogTGV4
ZXIuY3BwICovOyB9OwotCQlERDA1QTM1QzI3QkYwOUM2MDA5NkVGQUIgLyogbGliV1RGLmEgaW4g
UHJvZHVjdCBEZXBlbmRlbmNpZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUNFQkQ4MjkyNzE2Q0FFNzAwQTUyNTREIC8qIGxpYldURi5hICovOyB9OworCQkzMzlCN0IxODI3
RDdGRkE0MDA3MkJGOUEgLyogUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMzlCN0IxNzI3RDdGRkE0MDA3MkJGOUEgLyogUGFyc2VyLmggKi87
IH07CisJCTMzOUI3QjFCMjdEODAwMDkwMDcyQkY5QSAvKiBQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5QjdCMUEyN0Q4MDAwOTAwNzJC
RjlBIC8qIFBhcnNlci5jcHAgKi87IH07CisJCTMzOUI3QjFEMjdEODBBMUMwMDcyQkY5QSAvKiBX
R1NMUGFyc2VyVGVzdHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMzlCN0IxQzI3RDgwQTFDMDA3MkJGOUEgLyogV0dTTFBhcnNlclRlc3RzLm1tICov
OyB9OworCQkzMzlCN0IxRTI3RDgxNjI3MDA3MkJGOUEgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODY3
MjdCQzFCMTQwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuY3BwICovOyB9OwogCQkzM0VB
MTg1RTI3QkMxOTRGMDBBMURENTIgLyogQVNUTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NUQyN0JDMTk0RjAwQTFERDUyIC8qIEFTVE5v
ZGUuaCAqLzsgfTsKIAkJMzNFQTE4NjAyN0JDMTk4MTAwQTFERDUyIC8qIEdsb2JhbERpcmVjdGl2
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4
NUYyN0JDMTk4MTAwQTFERDUyIC8qIEdsb2JhbERpcmVjdGl2ZS5oICovOyB9OwogCQkzM0VBMTg2
MjI3QkMxOUMxMDBBMURENTIgLyogR2xvYmFsRGVjbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NjEyN0JDMTlDMTAwQTFERDUyIC8qIEdsb2Jh
bERlY2wuaCAqLzsgfTsKIAkJMzNFQTE4NjQyN0JDMUExRDAwQTFERDUyIC8qIEdsb2JhbFZhcmlh
YmxlRGVjbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzNFQTE4NjMyN0JDMUExRDAwQTFERDUyIC8qIEdsb2JhbFZhcmlhYmxlRGVjbC5oICovOyB9Owog
CQkzM0VBMTg2NjI3QkMxQUQ1MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg2NTI3QkMxQUQ1
MDBBMURENTIgLyogQ29tcGlsYXRpb25NZXNzYWdlLmggKi87IH07Ci0JCTMzRUExODY4MjdCQzFC
MTQwMEExREQ1MiAvKiBDb21waWxhdGlvbk1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4NjcyN0JDMUIxNDAwQTFERDUyIC8qIENv
bXBpbGF0aW9uTWVzc2FnZS5jcHAgKi87IH07CiAJCTMzRUExODZBMjdCQzFCRTYwMEExREQ1MiAv
KiBBdHRyaWJ1dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzRUExODY5MjdCQzFCRTYwMEExREQ1MiAvKiBBdHRyaWJ1dGUuaCAqLzsgfTsKIAkJMzNF
QTE4NkMyN0JDMUNCQzAwQTFERDUyIC8qIEV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODZCMjdCQzFDQkMwMEExREQ1MiAvKiBF
eHByZXNzaW9uLmggKi87IH07CiAJCTMzRUExODZFMjdCQzFENEMwMEExREQ1MiAvKiBUeXBlRGVj
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFQTE4
NkQyN0JDMUQ0QzAwQTFERDUyIC8qIFR5cGVEZWNsLmggKi87IH07CkBAIC03MCw2ICs3Miw3IEBA
CiAJCTMzRUExODg0MjdCQzI2ODYwMEExREQ1MiAvKiBTdHJ1Y3R1cmVBY2Nlc3MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRUExODgzMjdCQzI2ODYw
MEExREQ1MiAvKiBTdHJ1Y3R1cmVBY2Nlc3MuaCAqLzsgfTsKIAkJMzNFQTE4ODYyN0JDMjZERjAw
QTFERDUyIC8qIFR5cGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzM0VBMTg4NTI3QkMyNkRGMDBBMURENTIgLyogVHlwZUNvbnZlcnNp
b24uaCAqLzsgfTsKIAkJMzNFQTE4ODgyN0JDMzYxRTAwQTFERDUyIC8qIExpdGVyYWxFeHByZXNz
aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNF
QTE4ODcyN0JDMzYxRTAwQTFERDUyIC8qIExpdGVyYWxFeHByZXNzaW9ucy5oICovOyB9OworCQlE
RDA1QTM1QzI3QkYwOUM2MDA5NkVGQUIgLyogbGliV1RGLmEgaW4gUHJvZHVjdCBEZXBlbmRlbmNp
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNFQkQ4MjkyNzE2Q0FFNzAw
QTUyNTREIC8qIGxpYldURi5hICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICov
CiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC0yMDEsNiAr
MjA0LDkgQEAKIAkJMzM4QkIyRDEyN0I2QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU291cmNlU3Bhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
MzhCQjJEMzI3QjZCNjZDMDBFMDY2QUIgLyogTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGV4ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM4QkIyRDUyN0I2QjY4NzAwRTA2NkFC
IC8qIExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExleGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzM5QjdCMTcyN0Q3RkZBNDAwNzJCRjlBIC8qIFBhcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM5
QjdCMUEyN0Q4MDAwOTAwNzJCRjlBIC8qIFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
YXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzlCN0IxQzI3RDgwQTFD
MDA3MkJGOUEgLyogV0dTTFBhcnNlclRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0dT
TFBhcnNlclRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0VBMTg1RDI3
QkMxOTRGMDBBMURENTIgLyogQVNUTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBU1ROb2RlLmg7IHBh
dGggPSBXR1NML0FTVE5vZGUuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQkzM0VB
MTg1RjI3QkMxOTgxMDBBMURENTIgLyogR2xvYmFsRGlyZWN0aXZlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdsb2JhbERpcmVjdGl2ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0VBMTg2
MTI3QkMxOUMxMDBBMURENTIgLyogR2xvYmFsRGVjbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbG9iYWxE
ZWNsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjUsNiArMjcxLDcgQEAKIAkJ
MUMwMjNEM0QyNzQ0OTA3MDAwMURCNzM0IC8qIFdHU0xVbml0VGVzdHMgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTMzOUI3QjFDMjdEODBBMUMwMDcyQkY5
QSAvKiBXR1NMUGFyc2VyVGVzdHMubW0gKi8sCiAJCQkJMUMwMjNEM0UyNzQ0OTA3MDAwMURCNzM0
IC8qIFdHU0xMZXhlclRlc3RzLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBXR1NMVW5pdFRlc3Rz
OwpAQCAtMzY4LDExICszNzUsMTIgQEAKIAkJCQkxQ0VCRDgwNDI3MTZCRkFCMDBBNTI1NEQgLyog
Y29uZmlnLmggKi8sCiAJCQkJMzNFQTE4NjUyN0JDMUFENTAwQTFERDUyIC8qIENvbXBpbGF0aW9u
TWVzc2FnZS5oICovLAogCQkJCTMzRUExODY3MjdCQzFCMTQwMEExREQ1MiAvKiBDb21waWxhdGlv
bk1lc3NhZ2UuY3BwICovLAotCQkJCTMzOEJCMkQzMjdCNkI2NkMwMEUwNjZBQiAvKiBMZXhlci5o
ICovLAogCQkJCTMzOEJCMkQ1MjdCNkI2ODcwMEUwNjZBQiAvKiBMZXhlci5jcHAgKi8sCiAJCQkJ
MzM4QkIyRDMyN0I2QjY2QzAwRTA2NkFCIC8qIExleGVyLmggKi8sCiAJCQkJMzM4QkIyRDEyN0I2
QjYzRjAwRTA2NkFCIC8qIFNvdXJjZVNwYW4uaCAqLywKIAkJCQkzMzhCQjJDRjI3QjZCNjFCMDBF
MDY2QUIgLyogVG9rZW4uY3BwICovLAorCQkJCTMzOUI3QjE3MjdEN0ZGQTQwMDcyQkY5QSAvKiBQ
YXJzZXIuaCAqLywKKwkJCQkzMzlCN0IxQTI3RDgwMDA5MDA3MkJGOUEgLyogUGFyc2VyLmNwcCAq
LywKIAkJCQkzMzhCQjJDRDI3QjZCNjAyMDBFMDY2QUIgLyogVG9rZW4uaCAqLywKIAkJCQkxQ0VC
RDgwMjI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgKi8sCiAJCQkJMUNFQkQ3RjcyNzE2QjM0
NDAwQTUyNTREIC8qIFdHU0wuaCAqLywKQEAgLTQ3Miw2ICs0ODAsNyBAQAogCQkJCTMzRUExODVF
MjdCQzE5NEYwMEExREQ1MiAvKiBBU1ROb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzM0VBMTg4
NjI3QkMyNkRGMDBBMURENTIgLyogVHlwZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMzRUExODY0MjdCQzFBMUQwMEExREQ1MiAvKiBHbG9iYWxWYXJpYWJsZURlY2wuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMzOUI3QjE4MjdEN0ZGQTQwMDcyQkY5QSAvKiBQYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMzRUExODdCMjdCQzIzMEUwMEExREQ1MiAvKiBDb21wb3VuZFN0YXRlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzNFQTE4NzYyN0JDMjE2QjAwQTFERDUyIC8qIEZ1bmN0
aW9uRGVjbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzM4QkIyRDIyN0I2QjYzRjAwRTA2NkFCIC8q
IFNvdXJjZVNwYW4uaCBpbiBIZWFkZXJzICovLApAQCAtNjgwLDYgKzY4OSw3IEBACiAJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJMUMwMjNEM0YyNzQ0
OTA3MDAwMURCNzM0IC8qIFdHU0xMZXhlclRlc3RzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMzM5
QjdCMUQyN0Q4MEExQzAwNzJCRjlBIC8qIFdHU0xQYXJzZXJUZXN0cy5tbSBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpAQCAtNzI1LDYgKzczNSw4IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkzMzlCN0Ix
RTI3RDgxNjI3MDA3MkJGOUEgLyogQ29tcGlsYXRpb25NZXNzYWdlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTMzOUI3QjFCMjdEODAwMDkwMDcyQkY5QSAvKiBQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzM4QkIyRDYyN0I2QjY4NzAwRTA2NkFCIC8qIExleGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTMzOEJCMkQwMjdCNkI2MUIwMEUwNjZBQiAvKiBUb2tlbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQ0VCRDgwMzI3MTZCRjgyMDBBNTI1NEQgLyogV0dTTC5jcHAgaW4gU291cmNl
cyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>