<?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>192294</bug_id>
          
          <creation_ts>2018-12-02 20:33:11 -0800</creation_ts>
          <short_desc>[WHLSL] Add a handwritten lexer</short_desc>
          <delta_ts>2019-01-10 08:45:39 -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>New Bugs</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>
          
          <blocked>192355</blocked>
    
    <blocked>192991</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1484246</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-02 20:33:11 -0800</bug_when>
    <thetext>[WHLSL] Add a handwritten lexer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484249</commentid>
    <comment_count>1</comment_count>
      <attachid>356353</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-02 20:38:41 -0800</bug_when>
    <thetext>Created attachment 356353
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484250</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-12-02 20:39:52 -0800</bug_when>
    <thetext>Attachment 356353 did not pass style-queue:


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


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489083</commentid>
    <comment_count>3</comment_count>
      <attachid>357617</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-18 14:55:38 -0800</bug_when>
    <thetext>Created attachment 357617
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489253</commentid>
    <comment_count>4</comment_count>
      <attachid>357617</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2018-12-19 01:36:58 -0800</bug_when>
    <thetext>Comment on attachment 357617
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:556
&gt; +    for ( ; m_offset &lt; m_stringView.length() &amp;&amp; !isNewline(m_stringView[m_offset]); ++m_offset) { }

Nit: consistent style of empty block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489505</commentid>
    <comment_count>5</comment_count>
      <attachid>357617</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-19 15:01:55 -0800</bug_when>
    <thetext>Comment on attachment 357617
Patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:556
&gt;&gt; +    for ( ; m_offset &lt; m_stringView.length() &amp;&amp; !isNewline(m_stringView[m_offset]); ++m_offset) { }
&gt; 
&gt; Nit: consistent style of empty block.

ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:558:  One line control clauses should not use braces.  [whitespace/braces] [4]

and if i use a semicolon

ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:556:  Semicolon defining empty statement for this loop. Use { } instead.  [whitespace/semicolon] [5]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489524</commentid>
    <comment_count>6</comment_count>
      <attachid>357617</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-19 15:27:54 -0800</bug_when>
    <thetext>Comment on attachment 357617
Patch

Clearing flags on attachment: 357617

Committed r239398: &lt;https://trac.webkit.org/changeset/239398&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489525</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-19 15:27:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489527</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-12-19 15:28:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/46854789&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493234</commentid>
    <comment_count>9</comment_count>
      <attachid>357617</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-10 01:17:51 -0800</bug_when>
    <thetext>Comment on attachment 357617
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:255
&gt; +auto Lexer::recognizeKeyword(unsigned end) -&gt; std::optional&lt;Token::Type&gt;

Is this slow? Do you know what code LLVM emits for this? Is it actually a bunch of string compares? It might be worth doing what JSC’s lexer does. IIRC, we have a compile step that essentially compiles a function that does this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493308</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-10 08:45:39 -0800</bug_when>
    <thetext>Yeah I thought about making a trie at compiler time but I didn’t want to add the complexity in the first patch. I’ll measure how bad the current code is to see if it’s worth it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356353</attachid>
            <date>2018-12-02 20:38:41 -0800</date>
            <delta_ts>2018-12-18 14:55:37 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-192294-20181202203840.patch</filename>
            <type>text/plain</type>
            <size>32861</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4NzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGNmNjAyZjdmYjI4OWM1
NTIwZDA3ZDAyZDVjN2Y1YWQ1ZjU5N2EzZS4uNjgzMjI2YzBmNDhkYWUzMTVjOTJmZTFlMDY0M2I4
NzNkOTMxZTA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE4LTEyLTAyICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBB
ZGQgYSBoYW5kd3JpdHRlbiBsZXhlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkyMjk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TGV4ZXI6OmNvbnN1bWVUb2tlbkZyb21TdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkxleGVyOjpza2lwV2hpdGVzcGFjZUFuZENvbW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjppc1doaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmlzTmV3
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OnNraXBXaGl0ZXNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6c2tpcExpbmVDb21tZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6c2tpcExvbmdDb21tZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpMZXhlcjo6Y29yZURlY2ltYWxJbnRMaXRlcmFsIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6ZGVjaW1hbEludExpdGVyYWwgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpkZWNpbWFsVWludExpdGVyYWwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmlzSGV4YWRlY2ltYWxDaGFyYWN0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpjb3JlSGV4YWRlY2ltYWxJbnRMaXRlcmFsIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6aGV4YWRlY2ltYWxJbnRMaXRlcmFs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6aGV4YWRlY2ltYWxVaW50
TGl0ZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmludExpdGVy
YWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpkaWdpdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmRpZ2l0U3RhciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmNoYXJhY3RlciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmNvcmVGbG9hdExpdGVyYWxUeXBlMSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmNvcmVGbG9hdExpdGVyYWwgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpmbG9hdExpdGVyYWwgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpxdWFsaWZpZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkxleGVyOjpzZW1hbnRpYyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TGV4ZXI6Om51bXRocmVhZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkxleGVyOjp2YWxpZElkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkxleGVyOjppZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhl
cjo6b3BlcmF0b3JOYW1lIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTExleGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpMZXhl
cik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmNvbnN1bWVUb2tlbik6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OnVuY29uc3VtZVRva2VuKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpMZXhlcjo6aXNGdWxseUNvbnN1bWVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpMZXhlcjo6c3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpMZXhlcjo6YW55Q2hhcmFjdGVyIGNvbnN0KToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTgtMTIt
MDEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTGlmZXRp
bWUgb2YgSFRNTE1lZGlhRWxlbWVudCBpcyBub3QgcHJvcGVybHkgaGFuZGxlZCBpbiBhc3luY2hy
b25vdXMgYWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xMZXhlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTExleGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWE0Y2Q0ZGM1MjNkM2M2MzdmNTJjZjA0NDI0
YzQ3NjZkNDkzNjA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKQEAgLTAsMCArMSw1NTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKwordHlwZWRlZiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiAoTGV4ZXI6
OipQYXJzZXJSdWxlKSh1bnNpZ25lZCkgY29uc3Q7CisKK2F1dG8gTGV4ZXI6OmNvbnN1bWVUb2tl
bkZyb21TdHJlYW0oKSAtPiBzdGQ6Om9wdGlvbmFsPFRva2VuPgoreworICAgIGF1dG8gcHJlcGFy
ZSA9IFsmXSh1bnNpZ25lZCBuZXdPZmZzZXQsIFRva2VuOjpUeXBlIHR5cGUpIC0+IHN0ZDo6b3B0
aW9uYWw8VG9rZW4+IHsKKyAgICAgICAgYXV0byBvZmZzZXQgPSBtX29mZnNldDsKKyAgICAgICAg
bV9vZmZzZXQgPSBuZXdPZmZzZXQ7CisgICAgICAgIHNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMo
KTsKKyAgICAgICAgcmV0dXJuIHt7IG1fc3RyaW5nVmlldy5zdWJzdHJpbmcob2Zmc2V0LCBtX29m
ZnNldCAtIG9mZnNldCksIHR5cGUgfX07CisgICAgfTsKKworICAgIGlmIChhdXRvIG5ld09mZnNl
dCA9IGludExpdGVyYWwobV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zm
c2V0LCBUb2tlbjo6VHlwZTo6SW50TGl0ZXJhbCk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0g
ZmxvYXRMaXRlcmFsKG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNl
dCwgVG9rZW46OlR5cGU6OkZsb2F0TGl0ZXJhbCk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0g
c3RyaW5nKCJzdHJ1Y3QiLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdP
ZmZzZXQsIFRva2VuOjpUeXBlOjpTdHJ1Y3QpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0
cmluZygidHlwZWRlZiIsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09m
ZnNldCwgVG9rZW46OlR5cGU6OlR5cGVkZWYpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0
cmluZygiZW51bSIsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNl
dCwgVG9rZW46OlR5cGU6OkVudW0pOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygi
b3BlcmF0b3IiLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQs
IFRva2VuOjpUeXBlOjpPcGVyYXRvcik7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5n
KCJpZiIsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9r
ZW46OlR5cGU6OklmKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoImVsc2UiLCBt
X29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBl
OjpFbHNlKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoImNvbnRpbnVlIiwgbV9v
ZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6
Q29udGludWUpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygiYnJlYWsiLCBtX29m
ZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpC
cmVhayk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCJzd2l0Y2giLCBtX29mZnNl
dCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpTd2l0
Y2gpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygiY2FzZSIsIG1fb2Zmc2V0KSkK
KyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OkNhc2UpOwor
ICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygiZGVmYXVsdCIsIG1fb2Zmc2V0KSkKKyAg
ICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OkRlZmF1bHQpOwor
ICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygiZmFsbHRocm91Z2giLCBtX29mZnNldCkp
CisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpGYWxsdGhy
b3VnaCk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCJmb3IiLCBtX29mZnNldCkp
CisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpGb3IpOwor
ICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygid2hpbGUiLCBtX29mZnNldCkpCisgICAg
ICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpXaGlsZSk7CisgICAg
aWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCJkbyIsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0
dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OkRvKTsKKyAgICBpZiAoYXV0byBu
ZXdPZmZzZXQgPSBzdHJpbmcoInJldHVybiIsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHBy
ZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OlJldHVybik7CisgICAgaWYgKGF1dG8gbmV3
T2Zmc2V0ID0gc3RyaW5nKCJ0cmFwIiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFy
ZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6VHJhcCk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0
ID0gc3RyaW5nKCJudWxsIiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3
T2Zmc2V0LCBUb2tlbjo6VHlwZTo6TnVsbCk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3Ry
aW5nKCJ0cnVlIiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0
LCBUb2tlbjo6VHlwZTo6VHJ1ZSk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCJm
YWxzZSIsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9r
ZW46OlR5cGU6OkZhbHNlKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoImNvbnN0
YW50IiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tl
bjo6VHlwZTo6Q29uc3RhbnQpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygiZGV2
aWNlIiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tl
bjo6VHlwZTo6RGV2aWNlKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoInRocmVh
ZGdyb3VwIiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBU
b2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXApOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmlu
ZygidGhyZWFkIiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0
LCBUb2tlbjo6VHlwZTo6VGhyZWFkKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmco
InNwYWNlIiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBU
b2tlbjo6VHlwZTo6U3BhY2UpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygidmVy
dGV4IiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tl
bjo6VHlwZTo6VmVydGV4KTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoImZyYWdt
ZW50IiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tl
bjo6VHlwZTo6RnJhZ21lbnQpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygiY29t
cHV0ZSIsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9r
ZW46OlR5cGU6OkNvbXB1dGUpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygibnVt
dGhyZWFkcyIsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwg
VG9rZW46OlR5cGU6Ok51bXRocmVhZHMpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmlu
ZygibmF0aXZlIiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0
LCBUb2tlbjo6VHlwZTo6TmF0aXZlKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmco
InJlc3RyaWN0ZWQiLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZz
ZXQsIFRva2VuOjpUeXBlOjpSZXN0cmljdGVkKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBz
dHJpbmcoIl8iLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQs
IFRva2VuOjpUeXBlOjpVbmRlcnNjb3JlKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJp
bmcoImF1dG8iLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQs
IFRva2VuOjpUeXBlOjpBdXRvKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoInBy
b3RvY29sIiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBU
b2tlbjo6VHlwZTo6UHJvdG9jb2wpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygi
Y29uc3QiLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRv
a2VuOjpUeXBlOjpDb25zdCk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCJzdGF0
aWMiLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2Vu
OjpUeXBlOjpTdGF0aWMpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHF1YWxpZmllcihtX29m
ZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpR
dWFsaWZpZXIpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHNlbWFudGljKG1fb2Zmc2V0KSkK
KyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OlNlbWFudGlj
KTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBudW10aHJlYWRzKG1fb2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6Ok51bXRocmVhZHNTZW1h
bnRpYyk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gaWRlbnRpZmllcihtX29mZnNldCkpCisg
ICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpJZGVudGlmaWVy
KTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBvcGVyYXRvck5hbWUobV9vZmZzZXQpKQorICAg
ICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6T3BlcmF0b3JOYW1l
KTsKKworICAgIHNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTsKKyAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworfQorCit2b2lkIExleGVyOjpza2lwV2hpdGVzcGFjZUFuZENvbW1lbnRzKCkKK3sK
KyAgICB1bnNpZ25lZCBzYXZlZE9mZnNldDsKKyAgICBkbyB7CisgICAgICAgIHNhdmVkT2Zmc2V0
ID0gbV9vZmZzZXQ7CisgICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7CisgICAgICAgIHNraXBMaW5l
Q29tbWVudCgpOworICAgICAgICBza2lwTG9uZ0NvbW1lbnQoKTsKKyAgICB9IHdoaWxlIChzYXZl
ZE9mZnNldCAhPSBtX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlc3Bh
Y2UoVUNoYXIgY29kZVVuaXQpCit7CisgICAgc3dpdGNoIChjb2RlVW5pdCkgeworICAgIGNhc2Ug
JyAnOgorICAgIGNhc2UgJ1x0JzoKKyAgICBjYXNlICdccic6CisgICAgY2FzZSAnXG4nOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNvZGVVbml0KQor
eworICAgIHN3aXRjaCAoY29kZVVuaXQpIHsKKyAgICBjYXNlICdccic6CisgICAgY2FzZSAnXG4n
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCisvLyBXZSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdHdvIHByb3BlcnRp
ZXMgb2YgVW5pY29kZToKKy8vIDEuIFRoZSBjb25zaXR1dGVudCBVVEYtMTYgY29kZSB1bml0cyBm
b3IgYWxsIG5vbi1CTVAgY29kZSBwb2ludHMgYXJlIHN1cnJvZ2F0ZXMsCisvLyAgICAgICAgd2hp
Y2ggbWVhbnMgd2UnbGwgbmV2ZXIgc2VlIGEgZmFsc2UgbWF0Y2guIElmIHdlIHNlZSBhIEJNUCBj
b2RlIHVuaXQsIHdlCisvLyAgICAgICAgcmVhbGx5IGhhdmUgYSBCTVAgY29kZSBwb2ludC4KKy8v
IDIuIEV2ZXJ5dGhpbmcgd2UncmUgbG9va2luZyBmb3IgaXMgaW4gQk1QCisKK3ZvaWQgTGV4ZXI6
OnNraXBXaGl0ZXNwYWNlKCkKK3sKKyAgICBmb3IgKCA7IG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3
Lmxlbmd0aCgpICYmIGlzV2hpdGVzcGFjZShtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdKTsgKyttX29m
ZnNldCkgeyB9Cit9CisKK3ZvaWQgTGV4ZXI6OnNraXBMaW5lQ29tbWVudCgpCit7CisgICAgaWYg
KG1fb2Zmc2V0ICsgMSA+PSBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgfHwgbV9zdHJpbmdWaWV3W21f
b2Zmc2V0XSAhPSAnLycgfHwgbV9zdHJpbmdWaWV3W21fb2Zmc2V0ICsgMV0gIT0gJy8nKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX29mZnNldCArPSAyOworICAgIGZvciAoIDsgbV9vZmZzZXQg
PCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgIWlzTmV3bGluZShtX3N0cmluZ1ZpZXdbbV9vZmZz
ZXRdKTsgKyttX29mZnNldCkgeyB9Cit9CisKK3ZvaWQgTGV4ZXI6OnNraXBMb25nQ29tbWVudCgp
Cit7CisgICAgaWYgKG1fb2Zmc2V0ICsgMSA+PSBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgfHwgbV9z
dHJpbmdWaWV3W21fb2Zmc2V0XSAhPSAnLycgfHwgbV9zdHJpbmdWaWV3W21fb2Zmc2V0ICsgMV0g
IT0gJyonKQorICAgICAgICByZXR1cm47CisKKyAgICBtX29mZnNldCArPSAyOworICAgIGRvIHsK
KyAgICAgICAgZm9yICggOyBtX29mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAmJiBtX3N0
cmluZ1ZpZXdbbV9vZmZzZXRdICE9ICcqJzsgKyttX29mZnNldCkgeyB9CisgICAgICAgIGlmICht
X29mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSkKKyAgICAgICAgICAgICsrbV9vZmZzZXQ7
CisgICAgICAgIGlmIChtX29mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAmJiBtX3N0cmlu
Z1ZpZXdbbV9vZmZzZXRdID09ICcvJykgeworICAgICAgICAgICAgKyttX29mZnNldDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAobV9vZmZzZXQgPCBtX3N0cmlu
Z1ZpZXcubGVuZ3RoKCkpOworfQorCisvLyBSZWd1bGFyIGV4cHJlc3Npb24gYXJlIHVubmVjZXNz
YXJ5OyB3ZSBzaG91bGRuJ3QgbmVlZCB0byBjb21waWxlIHRoZW0uCisKK3N0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IExleGVyOjpjb3JlRGVjaW1hbEludExpdGVyYWwodW5zaWduZWQgb2Zmc2V0KSBj
b25zdAoreworICAgIGlmIChvZmZzZXQgPj0gbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmIChtX3N0cmluZ1ZpZXdbb2Zmc2V0XSA9PSAn
MCcpCisgICAgICAgIHJldHVybiBvZmZzZXQgKyAxOworICAgIGlmIChtX3N0cmluZ1ZpZXdbb2Zm
c2V0XSA+PSAnMScgJiYgbV9zdHJpbmdWaWV3W29mZnNldF0gPD0gJzknKSB7CisgICAgICAgICsr
b2Zmc2V0OworICAgICAgICBmb3IgKCA7IG9mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAm
JiBtX3N0cmluZ1ZpZXdbb2Zmc2V0XSA+PSAnMCcgJiYgbV9zdHJpbmdWaWV3W29mZnNldF0gPD0g
JzknOyArK29mZnNldCkgeworICAgICAgICB9CisgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAg
fQorICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IExleGVyOjpkZWNpbWFsSW50TGl0ZXJhbCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAg
aWYgKG9mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAmJiBtX3N0cmluZ1ZpZXdbb2Zmc2V0
XSA9PSAnLScpCisgICAgICAgICsrb2Zmc2V0OworICAgIHJldHVybiBjb3JlRGVjaW1hbEludExp
dGVyYWwob2Zmc2V0KTsKK30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6OmRlY2lt
YWxVaW50TGl0ZXJhbCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAgYXV0byByZXN1bHQg
PSBjb3JlRGVjaW1hbEludExpdGVyYWwob2Zmc2V0KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoKnJlc3VsdCA8IG1fc3RyaW5nVmlldy5s
ZW5ndGgoKSAmJiBtX3N0cmluZ1ZpZXdbKnJlc3VsdF0gPT0gJ3UnKQorICAgICAgICByZXR1cm4g
KnJlc3VsdCArIDE7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIGlzSGV4YWRlY2ltYWxDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIHJl
dHVybiAoY2hhcmFjdGVyID49ICcwJyAmJiBjaGFyYWN0ZXIgPD0gJzknKQorICAgICAgICB8fCAo
Y2hhcmFjdGVyID49ICdhJyAmJiBjaGFyYWN0ZXIgPD0gJ2YnKQorICAgICAgICB8fCAoY2hhcmFj
dGVyID49ICdBJyAmJiBjaGFyYWN0ZXIgPD0gJ0YnKTsKK30KKworc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4gTGV4ZXI6OmNvcmVIZXhhZGVjaW1hbEludExpdGVyYWwodW5zaWduZWQgb2Zmc2V0KSBj
b25zdAoreworICAgIGlmIChvZmZzZXQgKyAxID49IG1fc3RyaW5nVmlldy5sZW5ndGgoKSB8fCBt
X3N0cmluZ1ZpZXdbb2Zmc2V0XSAhPSAnMCcgfHwgbV9zdHJpbmdWaWV3W29mZnNldCArIDFdICE9
ICd4JykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIG9mZnNldCArPSAyOwor
ICAgIGlmIChvZmZzZXQgPj0gbV9zdHJpbmdWaWV3Lmxlbmd0aCgpIHx8ICFpc0hleGFkZWNpbWFs
Q2hhcmFjdGVyKG1fc3RyaW5nVmlld1tvZmZzZXRdKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICArK29mZnNldDsKKyAgICBmb3IgKCA7IG9mZnNldCA8IG1fc3RyaW5nVmlldy5s
ZW5ndGgoKSAmJiBpc0hleGFkZWNpbWFsQ2hhcmFjdGVyKG1fc3RyaW5nVmlld1tvZmZzZXRdKTsg
KytvZmZzZXQpIHsKKyAgICB9CisgICAgcmV0dXJuIG9mZnNldDsKK30KKworc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gTGV4ZXI6OmhleGFkZWNpbWFsSW50TGl0ZXJhbCh1bnNpZ25lZCBvZmZzZXQp
IGNvbnN0Cit7CisgICAgaWYgKG9mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAmJiBtX3N0
cmluZ1ZpZXdbb2Zmc2V0XSA9PSAnLScpCisgICAgICAgICsrb2Zmc2V0OworICAgIHJldHVybiBj
b3JlSGV4YWRlY2ltYWxJbnRMaXRlcmFsKG9mZnNldCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IExleGVyOjpoZXhhZGVjaW1hbFVpbnRMaXRlcmFsKHVuc2lnbmVkIG9mZnNldCkgY29u
c3QKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGNvcmVIZXhhZGVjaW1hbEludExpdGVyYWwob2Zmc2V0
KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBp
ZiAoKnJlc3VsdCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAmJiBtX3N0cmluZ1ZpZXdbKnJlc3Vs
dF0gPT0gJ3UnKQorICAgICAgICByZXR1cm4gKnJlc3VsdCArIDE7CisgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKK30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6OmludExpdGVyYWwo
dW5zaWduZWQgb2Zmc2V0KSBjb25zdAoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGRlY2ltYWxJ
bnRMaXRlcmFsKG9mZnNldCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gZGVjaW1hbFVpbnRMaXRlcmFsKG9mZnNldCkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gaGV4YWRlY2ltYWxJbnRMaXRlcmFsKG9mZnNldCkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gaGV4YWRlY2lt
YWxVaW50TGl0ZXJhbChvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjpkaWdp
dCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAgaWYgKG9mZnNldCA8IG1fc3RyaW5nVmll
dy5sZW5ndGgoKSAmJiBtX3N0cmluZ1ZpZXdbb2Zmc2V0XSA+PSAnMCcgJiYgbV9zdHJpbmdWaWV3
W29mZnNldF0gPD0gJzknKQorICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMTsKKyAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworfQorCit1bnNpZ25lZCBMZXhlcjo6ZGlnaXRTdGFyKHVuc2lnbmVkIG9m
ZnNldCkgY29uc3QKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9
IGRpZ2l0KG9mZnNldCk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJu
IG9mZnNldDsKKyAgICAgICAgb2Zmc2V0ID0gKnJlc3VsdDsKKyAgICB9Cit9CisKK3N0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IExleGVyOjpjaGFyYWN0ZXIoY2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVk
IG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAob2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgp
ICYmIG1fc3RyaW5nVmlld1tvZmZzZXRdID09IGNoYXJhY3RlcikKKyAgICAgICAgcmV0dXJuIG9m
ZnNldCArIDE7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gTGV4ZXI6OmNvcmVGbG9hdExpdGVyYWxUeXBlMSh1bnNpZ25lZCBvZmZzZXQpIGNv
bnN0Cit7CisgICAgYXV0byByZXN1bHQgPSBkaWdpdChvZmZzZXQpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGF1dG8gcmVzdWx0MiA9IGRpZ2l0
U3RhcigqcmVzdWx0KTsKKyAgICBhdXRvIHJlc3VsdDMgPSBjaGFyYWN0ZXIoJy4nLCByZXN1bHQy
KTsKKyAgICBpZiAoIXJlc3VsdDMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
cmV0dXJuIGRpZ2l0U3RhcigqcmVzdWx0Myk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IExleGVyOjpjb3JlRmxvYXRMaXRlcmFsKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICBp
ZiAoYXV0byB0eXBlMSA9IGNvcmVGbG9hdExpdGVyYWxUeXBlMShvZmZzZXQpKQorICAgICAgICBy
ZXR1cm4gdHlwZTE7CisgICAgYXV0byByZXN1bHQgPSBkaWdpdFN0YXIob2Zmc2V0KTsKKyAgICBh
dXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJy4nLCByZXN1bHQpOworICAgIGlmICghcmVzdWx0MikK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBhdXRvIHJlc3VsdDMgPSBkaWdpdCgq
cmVzdWx0Mik7CisgICAgaWYgKCFyZXN1bHQzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIHJldHVybiBkaWdpdFN0YXIoKnJlc3VsdDMpOworfQorCitzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBMZXhlcjo6ZmxvYXRMaXRlcmFsKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAg
ICBpZiAob2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpICYmIG1fc3RyaW5nVmlld1tvZmZz
ZXRdID09ICctJykKKyAgICAgICAgKytvZmZzZXQ7CisgICAgYXV0byByZXN1bHQgPSBjb3JlRmxv
YXRMaXRlcmFsKG9mZnNldCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgb2Zmc2V0ID0gKnJlc3VsdDsKKyAgICBpZiAob2Zmc2V0IDwgbV9zdHJp
bmdWaWV3Lmxlbmd0aCgpICYmIChtX3N0cmluZ1ZpZXdbb2Zmc2V0XSA9PSAnZicgfHwgbV9zdHJp
bmdWaWV3W29mZnNldF0gPT0gJ2QnKSkKKyAgICAgICAgKytvZmZzZXQ7CisgICAgcmV0dXJuIG9m
ZnNldDsKK30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6OnF1YWxpZmllcih1bnNp
Z25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5nKCJub2lu
dGVycG9sYXRpb24iLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChh
dXRvIHJlc3VsdCA9IHN0cmluZygibm9wZXJzcGVjdGl2ZSIsIG9mZnNldCkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5nKCJ1bmlmb3JtIiwgb2Zm
c2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJp
bmcoImNlbnRyb2lkIiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAo
YXV0byByZXN1bHQgPSBzdHJpbmcoInNhbXBsZSIsIG9mZnNldCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4gTGV4ZXI6OnNlbWFudGljKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAo
YXV0byByZXN1bHQgPSBzdHJpbmcoIlNWX0luc3RhbmNlSUQiLCBvZmZzZXQpKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiU1ZfVmVydGV4SUQi
LCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9
IHN0cmluZygiUFNJWkUiLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlm
IChhdXRvIHJlc3VsdCA9IHN0cmluZygiU1ZfUG9zaXRpb24iLCBvZmZzZXQpKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiU1ZfSXNGcm9udEZh
Y2UiLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IHN0cmluZygiU1ZfU2FtcGxlSW5kZXgiLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiU1ZfSW5uZXJDb3ZlcmFnZSIsIG9m
ZnNldCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gc3Ry
aW5nKCJTVl9UYXJnZXQiLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gY29yZURlY2ltYWxJbnRM
aXRlcmFsKCpyZXN1bHQpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiU1ZfRGVwdGgi
LCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9
IHN0cmluZygiU1ZfQ292ZXJhZ2UiLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiU1ZfRGlzcGF0Y2hUaHJlYWRJRCIsIG9mZnNl
dCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5n
KCJTVl9Hcm91cElEIiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAo
YXV0byByZXN1bHQgPSBzdHJpbmcoIlNWX0dyb3VwSW5kZXgiLCBvZmZzZXQpKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiU1ZfR3JvdXBUaHJl
YWRJRCIsIG9mZnNldCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gc3RyaW5nKCJhdHRyaWJ1dGUiLCBvZmZzZXQpKSB7CisgICAgICAgIGlmICgocmVzdWx0
ID0gY2hhcmFjdGVyKCcoJywgKnJlc3VsdCkpKSB7CisgICAgICAgICAgICBpZiAoKHJlc3VsdCA9
IGNvcmVEZWNpbWFsSW50TGl0ZXJhbCgqcmVzdWx0KSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGNoYXJhY3RlcignKScsICpyZXN1bHQpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChhdXRv
IHJlc3VsdCA9IHN0cmluZygicmVnaXN0ZXIiLCBvZmZzZXQpKSB7CisgICAgICAgIGlmICgocmVz
dWx0ID0gY2hhcmFjdGVyKCcoJywgKnJlc3VsdCkpKSB7CisgICAgICAgICAgICBpZiAoKHJlc3Vs
dCA9IGFueUNoYXJhY3RlcigidXRicyIsICpyZXN1bHQpKSkgeworICAgICAgICAgICAgICAgIGlm
ICgocmVzdWx0ID0gY29yZURlY2ltYWxJbnRMaXRlcmFsKCpyZXN1bHQpKSkgeworICAgICAgICAg
ICAgICAgICAgICBvZmZzZXQgPSAqcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpZiAoKHJl
c3VsdCA9IGNoYXJhY3RlcignLCcsIG9mZnNldCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoKHJlc3VsdCA9IHN0cmluZygic3BhY2UiLCAqcmVzdWx0KSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKHJlc3VsdCA9IGNvcmVEZWNpbWFsSW50TGl0ZXJhbCgqcmVz
dWx0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXIo
JyknLCAqcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcignKScsIG9mZnNldCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChhdXRv
IHJlc3VsdCA9IHN0cmluZygic3BlY2lhbGl6ZWQiLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IExleGVyOjpudW10aHJlYWRzKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICBh
dXRvIHJlc3VsdCA9IHN0cmluZygibnVtdGhyZWFkcyIsIG9mZnNldCk7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmVzdWx0ID0gY2hhcmFjdGVy
KCcoJywgKnJlc3VsdCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgcmVzdWx0ID0gY29yZURlY2ltYWxJbnRMaXRlcmFsKCpyZXN1bHQpOworICAg
IGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJlc3VsdCA9
IGNoYXJhY3RlcignLCcsICpyZXN1bHQpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJyAnLCAq
cmVzdWx0KSkKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0MjsKKyAgICByZXN1bHQgPSBjb3JlRGVj
aW1hbEludExpdGVyYWwoKnJlc3VsdCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgcmVzdWx0ID0gY2hhcmFjdGVyKCcsJywgKnJlc3VsdCk7Cisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGF1
dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignICcsICpyZXN1bHQpKQorICAgICAgICByZXN1bHQgPSBy
ZXN1bHQyOworICAgIHJlc3VsdCA9IGNvcmVEZWNpbWFsSW50TGl0ZXJhbCgqcmVzdWx0KTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4g
Y2hhcmFjdGVyKCcpJywgKnJlc3VsdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExl
eGVyOjp2YWxpZElkZW50aWZpZXIodW5zaWduZWQgb2Zmc2V0KSBjb25zdAoreworICAgIGlmIChv
ZmZzZXQgPj0gbV9zdHJpbmdWaWV3Lmxlbmd0aCgpCisgICAgICAgIHx8ICEoKG1fc3RyaW5nVmll
d1tvZmZzZXRdID49ICdhJyAmJiBtX3N0cmluZ1ZpZXdbb2Zmc2V0XSA8PSAneicpCisgICAgICAg
ICAgICB8fCAobV9zdHJpbmdWaWV3W29mZnNldF0gPj0gJ0EnICYmIG1fc3RyaW5nVmlld1tvZmZz
ZXRdIDw9ICdaJykKKyAgICAgICAgICAgIHx8IChtX3N0cmluZ1ZpZXdbb2Zmc2V0XSA9PSAnXycp
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICArK29mZnNldDsKKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICBpZiAob2Zmc2V0ID49IG1fc3RyaW5nVmlldy5sZW5ndGgoKQor
ICAgICAgICAgICAgfHwgISgobV9zdHJpbmdWaWV3W29mZnNldF0gPj0gJ2EnICYmIG1fc3RyaW5n
Vmlld1tvZmZzZXRdIDw9ICd6JykKKyAgICAgICAgICAgICAgICB8fCAobV9zdHJpbmdWaWV3W29m
ZnNldF0gPj0gJ0EnICYmIG1fc3RyaW5nVmlld1tvZmZzZXRdIDw9ICdaJykKKyAgICAgICAgICAg
ICAgICB8fCAobV9zdHJpbmdWaWV3W29mZnNldF0gPj0gJzAnICYmIG1fc3RyaW5nVmlld1tvZmZz
ZXRdIDw9ICc5JykKKyAgICAgICAgICAgICAgICB8fCAobV9zdHJpbmdWaWV3W29mZnNldF0gPT0g
J18nKSkpCisgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgICAgICArK29mZnNldDsKKyAg
ICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjppZGVudGlmaWVyKHVuc2ln
bmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gdmFsaWRJZGVudGlmaWVyKG9mZnNldCk7
Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjpvcGVyYXRvck5hbWUodW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdAoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygib3BlcmF0
b3ImLiIsIG9mZnNldCkpCisgICAgICAgIHJldHVybiB2YWxpZElkZW50aWZpZXIoKnJlc3VsdCk7
CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5nKCJvcGVyYXRvci4iLCBvZmZzZXQpKSB7Cisg
ICAgICAgIGlmICgocmVzdWx0ID0gdmFsaWRJZGVudGlmaWVyKCpyZXN1bHQpKSkgeworICAgICAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignPScsICpyZXN1bHQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQyOworICAgICAgICAgICAgcmV0dXJuICpyZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5nKCJvcGVyYXRvciIs
IG9mZnNldCkpIHsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiPj4iLCAqcmVz
dWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOworICAgICAgICBpZiAoYXV0byByZXN1
bHQyID0gc3RyaW5nKCI8PCIsICpyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7
CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIisrIiwgKnJlc3VsdCkpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmlu
ZygiLS0iLCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOworICAgICAgICBp
ZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCIrIiwgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0MjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiLSIsICpyZXN1
bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7CisgICAgICAgIGlmIChhdXRvIHJlc3Vs
dDIgPSBzdHJpbmcoIioiLCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwor
ICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCIvIiwgKnJlc3VsdCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygi
JSIsICpyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7CisgICAgICAgIGlmIChh
dXRvIHJlc3VsdDIgPSBzdHJpbmcoIiYmIiwgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0MjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygifHwiLCAqcmVzdWx0
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOworICAgICAgICBpZiAoYXV0byByZXN1bHQy
ID0gc3RyaW5nKCImW10iLCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwor
ICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCImIiwgKnJlc3VsdCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygi
XiIsICpyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7CisgICAgICAgIGlmIChh
dXRvIHJlc3VsdDIgPSBzdHJpbmcoInwiLCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQyOworICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCI+PSIsICpyZXN1bHQp
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIg
PSBzdHJpbmcoIjw9IiwgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKKyAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiPT0iLCAqcmVzdWx0KSkKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQyOworICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCI8
IiwgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICAgICAgaWYgKGF1
dG8gcmVzdWx0MiA9IHN0cmluZygiPiIsICpyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDI7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIiEiLCAqcmVzdWx0KSkK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOworICAgICAgICBpZiAoYXV0byByZXN1bHQyID0g
c3RyaW5nKCJ+IiwgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICAg
ICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiW109IiwgKnJlc3VsdCkpCisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0MjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiW10i
LCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOworICAgIH0KKyAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjVjMGMy
NmI5MGE5NjFiNTBkMDVjMTExZTMwNzMxMzEyM2IzMzQwYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuaApAQCAtMCwwICsx
LDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBMZXhlciB7CitwdWJs
aWM6CisgICAgTGV4ZXIoU3RyaW5nVmlldyBzdHJpbmdWaWV3KQorICAgICAgICA6IG1fc3RyaW5n
VmlldyhzdHJpbmdWaWV3KQorICAgIHsKKyAgICAgICAgc2tpcFdoaXRlc3BhY2VBbmRDb21tZW50
cygpOworICAgIH0KKworICAgIHN0cnVjdCBUb2tlbiB7CisgICAgICAgIFN0cmluZ1ZpZXcgc3Ry
aW5nVmlldzsKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgICAgIEludExpdGVy
YWwsCisgICAgICAgICAgICBGbG9hdExpdGVyYWwsCisgICAgICAgICAgICBTdHJ1Y3QsCisgICAg
ICAgICAgICBUeXBlZGVmLAorICAgICAgICAgICAgRW51bSwKKyAgICAgICAgICAgIE9wZXJhdG9y
LAorICAgICAgICAgICAgSWYsCisgICAgICAgICAgICBFbHNlLAorICAgICAgICAgICAgQ29udGlu
dWUsCisgICAgICAgICAgICBCcmVhaywKKyAgICAgICAgICAgIFN3aXRjaCwKKyAgICAgICAgICAg
IENhc2UsCisgICAgICAgICAgICBEZWZhdWx0LAorICAgICAgICAgICAgRmFsbHRocm91Z2gsCisg
ICAgICAgICAgICBGb3IsCisgICAgICAgICAgICBXaGlsZSwKKyAgICAgICAgICAgIERvLAorICAg
ICAgICAgICAgUmV0dXJuLAorICAgICAgICAgICAgVHJhcCwKKyAgICAgICAgICAgIE51bGwsCisg
ICAgICAgICAgICBUcnVlLAorICAgICAgICAgICAgRmFsc2UsCisgICAgICAgICAgICBDb25zdGFu
dCwKKyAgICAgICAgICAgIERldmljZSwKKyAgICAgICAgICAgIFRocmVhZGdyb3VwLAorICAgICAg
ICAgICAgVGhyZWFkLAorICAgICAgICAgICAgU3BhY2UsCisgICAgICAgICAgICBWZXJ0ZXgsCisg
ICAgICAgICAgICBGcmFnbWVudCwKKyAgICAgICAgICAgIENvbXB1dGUsCisgICAgICAgICAgICBO
dW10aHJlYWRzLAorICAgICAgICAgICAgTmF0aXZlLAorICAgICAgICAgICAgUmVzdHJpY3RlZCwK
KyAgICAgICAgICAgIFVuZGVyc2NvcmUsCisgICAgICAgICAgICBBdXRvLAorICAgICAgICAgICAg
UHJvdG9jb2wsCisgICAgICAgICAgICBDb25zdCwKKyAgICAgICAgICAgIFN0YXRpYywKKyAgICAg
ICAgICAgIFF1YWxpZmllciwKKyAgICAgICAgICAgIFNlbWFudGljLAorICAgICAgICAgICAgTnVt
dGhyZWFkc1NlbWFudGljLAorICAgICAgICAgICAgSWRlbnRpZmllciwKKyAgICAgICAgICAgIE9w
ZXJhdG9yTmFtZQorICAgICAgICB9IHR5cGU7CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8
VG9rZW4+IGNvbnN1bWVUb2tlbigpCisgICAgeworICAgICAgICBpZiAoIW1fc3RhY2suaXNFbXB0
eSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgcmV0
dXJuIGNvbnN1bWVUb2tlbkZyb21TdHJlYW0oKTsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFs
PFRva2VuPiBjb25zdW1lVG9rZW5Gcm9tU3RyZWFtKCk7CisKKyAgICB2b2lkIHVuY29uc3VtZVRv
a2VuKFRva2VuJiYgdG9rZW4pCisgICAgeworICAgICAgICBtX3N0YWNrLmFwcGVuZChXVEZNb3Zl
KHRva2VuKSk7CisgICAgfQorCisgICAgYm9vbCBpc0Z1bGx5Q29uc3VtZWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG1fc3RyaW5nVmlldy5sZW5ndGgoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBza2lwV2hpdGVzcGFjZUFuZENvbW1lbnRzKCk7Cisg
ICAgdm9pZCBza2lwV2hpdGVzcGFjZSgpOworICAgIHZvaWQgc2tpcExpbmVDb21tZW50KCk7Cisg
ICAgdm9pZCBza2lwTG9uZ0NvbW1lbnQoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IGNvcmVEZWNpbWFsSW50TGl0ZXJhbCh1bnNpZ25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gZGVjaW1hbEludExpdGVyYWwodW5zaWduZWQpIGNvbnN0OworICAgIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IGRlY2ltYWxVaW50TGl0ZXJhbCh1bnNpZ25lZCkgY29uc3Q7Cisg
ICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY29yZUhleGFkZWNpbWFsSW50TGl0ZXJhbCh1bnNp
Z25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gaGV4YWRlY2ltYWxJbnRM
aXRlcmFsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBoZXhh
ZGVjaW1hbFVpbnRMaXRlcmFsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBpbnRMaXRlcmFsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBkaWdpdCh1bnNpZ25lZCkgY29uc3Q7CisgICAgdW5zaWduZWQgZGlnaXRTdGFyKHVu
c2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjaGFyYWN0ZXIoY2hh
ciwgdW5zaWduZWQpIGNvbnN0OworICAgIHRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gYW55Q2hhcmFjdGVyKGNvbnN0IGNoYXIgKCZzdHJpbmcpW2xlbmd0
aF0sIHVuc2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb3JlRmxv
YXRMaXRlcmFsVHlwZTEodW5zaWduZWQpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IGNvcmVGbG9hdExpdGVyYWwodW5zaWduZWQpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IGZsb2F0TGl0ZXJhbCh1bnNpZ25lZCkgY29uc3Q7CisgICAgdGVtcGxhdGU8dW5z
aWduZWQgbGVuZ3RoPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdHJpbmcoY29uc3QgY2hhciAo
JnN0cmluZylbbGVuZ3RoXSwgdW5zaWduZWQpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHF1YWxpZmllcih1bnNpZ25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4gc2VtYW50aWModW5zaWduZWQpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IG51bXRocmVhZHModW5zaWduZWQpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHZhbGlkSWRlbnRpZmllcih1bnNpZ25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gaWRlbnRpZmllcih1bnNpZ25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gb3BlcmF0b3JOYW1lKHVuc2lnbmVkKSBjb25zdDsKKworICAgIGNvbnN0IFN0cmlu
Z1ZpZXcgbV9zdHJpbmdWaWV3OworICAgIFZlY3RvcjxUb2tlbj4gbV9zdGFjazsKKyAgICB1bnNp
Z25lZCBtX29mZnNldCB7IDAgfTsKK307CisKK3RlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6OnN0cmluZyhjb25zdCBjaGFyICgmc3RyaW5nKVts
ZW5ndGhdLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aCAtIDE7ICsraSkgeworICAgICAgICBpZiAoaSA+PSBtX3N0cmluZ1ZpZXcu
bGVuZ3RoKCkgfHwgbV9zdHJpbmdWaWV3W2ldICE9IHN0cmluZ1tpXSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorICAgIHJldHVybiBvZmZzZXQgKyBsZW5ndGggLSAx
OworfQorCit0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IExleGVyOjphbnlDaGFyYWN0ZXIoY29uc3QgY2hhciAoJnN0cmluZylbbGVuZ3RoXSwgdW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdAoreworICAgIGlmIChvZmZzZXQgPj0gbV9zdHJpbmdWaWV3Lmxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGggLSAxOyArK2kpIHsKKyAgICAgICAgaWYgKG1fc3RyaW5nVmlld1tvZmZz
ZXRdID09IHN0cmluZ1tpXSkKKyAgICAgICAgICAgIHJldHVybiBvZmZzZXQgKyAxOworICAgIH0K
KyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CmluZGV4IGU3NDVjZDVhMDA5ZjA1NTA0ZDhjYjI1NTJhMTVlZjliOTU3ZTAyNjIuLjI4NjA0
NTE5NDlmOTlhYTQzZWZjNWY2YmUyYmIwYWY2Njk3MDc3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0z
MDEsNiArMzAxLDcgQEAgTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAK
IE1vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAK
IAogTW9kdWxlcy93ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAorTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVS5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dlYkdQVUFkYXB0ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kQnVmZmVy
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDlmNGM3NDc3Y2I3ZTZmMzliMWM4MDRjMmY3ZDU1MmY1NTkzODQxODguLmM3MWU1
Zjg4OGFmNjI3ODc5YTVmYjMyNDg5ZTNmZDNlYWI0ZjEzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMTk0LDYgKzEzMTk0
LDggQEAKIAkJQzExQTlFRDIyMTQwNTc4QjAwQ0ZCMjBBIC8qIFN3aXRjaGluZ0dQVUNsaWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGllbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMUUxRDIzNTIwM0RGMTU0MDA1ODQ2NjUgLyogU2NyZWVuUHJv
cGVydGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JlZW5Qcm9wZXJ0aWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyMDE1QzA5MUJFNkZFMkMwMDgyMjM4OSAvKiBGb250VmFyaWFu
dEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFZhcmlhbnRCdWlsZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMTBFOTExMjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExl
eGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTGV4ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMjEwRTkxMjIxQjRCRDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyMURGMkU3MUQ5RTRFOTkwMEY1QjI0QyAvKiBDU1NGb250VmFyaWF0aW9uVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRm9udFZhcmlhdGlvblZh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxREYyRTgxRDlFNEU5OTAw
RjVCMjRDIC8qIENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NGb250VmFyaWF0aW9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzI0NThFNjExRkU4OTc5RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVUZXh0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNTEzMyw2ICsyNTEzNSwxNSBAQAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNl
c1RhYnMgPSAwOwogCQl9OworCQlDMjEwRTkwRDIxQjRCQ0E0MDBCN0Y4M0QgLyogV0hMU0wgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUMyMTBFOTExMjFC
NEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmNwcCAqLywKKwkJCQlDMjEwRTkxMjIxQjRCRDEw
MDBCN0Y4M0QgLyogV0hMU0xMZXhlci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBXSExTTDsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUM5NkY1RUJGMUI1ODcyMjYwMDkxRUE5
RCAvKiBtZWRpYXNlc3Npb24gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKApAQCAtMjU0NzUsNiArMjU0ODYsNyBAQAogCQlEMDBGNTkzRTIxNkVDQzQzMDAwRDcxREIg
Lyogd2ViZ3B1ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQlDMjEwRTkwRDIxQjRCQ0E0MDBCN0Y4M0QgLyogV0hMU0wgKi8sCiAJCQkJRDAwRjU5NDEyMTZF
Q0M3QTAwMEQ3MURCIC8qIERPTVdpbmRvd1dlYkdQVS5jcHAgKi8sCiAJCQkJRDAwRjU5NDAyMTZF
Q0M3QTAwMEQ3MURCIC8qIERPTVdpbmRvd1dlYkdQVS5oICovLAogCQkJCUQwMEY1OTQyMjE2RUND
N0EwMDBENzFEQiAvKiBET01XaW5kb3dXZWJHUFUuaWRsICovLApAQCAtMjc5ODgsOCArMjgwMDAs
OCBAQAogCQkJCUNEMzE4NjIzMTk5RjFFMkEwMDMwQTBGNyAvKiBDRE1Qcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREU1OTU5NzFCRjI2RTIxMDBBMUNCRTgg
LyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUZB
OTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRlSW5mby5oIGluIEhlYWRlcnMgKi8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkxQjhGMEI1MjE5NTNENjUwMDBDMkIw
MCAvKiBDZXJ0aWZpY2F0ZUluZm9CYXNlLmggaW4gSGVhZGVycyAqLywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNp
b25EYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyog
Q2VydGlmaWNhdGVJbmZvQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUzNkZEMTUxNkM3ODI2
NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JD
NjlERDE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEMzE1RkZGMTJCMDI2NzYwMEMxQTM1OSAvKiBDaGFubmVsTWVyZ2VyTm9kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMDIxMkIwMjY3NjAwQzFBMzU5IC8qIENoYW5uZWxT
cGxpdHRlck5vZGUuaCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357617</attachid>
            <date>2018-12-18 14:55:38 -0800</date>
            <delta_ts>2018-12-19 15:27:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192294-20181218145537.patch</filename>
            <type>text/plain</type>
            <size>43752</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVmYWVjZGJlYWM5ZTg3
MDE3NDQzNmYyM2UwMWRkZjczNDgwNjEyMi4uZjQwNTM0NGI0NGY4NTc5MTFiZjFmMzY1ZDIwZjZh
ODA1YzQ1NDVkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE4LTEyLTE4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBB
ZGQgYSBoYW5kd3JpdHRlbiBsZXhlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkyMjk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBpcyBpbmZyYXN0cnVjdHVyZSBuZWNlc3NhcnkgZm9yIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTIzNTUuIFRoZQorICAgICAgICBp
bXBsZW1lbnRhdGlvbiBtYXRjaGVzIHRoZSBsZXhpbmcgcnVsZXMgaW4gdGhlIHNwZWMgKHNwZWNp
ZmljYWxseSwgdGhlIHJ1bGVzIHRoYXQgc3RhcnQKKyAgICAgICAgd2l0aCBhbiB1cHBlcmNhc2Ug
bGV0dGVyKS4gVGhlIHNwZWMgaXMgYXQKKyAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2dwdXdl
Yi9XSExTTC9ibG9iL21hc3Rlci9TcGVjL1dITFNMLmc0LgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBtb2RpZmllcyB0aGUgbGV4ZXIgYWNjb3JkaW5nIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9n
cHV3ZWIvV0hMU0wvcHVsbC8yODMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhl
IGxleGVyIGlzbid0IGhvb2tlZCB1cCB5ZXQ7IHRoZXJlIGFyZSB0ZXN0cyBpbiB0aGUgcGFyc2Vy
LAorICAgICAgICBvbmNlIHRoYXQgZ2V0cyBjb21taXR0ZWQuCisKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TGV4ZXI6OlRva2VuOjp0eXBlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TGV4ZXI6OnJlY29nbml6ZUtleXdvcmQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVy
Ojpjb25zdW1lVG9rZW5Gcm9tU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhl
cjo6c2tpcFdoaXRlc3BhY2VBbmRDb21tZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
aXNXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjppc05ld2xpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpza2lwV2hpdGVzcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TGV4ZXI6OnNraXBMaW5lQ29tbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TGV4ZXI6OnNraXBMb25nQ29tbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TGV4ZXI6OmNvcmVEZWNpbWFsSW50TGl0ZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TGV4ZXI6OmRlY2ltYWxJbnRMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpMZXhlcjo6ZGVjaW1hbFVpbnRMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjppc0hleGFkZWNpbWFsQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpMZXhlcjo6Y29yZUhleGFkZWNpbWFsSW50TGl0ZXJhbCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmhleGFkZWNpbWFsSW50TGl0ZXJhbCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmhleGFkZWNpbWFsVWludExpdGVyYWwgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjppbnRMaXRlcmFsIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6dWludExpdGVyYWwgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpkaWdpdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TGV4ZXI6OmRpZ2l0U3RhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TGV4ZXI6OmNoYXJhY3RlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TGV4ZXI6OmNvcmVGbG9hdExpdGVyYWxUeXBlMSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TGV4ZXI6OmNvcmVGbG9hdExpdGVyYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkxleGVyOjpmbG9hdExpdGVyYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkxleGVyOjp2YWxpZElkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkxleGVyOjppZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpM
ZXhlcjo6b3BlcmF0b3JOYW1lIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTExleGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpM
ZXhlcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmNvbnN1bWVUb2tlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OnVuY29uc3VtZVRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpMZXhlcjo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkxleGVyOjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6
OmlzRnVsbHlDb25zdW1lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6
OmVycm9yU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6c3RyaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6YW55Q2hhcmFjdGVyIGNvbnN0
KToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisKIDIwMTgtMTItMTggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgU29tZSBpT1MgYXBwIGNyYXNoIGluIEZyYW1lTG9hZGVyOjpjaGVj
a0NvbXBsZXRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xMZXhlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTExleGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzA4ZTgxNDZhMGE2NmVmOGFhYTU1MTViYTRjOWNl
MjQ0ZTI4N2I2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKQEAgLTAsMCArMSw4MjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXSExTTExleGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIFdITFNMIHsKKworY29uc3QgY2hhciogTGV4ZXI6OlRva2VuOjp0eXBlTmFtZShUeXBlIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlOjpJbnRMaXRlcmFsOgor
ICAgICAgICByZXR1cm4gImludCBsaXRlcmFsIjsKKyAgICBjYXNlIFR5cGU6OlVpbnRMaXRlcmFs
OgorICAgICAgICByZXR1cm4gInVpbnQgbGl0ZXJhbCI7CisgICAgY2FzZSBUeXBlOjpGbG9hdExp
dGVyYWw6CisgICAgICAgIHJldHVybiAiZmxvYXQgbGl0ZXJhbCI7CisgICAgY2FzZSBUeXBlOjpT
dHJ1Y3Q6CisgICAgICAgIHJldHVybiAic3RydWN0IjsKKyAgICBjYXNlIFR5cGU6OlR5cGVkZWY6
CisgICAgICAgIHJldHVybiAidHlwZWRlZiI7CisgICAgY2FzZSBUeXBlOjpFbnVtOgorICAgICAg
ICByZXR1cm4gImVudW0iOworICAgIGNhc2UgVHlwZTo6T3BlcmF0b3I6CisgICAgICAgIHJldHVy
biAib3BlcmF0b3IiOworICAgIGNhc2UgVHlwZTo6SWY6CisgICAgICAgIHJldHVybiAiaWYiOwor
ICAgIGNhc2UgVHlwZTo6RWxzZToKKyAgICAgICAgcmV0dXJuICJlbHNlIjsKKyAgICBjYXNlIFR5
cGU6OkNvbnRpbnVlOgorICAgICAgICByZXR1cm4gImNvbnRpbnVlIjsKKyAgICBjYXNlIFR5cGU6
OkJyZWFrOgorICAgICAgICByZXR1cm4gImJyZWFrIjsKKyAgICBjYXNlIFR5cGU6OlN3aXRjaDoK
KyAgICAgICAgcmV0dXJuICJzd2l0Y2giOworICAgIGNhc2UgVHlwZTo6Q2FzZToKKyAgICAgICAg
cmV0dXJuICJjYXNlIjsKKyAgICBjYXNlIFR5cGU6OkRlZmF1bHQ6CisgICAgICAgIHJldHVybiAi
ZGVmYXVsdCI7CisgICAgY2FzZSBUeXBlOjpGYWxsdGhyb3VnaDoKKyAgICAgICAgcmV0dXJuICJm
YWxsdGhyb3VnaCI7CisgICAgY2FzZSBUeXBlOjpGb3I6CisgICAgICAgIHJldHVybiAiZm9yIjsK
KyAgICBjYXNlIFR5cGU6OldoaWxlOgorICAgICAgICByZXR1cm4gIndoaWxlIjsKKyAgICBjYXNl
IFR5cGU6OkRvOgorICAgICAgICByZXR1cm4gImRvIjsKKyAgICBjYXNlIFR5cGU6OlJldHVybjoK
KyAgICAgICAgcmV0dXJuICJyZXR1cm4iOworICAgIGNhc2UgVHlwZTo6VHJhcDoKKyAgICAgICAg
cmV0dXJuICJ0cmFwIjsKKyAgICBjYXNlIFR5cGU6Ok51bGw6CisgICAgICAgIHJldHVybiAibnVs
bCI7CisgICAgY2FzZSBUeXBlOjpUcnVlOgorICAgICAgICByZXR1cm4gInRydWUiOworICAgIGNh
c2UgVHlwZTo6RmFsc2U6CisgICAgICAgIHJldHVybiAiZmFsc2UiOworICAgIGNhc2UgVHlwZTo6
Q29uc3RhbnQ6CisgICAgICAgIHJldHVybiAiY29uc3RhbnQiOworICAgIGNhc2UgVHlwZTo6RGV2
aWNlOgorICAgICAgICByZXR1cm4gImRldmljZSI7CisgICAgY2FzZSBUeXBlOjpUaHJlYWRncm91
cDoKKyAgICAgICAgcmV0dXJuICJ0aHJlYWRncm91cCI7CisgICAgY2FzZSBUeXBlOjpUaHJlYWQ6
CisgICAgICAgIHJldHVybiAidGhyZWFkIjsKKyAgICBjYXNlIFR5cGU6OlNwYWNlOgorICAgICAg
ICByZXR1cm4gInNwYWNlIjsKKyAgICBjYXNlIFR5cGU6OlZlcnRleDoKKyAgICAgICAgcmV0dXJu
ICJ2ZXJ0ZXgiOworICAgIGNhc2UgVHlwZTo6RnJhZ21lbnQ6CisgICAgICAgIHJldHVybiAiZnJh
Z21lbnQiOworICAgIGNhc2UgVHlwZTo6Q29tcHV0ZToKKyAgICAgICAgcmV0dXJuICJjb21wdXRl
IjsKKyAgICBjYXNlIFR5cGU6Ok51bVRocmVhZHM6CisgICAgICAgIHJldHVybiAibnVtdGhyZWFk
cyI7CisgICAgY2FzZSBUeXBlOjpTVkluc3RhbmNlSUQ6CisgICAgICAgIHJldHVybiAiU1ZfSW5z
dGFuY2VJRCI7CisgICAgY2FzZSBUeXBlOjpTVlZlcnRleElEOgorICAgICAgICByZXR1cm4gIlNW
X1ZlcnRleElEIjsKKyAgICBjYXNlIFR5cGU6OlBTaXplOgorICAgICAgICByZXR1cm4gIlBTSVpF
IjsKKyAgICBjYXNlIFR5cGU6OlNWUG9zaXRpb246CisgICAgICAgIHJldHVybiAiU1ZfUG9zaXRp
b24iOworICAgIGNhc2UgVHlwZTo6U1ZJc0Zyb250RmFjZToKKyAgICAgICAgcmV0dXJuICJTVl9J
c0Zyb250RmFjZSI7CisgICAgY2FzZSBUeXBlOjpTVlNhbXBsZUluZGV4OgorICAgICAgICByZXR1
cm4gIlNWX1NhbXBsZUluZGV4IjsKKyAgICBjYXNlIFR5cGU6OlNWSW5uZXJDb3ZlcmFnZToKKyAg
ICAgICAgcmV0dXJuICJTVl9Jbm5lckNvdmVyYWdlIjsKKyAgICBjYXNlIFR5cGU6OlNWVGFyZ2V0
OgorICAgICAgICByZXR1cm4gIlNWX1RhcmdldCI7CisgICAgY2FzZSBUeXBlOjpTVkRlcHRoOgor
ICAgICAgICByZXR1cm4gIlNWX0RlcHRoIjsKKyAgICBjYXNlIFR5cGU6OlNWQ292ZXJhZ2U6Cisg
ICAgICAgIHJldHVybiAiU1ZfQ292ZXJhZ2UiOworICAgIGNhc2UgVHlwZTo6U1ZEaXNwYXRjaFRo
cmVhZElEOgorICAgICAgICByZXR1cm4gIlNWX0Rpc3BhdGNoVGhyZWFkSUQiOworICAgIGNhc2Ug
VHlwZTo6U1ZHcm91cElEOgorICAgICAgICByZXR1cm4gIlNWX0dyb3VwSUQiOworICAgIGNhc2Ug
VHlwZTo6U1ZHcm91cEluZGV4OgorICAgICAgICByZXR1cm4gIlNWX0dyb3VwSW5kZXgiOworICAg
IGNhc2UgVHlwZTo6U1ZHcm91cFRocmVhZElEOgorICAgICAgICByZXR1cm4gIlNWX0dyb3VwVGhy
ZWFkSUQiOworICAgIGNhc2UgVHlwZTo6QXR0cmlidXRlOgorICAgICAgICByZXR1cm4gIlNWX0F0
dHJpYnV0ZSI7CisgICAgY2FzZSBUeXBlOjpSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuICJyZWdp
c3RlciI7CisgICAgY2FzZSBUeXBlOjpTcGVjaWFsaXplZDoKKyAgICAgICAgcmV0dXJuICJzcGVj
aWFsaXplZCI7CisgICAgY2FzZSBUeXBlOjpOYXRpdmU6CisgICAgICAgIHJldHVybiAibmF0aXZl
IjsKKyAgICBjYXNlIFR5cGU6OlJlc3RyaWN0ZWQ6CisgICAgICAgIHJldHVybiAicmVzdHJpY3Rl
ZCI7CisgICAgY2FzZSBUeXBlOjpVbmRlcnNjb3JlOgorICAgICAgICByZXR1cm4gIl8iOworICAg
IGNhc2UgVHlwZTo6QXV0bzoKKyAgICAgICAgcmV0dXJuICJhdXRvIjsKKyAgICBjYXNlIFR5cGU6
OlByb3RvY29sOgorICAgICAgICByZXR1cm4gInByb3RvY29sIjsKKyAgICBjYXNlIFR5cGU6OkNv
bnN0OgorICAgICAgICByZXR1cm4gImNvbnN0IjsKKyAgICBjYXNlIFR5cGU6OlN0YXRpYzoKKyAg
ICAgICAgcmV0dXJuICJzdGF0aWMiOworICAgIGNhc2UgVHlwZTo6UXVhbGlmaWVyOgorICAgICAg
ICByZXR1cm4gInF1YWxpZmllciI7CisgICAgY2FzZSBUeXBlOjpJZGVudGlmaWVyOgorICAgICAg
ICByZXR1cm4gImlkZW50aWZpZXIiOworICAgIGNhc2UgVHlwZTo6T3BlcmF0b3JOYW1lOgorICAg
ICAgICByZXR1cm4gIm9wZXJhdG9yIG5hbWUiOworICAgIGNhc2UgVHlwZTo6RXF1YWxzU2lnbjoK
KyAgICAgICAgcmV0dXJuICI9IjsKKyAgICBjYXNlIFR5cGU6OlNlbWljb2xvbjoKKyAgICAgICAg
cmV0dXJuICI7IjsKKyAgICBjYXNlIFR5cGU6OkxlZnRDdXJseUJyYWNrZXQ6CisgICAgICAgIHJl
dHVybiAieyI7CisgICAgY2FzZSBUeXBlOjpSaWdodEN1cmx5QnJhY2tldDoKKyAgICAgICAgcmV0
dXJuICJ9IjsKKyAgICBjYXNlIFR5cGU6OkNvbG9uOgorICAgICAgICByZXR1cm4gIjoiOworICAg
IGNhc2UgVHlwZTo6Q29tbWE6CisgICAgICAgIHJldHVybiAiLCI7CisgICAgY2FzZSBUeXBlOjpM
ZWZ0UGFyZW50aGVzaXM6CisgICAgICAgIHJldHVybiAiKCI7CisgICAgY2FzZSBUeXBlOjpSaWdo
dFBhcmVudGhlc2lzOgorICAgICAgICByZXR1cm4gIikiOworICAgIGNhc2UgVHlwZTo6U3F1YXJl
QnJhY2tldFBhaXI6CisgICAgICAgIHJldHVybiAiW10iOworICAgIGNhc2UgVHlwZTo6TGVmdFNx
dWFyZUJyYWNrZXQ6CisgICAgICAgIHJldHVybiAiWyI7CisgICAgY2FzZSBUeXBlOjpSaWdodFNx
dWFyZUJyYWNrZXQ6CisgICAgICAgIHJldHVybiAiXSI7CisgICAgY2FzZSBUeXBlOjpTdGFyOgor
ICAgICAgICByZXR1cm4gIioiOworICAgIGNhc2UgVHlwZTo6TGVzc1RoYW5TaWduOgorICAgICAg
ICByZXR1cm4gIjwiOworICAgIGNhc2UgVHlwZTo6R3JlYXRlclRoYW5TaWduOgorICAgICAgICBy
ZXR1cm4gIj4iOworICAgIGNhc2UgVHlwZTo6RnVsbFN0b3A6CisgICAgICAgIHJldHVybiAiLiI7
CisgICAgY2FzZSBUeXBlOjpQbHVzRXF1YWxzOgorICAgICAgICByZXR1cm4gIis9IjsKKyAgICBj
YXNlIFR5cGU6Ok1pbnVzRXF1YWxzOgorICAgICAgICByZXR1cm4gIi09IjsKKyAgICBjYXNlIFR5
cGU6OlRpbWVzRXF1YWxzOgorICAgICAgICByZXR1cm4gIio9IjsKKyAgICBjYXNlIFR5cGU6OkRp
dmlkZUVxdWFsczoKKyAgICAgICAgcmV0dXJuICIvPSI7CisgICAgY2FzZSBUeXBlOjpNb2RFcXVh
bHM6CisgICAgICAgIHJldHVybiAiJT0iOworICAgIGNhc2UgVHlwZTo6WG9yRXF1YWxzOgorICAg
ICAgICByZXR1cm4gIl49IjsKKyAgICBjYXNlIFR5cGU6OkFuZEVxdWFsczoKKyAgICAgICAgcmV0
dXJuICImPSI7CisgICAgY2FzZSBUeXBlOjpPckVxdWFsczoKKyAgICAgICAgcmV0dXJuICJ8PSI7
CisgICAgY2FzZSBUeXBlOjpSaWdodFNoaWZ0RXF1YWxzOgorICAgICAgICByZXR1cm4gIj4+PSI7
CisgICAgY2FzZSBUeXBlOjpMZWZ0U2hpZnRFcXVhbHM6CisgICAgICAgIHJldHVybiAiPDw9IjsK
KyAgICBjYXNlIFR5cGU6OlBsdXNQbHVzOgorICAgICAgICByZXR1cm4gIisrIjsKKyAgICBjYXNl
IFR5cGU6Ok1pbnVzTWludXM6CisgICAgICAgIHJldHVybiAiLS0iOworICAgIGNhc2UgVHlwZTo6
QXJyb3c6CisgICAgICAgIHJldHVybiAiLT4iOworICAgIGNhc2UgVHlwZTo6UXVlc3Rpb25NYXJr
OgorICAgICAgICByZXR1cm4gIj8iOworICAgIGNhc2UgVHlwZTo6T3JPcjoKKyAgICAgICAgcmV0
dXJuICJ8fCI7CisgICAgY2FzZSBUeXBlOjpBbmRBbmQ6CisgICAgICAgIHJldHVybiAiJiYiOwor
ICAgIGNhc2UgVHlwZTo6T3I6CisgICAgICAgIHJldHVybiAifCI7CisgICAgY2FzZSBUeXBlOjpY
b3I6CisgICAgICAgIHJldHVybiAiXiI7CisgICAgY2FzZSBUeXBlOjpBbmQ6CisgICAgICAgIHJl
dHVybiAiJiI7CisgICAgY2FzZSBUeXBlOjpMZXNzVGhhbk9yRXF1YWxUbzoKKyAgICAgICAgcmV0
dXJuICI8PSI7CisgICAgY2FzZSBUeXBlOjpHcmVhdGVyVGhhbk9yRXF1YWxUbzoKKyAgICAgICAg
cmV0dXJuICI+PSI7CisgICAgY2FzZSBUeXBlOjpFcXVhbENvbXBhcmlzb246CisgICAgICAgIHJl
dHVybiAiPT0iOworICAgIGNhc2UgVHlwZTo6Tm90RXF1YWw6CisgICAgICAgIHJldHVybiAiIT0i
OworICAgIGNhc2UgVHlwZTo6UmlnaHRTaGlmdDoKKyAgICAgICAgcmV0dXJuICI+PiI7CisgICAg
Y2FzZSBUeXBlOjpMZWZ0U2hpZnQ6CisgICAgICAgIHJldHVybiAiPDwiOworICAgIGNhc2UgVHlw
ZTo6UGx1czoKKyAgICAgICAgcmV0dXJuICIrIjsKKyAgICBjYXNlIFR5cGU6Ok1pbnVzOgorICAg
ICAgICByZXR1cm4gIi0iOworICAgIGNhc2UgVHlwZTo6RGl2aWRlOgorICAgICAgICByZXR1cm4g
Ii8iOworICAgIGNhc2UgVHlwZTo6TW9kOgorICAgICAgICByZXR1cm4gIiUiOworICAgIGNhc2Ug
VHlwZTo6VGlsZGU6CisgICAgICAgIHJldHVybiAifiI7CisgICAgY2FzZSBUeXBlOjpFeGNsYW1h
dGlvblBvaW50OgorICAgICAgICByZXR1cm4gIiEiOworICAgIGNhc2UgVHlwZTo6QXQ6CisgICAg
ICAgIHJldHVybiAiQCI7CisgICAgfQorfQorCithdXRvIExleGVyOjpyZWNvZ25pemVLZXl3b3Jk
KHVuc2lnbmVkIGVuZCkgLT4gc3RkOjpvcHRpb25hbDxUb2tlbjo6VHlwZT4KK3sKKyAgICBhdXRv
IHN1YnN0cmluZyA9IG1fc3RyaW5nVmlldy5zdWJzdHJpbmcobV9vZmZzZXQsIGVuZCAtIG1fb2Zm
c2V0KTsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJzdHJ1Y3QiKQorICAgICAgICByZXR1cm4gVG9r
ZW46OlR5cGU6OlN0cnVjdDsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJ0eXBlZGVmIikKKyAgICAg
ICAgcmV0dXJuIFRva2VuOjpUeXBlOjpUeXBlZGVmOworICAgIGlmIChzdWJzdHJpbmcgPT0gImVu
dW0iKQorICAgICAgICByZXR1cm4gVG9rZW46OlR5cGU6OkVudW07CisgICAgaWYgKHN1YnN0cmlu
ZyA9PSAib3BlcmF0b3IiKQorICAgICAgICByZXR1cm4gVG9rZW46OlR5cGU6Ok9wZXJhdG9yOwor
ICAgIGlmIChzdWJzdHJpbmcgPT0gImlmIikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpUeXBlOjpJ
ZjsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJlbHNlIikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpU
eXBlOjpFbHNlOworICAgIGlmIChzdWJzdHJpbmcgPT0gImNvbnRpbnVlIikKKyAgICAgICAgcmV0
dXJuIFRva2VuOjpUeXBlOjpDb250aW51ZTsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJicmVhayIp
CisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6QnJlYWs7CisgICAgaWYgKHN1YnN0cmluZyA9
PSAic3dpdGNoIikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpUeXBlOjpTd2l0Y2g7CisgICAgaWYg
KHN1YnN0cmluZyA9PSAiY2FzZSIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6Q2FzZTsK
KyAgICBpZiAoc3Vic3RyaW5nID09ICJkZWZhdWx0IikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpU
eXBlOjpEZWZhdWx0OworICAgIGlmIChzdWJzdHJpbmcgPT0gImZhbGx0aHJvdWdoIikKKyAgICAg
ICAgcmV0dXJuIFRva2VuOjpUeXBlOjpGYWxsdGhyb3VnaDsKKyAgICBpZiAoc3Vic3RyaW5nID09
ICJmb3IiKQorICAgICAgICByZXR1cm4gVG9rZW46OlR5cGU6OkZvcjsKKyAgICBpZiAoc3Vic3Ry
aW5nID09ICJ3aGlsZSIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6V2hpbGU7CisgICAg
aWYgKHN1YnN0cmluZyA9PSAiZG8iKQorICAgICAgICByZXR1cm4gVG9rZW46OlR5cGU6OkRvOwor
ICAgIGlmIChzdWJzdHJpbmcgPT0gInJldHVybiIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlw
ZTo6UmV0dXJuOworICAgIGlmIChzdWJzdHJpbmcgPT0gInRyYXAiKQorICAgICAgICByZXR1cm4g
VG9rZW46OlR5cGU6OlRyYXA7CisgICAgaWYgKHN1YnN0cmluZyA9PSAibnVsbCIpCisgICAgICAg
IHJldHVybiBUb2tlbjo6VHlwZTo6TnVsbDsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJ0cnVlIikK
KyAgICAgICAgcmV0dXJuIFRva2VuOjpUeXBlOjpUcnVlOworICAgIGlmIChzdWJzdHJpbmcgPT0g
ImZhbHNlIikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpUeXBlOjpGYWxzZTsKKyAgICBpZiAoc3Vi
c3RyaW5nID09ICJjb25zdGFudCIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6Q29uc3Rh
bnQ7CisgICAgaWYgKHN1YnN0cmluZyA9PSAiZGV2aWNlIikKKyAgICAgICAgcmV0dXJuIFRva2Vu
OjpUeXBlOjpEZXZpY2U7CisgICAgaWYgKHN1YnN0cmluZyA9PSAidGhyZWFkZ3JvdXAiKQorICAg
ICAgICByZXR1cm4gVG9rZW46OlR5cGU6OlRocmVhZGdyb3VwOworICAgIGlmIChzdWJzdHJpbmcg
PT0gInRocmVhZCIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6VGhyZWFkOworICAgIGlm
IChzdWJzdHJpbmcgPT0gInNwYWNlIikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpUeXBlOjpTcGFj
ZTsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJ2ZXJ0ZXgiKQorICAgICAgICByZXR1cm4gVG9rZW46
OlR5cGU6OlZlcnRleDsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJmcmFnbWVudCIpCisgICAgICAg
IHJldHVybiBUb2tlbjo6VHlwZTo6RnJhZ21lbnQ7CisgICAgaWYgKHN1YnN0cmluZyA9PSAiY29t
cHV0ZSIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6Q29tcHV0ZTsKKyAgICBpZiAoc3Vi
c3RyaW5nID09ICJudW10aHJlYWRzIikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpUeXBlOjpOdW1U
aHJlYWRzOworICAgIGlmIChzdWJzdHJpbmcgPT0gIlNWX0luc3RhbmNlSUQiKQorICAgICAgICBy
ZXR1cm4gVG9rZW46OlR5cGU6OlNWSW5zdGFuY2VJRDsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJT
Vl9WZXJ0ZXhJRCIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6U1ZWZXJ0ZXhJRDsKKyAg
ICBpZiAoc3Vic3RyaW5nID09ICJQU0laRSIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6
UFNpemU7CisgICAgaWYgKHN1YnN0cmluZyA9PSAiU1ZfUG9zaXRpb24iKQorICAgICAgICByZXR1
cm4gVG9rZW46OlR5cGU6OlNWUG9zaXRpb247CisgICAgaWYgKHN1YnN0cmluZyA9PSAiU1ZfSXNG
cm9udEZhY2UiKQorICAgICAgICByZXR1cm4gVG9rZW46OlR5cGU6OlNWSXNGcm9udEZhY2U7Cisg
ICAgaWYgKHN1YnN0cmluZyA9PSAiU1ZfU2FtcGxlSW5kZXgiKQorICAgICAgICByZXR1cm4gVG9r
ZW46OlR5cGU6OlNWU2FtcGxlSW5kZXg7CisgICAgaWYgKHN1YnN0cmluZyA9PSAiU1ZfSW5uZXJD
b3ZlcmFnZSIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6U1ZJbm5lckNvdmVyYWdlOwor
ICAgIGlmIChzdWJzdHJpbmcgPT0gIlNWX1RhcmdldCIpCisgICAgICAgIHJldHVybiBUb2tlbjo6
VHlwZTo6U1ZUYXJnZXQ7CisgICAgaWYgKHN1YnN0cmluZyA9PSAiU1ZfRGVwdGgiKQorICAgICAg
ICByZXR1cm4gVG9rZW46OlR5cGU6OlNWRGVwdGg7CisgICAgaWYgKHN1YnN0cmluZyA9PSAiU1Zf
Q292ZXJhZ2UiKQorICAgICAgICByZXR1cm4gVG9rZW46OlR5cGU6OlNWQ292ZXJhZ2U7CisgICAg
aWYgKHN1YnN0cmluZyA9PSAiU1ZfRGlzcGF0Y2hUaHJlYWRJRCIpCisgICAgICAgIHJldHVybiBU
b2tlbjo6VHlwZTo6U1ZEaXNwYXRjaFRocmVhZElEOworICAgIGlmIChzdWJzdHJpbmcgPT0gIlNW
X0dyb3VwSUQiKQorICAgICAgICByZXR1cm4gVG9rZW46OlR5cGU6OlNWR3JvdXBJRDsKKyAgICBp
ZiAoc3Vic3RyaW5nID09ICJTVl9Hcm91cEluZGV4IikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpU
eXBlOjpTVkdyb3VwSW5kZXg7CisgICAgaWYgKHN1YnN0cmluZyA9PSAiU1ZfR3JvdXBUaHJlYWRJ
RCIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6U1ZHcm91cFRocmVhZElEOworICAgIGlm
IChzdWJzdHJpbmcgPT0gImF0dHJpYnV0ZSIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6
QXR0cmlidXRlOworICAgIGlmIChzdWJzdHJpbmcgPT0gInJlZ2lzdGVyIikKKyAgICAgICAgcmV0
dXJuIFRva2VuOjpUeXBlOjpSZWdpc3RlcjsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJzcGVjaWFs
aXplZCIpCisgICAgICAgIHJldHVybiBUb2tlbjo6VHlwZTo6U3BlY2lhbGl6ZWQ7CisgICAgaWYg
KHN1YnN0cmluZyA9PSAibmF0aXZlIikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpUeXBlOjpOYXRp
dmU7CisgICAgaWYgKHN1YnN0cmluZyA9PSAicmVzdHJpY3RlZCIpCisgICAgICAgIHJldHVybiBU
b2tlbjo6VHlwZTo6UmVzdHJpY3RlZDsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJfIikKKyAgICAg
ICAgcmV0dXJuIFRva2VuOjpUeXBlOjpVbmRlcnNjb3JlOworICAgIGlmIChzdWJzdHJpbmcgPT0g
ImF1dG8iKQorICAgICAgICByZXR1cm4gVG9rZW46OlR5cGU6OkF1dG87CisgICAgaWYgKHN1YnN0
cmluZyA9PSAicHJvdG9jb2wiKQorICAgICAgICByZXR1cm4gVG9rZW46OlR5cGU6OlByb3RvY29s
OworICAgIGlmIChzdWJzdHJpbmcgPT0gImNvbnN0IikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpU
eXBlOjpDb25zdDsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJzdGF0aWMiKQorICAgICAgICByZXR1
cm4gVG9rZW46OlR5cGU6OlN0YXRpYzsKKyAgICBpZiAoc3Vic3RyaW5nID09ICJub2ludGVycG9s
YXRpb24iKQorICAgICAgICByZXR1cm4gVG9rZW46OlR5cGU6OlF1YWxpZmllcjsKKyAgICBpZiAo
c3Vic3RyaW5nID09ICJub3BlcnNwZWN0aXZlIikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpUeXBl
OjpRdWFsaWZpZXI7CisgICAgaWYgKHN1YnN0cmluZyA9PSAidW5pZm9ybSIpCisgICAgICAgIHJl
dHVybiBUb2tlbjo6VHlwZTo6UXVhbGlmaWVyOworICAgIGlmIChzdWJzdHJpbmcgPT0gImNlbnRy
b2lkIikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpUeXBlOjpRdWFsaWZpZXI7CisgICAgaWYgKHN1
YnN0cmluZyA9PSAic2FtcGxlIikKKyAgICAgICAgcmV0dXJuIFRva2VuOjpUeXBlOjpRdWFsaWZp
ZXI7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworYXV0byBMZXhlcjo6Y29uc3VtZVRv
a2VuRnJvbVN0cmVhbSgpIC0+IHN0ZDo6b3B0aW9uYWw8VG9rZW4+Cit7CisgICAgYXV0byBwcmVw
YXJlID0gWyZdKHVuc2lnbmVkIG5ld09mZnNldCwgVG9rZW46OlR5cGUgdHlwZSkgLT4gc3RkOjpv
cHRpb25hbDxUb2tlbj4geworICAgICAgICBhdXRvIG9sZE9mZnNldCA9IG1fb2Zmc2V0OworICAg
ICAgICBtX29mZnNldCA9IG5ld09mZnNldDsKKyAgICAgICAgc2tpcFdoaXRlc3BhY2VBbmRDb21t
ZW50cygpOworICAgICAgICByZXR1cm4ge3sgbV9zdHJpbmdWaWV3LnN1YnN0cmluZyhvbGRPZmZz
ZXQsIG5ld09mZnNldCAtIG9sZE9mZnNldCksIG1fbGluZU51bWJlciwgdHlwZSB9fTsKKyAgICB9
OworCisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gZmxvYXRMaXRlcmFsKG1fb2Zmc2V0KSkKKyAg
ICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OkZsb2F0TGl0ZXJh
bCk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gdWludExpdGVyYWwobV9vZmZzZXQpKQorICAg
ICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6VWludExpdGVyYWwp
OworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGludExpdGVyYWwobV9vZmZzZXQpKQorICAgICAg
ICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6SW50TGl0ZXJhbCk7Cisg
ICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gb3BlcmF0b3JOYW1lKG1fb2Zmc2V0KSkKKyAgICAgICAg
cmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZSk7Cisg
ICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gaWRlbnRpZmllcihtX29mZnNldCkpIHsKKyAgICAgICAg
aWYgKGF1dG8gcmVzdWx0ID0gcmVjb2duaXplS2V5d29yZCgqbmV3T2Zmc2V0KSkKKyAgICAgICAg
ICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsICpyZXN1bHQpOworICAgICAgICByZXR1cm4g
cHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CisgICAgfQorICAg
IC8vIFNvcnRlZCBieSBsZW5ndGgsIHNvIGxvbmdlciBtYXRjaGVzIGFyZSBwcmVmZXJhYmxlIHRv
IHNob3J0ZXIgbWF0Y2hlcy4KKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoIj4+PSIs
IG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5
cGU6OlJpZ2h0U2hpZnRFcXVhbHMpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygi
PDw9IiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tl
bjo6VHlwZTo6TGVmdFNoaWZ0RXF1YWxzKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJp
bmcoIis9IiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBU
b2tlbjo6VHlwZTo6UGx1c0VxdWFscyk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5n
KCItPSIsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9r
ZW46OlR5cGU6Ok1pbnVzRXF1YWxzKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmco
Iio9IiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tl
bjo6VHlwZTo6VGltZXNFcXVhbHMpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygi
Lz0iLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2Vu
OjpUeXBlOjpEaXZpZGVFcXVhbHMpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygi
JT0iLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2Vu
OjpUeXBlOjpNb2RFcXVhbHMpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygiXj0i
LCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpU
eXBlOjpYb3JFcXVhbHMpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygiJj0iLCBt
X29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBl
OjpBbmRFcXVhbHMpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygifD0iLCBtX29m
ZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpP
ckVxdWFscyk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCIrKyIsIG1fb2Zmc2V0
KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OlBsdXNQ
bHVzKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoIi0tIiwgbV9vZmZzZXQpKQor
ICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6TWludXNNaW51
cyk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCItPiIsIG1fb2Zmc2V0KSkKKyAg
ICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OkFycm93KTsKKyAg
ICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoIltdIiwgbV9vZmZzZXQpKQorICAgICAgICBy
ZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXIp
OworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHN0cmluZygifHwiLCBtX29mZnNldCkpCisgICAg
ICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpPck9yKTsKKyAgICBp
ZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoIiYmIiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1
cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6QW5kQW5kKTsKKyAgICBpZiAoYXV0
byBuZXdPZmZzZXQgPSBzdHJpbmcoIjw9IiwgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJl
cGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6TGVzc1RoYW5PckVxdWFsVG8pOworICAgIGlm
IChhdXRvIG5ld09mZnNldCA9IHN0cmluZygiPj0iLCBtX29mZnNldCkpCisgICAgICAgIHJldHVy
biBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpHcmVhdGVyVGhhbk9yRXF1YWxUbyk7
CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCI9PSIsIG1fb2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OkVxdWFsQ29tcGFyaXNv
bik7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCIhPSIsIG1fb2Zmc2V0KSkKKyAg
ICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6Ok5vdEVxdWFsKTsK
KyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBzdHJpbmcoIj4+IiwgbV9vZmZzZXQpKQorICAgICAg
ICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6UmlnaHRTaGlmdCk7Cisg
ICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCI8PCIsIG1fb2Zmc2V0KSkKKyAgICAgICAg
cmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OkxlZnRTaGlmdCk7CisgICAg
aWYgKGF1dG8gbmV3T2Zmc2V0ID0gY2hhcmFjdGVyKCc9JywgbV9vZmZzZXQpKQorICAgICAgICBy
ZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6RXF1YWxzU2lnbik7CisgICAg
aWYgKGF1dG8gbmV3T2Zmc2V0ID0gY2hhcmFjdGVyKCc7JywgbV9vZmZzZXQpKQorICAgICAgICBy
ZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6U2VtaWNvbG9uKTsKKyAgICBp
ZiAoYXV0byBuZXdPZmZzZXQgPSBjaGFyYWN0ZXIoJ3snLCBtX29mZnNldCkpCisgICAgICAgIHJl
dHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpMZWZ0Q3VybHlCcmFja2V0KTsK
KyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBjaGFyYWN0ZXIoJ30nLCBtX29mZnNldCkpCisgICAg
ICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpSaWdodEN1cmx5QnJh
Y2tldCk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gY2hhcmFjdGVyKCc6JywgbV9vZmZzZXQp
KQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6Q29sb24p
OworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGNoYXJhY3RlcignLCcsIG1fb2Zmc2V0KSkKKyAg
ICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OkNvbW1hKTsKKyAg
ICBpZiAoYXV0byBuZXdPZmZzZXQgPSBjaGFyYWN0ZXIoJygnLCBtX29mZnNldCkpCisgICAgICAg
IHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpMZWZ0UGFyZW50aGVzaXMp
OworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGNoYXJhY3RlcignKScsIG1fb2Zmc2V0KSkKKyAg
ICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OlJpZ2h0UGFyZW50
aGVzaXMpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGNoYXJhY3RlcignWycsIG1fb2Zmc2V0
KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OkxlZnRT
cXVhcmVCcmFja2V0KTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBjaGFyYWN0ZXIoJ10nLCBt
X29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBl
OjpSaWdodFNxdWFyZUJyYWNrZXQpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGNoYXJhY3Rl
cignKicsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9r
ZW46OlR5cGU6OlN0YXIpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGNoYXJhY3RlcignPCcs
IG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5
cGU6Okxlc3NUaGFuU2lnbik7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gY2hhcmFjdGVyKCc+
JywgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6
VHlwZTo6R3JlYXRlclRoYW5TaWduKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBjaGFyYWN0
ZXIoJy4nLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRv
a2VuOjpUeXBlOjpGdWxsU3RvcCk7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gY2hhcmFjdGVy
KCc/JywgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tl
bjo6VHlwZTo6UXVlc3Rpb25NYXJrKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBjaGFyYWN0
ZXIoJ3wnLCBtX29mZnNldCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRv
a2VuOjpUeXBlOjpPcik7CisgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gY2hhcmFjdGVyKCdeJywg
bV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlw
ZTo6WG9yKTsKKyAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBjaGFyYWN0ZXIoJyYnLCBtX29mZnNl
dCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpBbmQp
OworICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGNoYXJhY3RlcignKycsIG1fb2Zmc2V0KSkKKyAg
ICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OlBsdXMpOworICAg
IGlmIChhdXRvIG5ld09mZnNldCA9IGNoYXJhY3RlcignLScsIG1fb2Zmc2V0KSkKKyAgICAgICAg
cmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6Ok1pbnVzKTsKKyAgICBpZiAo
YXV0byBuZXdPZmZzZXQgPSBjaGFyYWN0ZXIoJy8nLCBtX29mZnNldCkpCisgICAgICAgIHJldHVy
biBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpEaXZpZGUpOworICAgIGlmIChhdXRv
IG5ld09mZnNldCA9IGNoYXJhY3RlcignJScsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHBy
ZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6Ok1vZCk7CisgICAgaWYgKGF1dG8gbmV3T2Zm
c2V0ID0gY2hhcmFjdGVyKCd+JywgbV9vZmZzZXQpKQorICAgICAgICByZXR1cm4gcHJlcGFyZSgq
bmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6VGlsZGUpOworICAgIGlmIChhdXRvIG5ld09mZnNldCA9
IGNoYXJhY3RlcignIScsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09m
ZnNldCwgVG9rZW46OlR5cGU6OkV4Y2xhbWF0aW9uUG9pbnQpOworICAgIGlmIChhdXRvIG5ld09m
ZnNldCA9IGNoYXJhY3RlcignQCcsIG1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUo
Km5ld09mZnNldCwgVG9rZW46OlR5cGU6OkF0KTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Cit9CisKK3ZvaWQgTGV4ZXI6OnNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKQoreworICAgIHVu
c2lnbmVkIHNhdmVkT2Zmc2V0OworICAgIGRvIHsKKyAgICAgICAgc2F2ZWRPZmZzZXQgPSBtX29m
ZnNldDsKKyAgICAgICAgc2tpcFdoaXRlc3BhY2UoKTsKKyAgICAgICAgc2tpcExpbmVDb21tZW50
KCk7CisgICAgICAgIHNraXBMb25nQ29tbWVudCgpOworICAgIH0gd2hpbGUgKHNhdmVkT2Zmc2V0
ICE9IG1fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFjZShVQ2hh
ciBjb2RlVW5pdCkKK3sKKyAgICBzd2l0Y2ggKGNvZGVVbml0KSB7CisgICAgY2FzZSAnICc6Cisg
ICAgY2FzZSAnXHQnOgorICAgIGNhc2UgJ1xyJzoKKyAgICBjYXNlICdcbic6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc05ld2xpbmUoVUNoYXIgY29kZVVuaXQpCit7CisgICAg
c3dpdGNoIChjb2RlVW5pdCkgeworICAgIGNhc2UgJ1xyJzoKKyAgICBjYXNlICdcbic6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKKy8vIFdlIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0d28gcHJvcGVydGllcyBvZiBV
bmljb2RlOgorLy8gMS4gVGhlIGNvbnNpdHV0ZW50IFVURi0xNiBjb2RlIHVuaXRzIGZvciBhbGwg
bm9uLUJNUCBjb2RlIHBvaW50cyBhcmUgc3Vycm9nYXRlcywKKy8vICAgICAgICB3aGljaCBtZWFu
cyB3ZSdsbCBuZXZlciBzZWUgYSBmYWxzZSBtYXRjaC4gSWYgd2Ugc2VlIGEgQk1QIGNvZGUgdW5p
dCwgd2UKKy8vICAgICAgICByZWFsbHkgaGF2ZSBhIEJNUCBjb2RlIHBvaW50LgorLy8gMi4gRXZl
cnl0aGluZyB3ZSdyZSBsb29raW5nIGZvciBpcyBpbiBCTVAKKwordm9pZCBMZXhlcjo6c2tpcFdo
aXRlc3BhY2UoKQoreworICAgIGZvciAoIDsgbV9vZmZzZXQgPCBtX3N0cmluZ1ZpZXcubGVuZ3Ro
KCkgJiYgaXNXaGl0ZXNwYWNlKG1fc3RyaW5nVmlld1ttX29mZnNldF0pOyArK21fb2Zmc2V0KSB7
CisgICAgICAgIGlmIChtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdID09ICdccicgJiYgbV9vZmZzZXQg
KyAxIDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpICYmIG1fc3RyaW5nVmlld1ttX29mZnNldCArIDFd
ID09ICdcbicpIHsKKyAgICAgICAgICAgICsrbV9vZmZzZXQ7CisgICAgICAgICAgICArK21fbGlu
ZU51bWJlcjsKKyAgICAgICAgfSBlbHNlIGlmIChpc05ld2xpbmUobV9zdHJpbmdWaWV3W21fb2Zm
c2V0XSkpCisgICAgICAgICAgICArK21fbGluZU51bWJlcjsKKyAgICB9Cit9CisKK3ZvaWQgTGV4
ZXI6OnNraXBMaW5lQ29tbWVudCgpCit7CisgICAgaWYgKG1fb2Zmc2V0ICsgMSA+PSBtX3N0cmlu
Z1ZpZXcubGVuZ3RoKCkgfHwgbV9zdHJpbmdWaWV3W21fb2Zmc2V0XSAhPSAnLycgfHwgbV9zdHJp
bmdWaWV3W21fb2Zmc2V0ICsgMV0gIT0gJy8nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX29m
ZnNldCArPSAyOworICAgIGZvciAoIDsgbV9vZmZzZXQgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkg
JiYgIWlzTmV3bGluZShtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdKTsgKyttX29mZnNldCkgeyB9Cit9
CisKK3ZvaWQgTGV4ZXI6OnNraXBMb25nQ29tbWVudCgpCit7CisgICAgaWYgKG1fb2Zmc2V0ICsg
MSA+PSBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgfHwgbV9zdHJpbmdWaWV3W21fb2Zmc2V0XSAhPSAn
LycgfHwgbV9zdHJpbmdWaWV3W21fb2Zmc2V0ICsgMV0gIT0gJyonKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX29mZnNldCArPSAyOworICAgIGRvIHsKKyAgICAgICAgZm9yICggOyBtX29mZnNl
dCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAmJiBtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdICE9ICcq
JzsgKyttX29mZnNldCkgeworICAgICAgICAgICAgaWYgKG1fc3RyaW5nVmlld1ttX29mZnNldF0g
PT0gJ1xyJyAmJiBtX29mZnNldCArIDEgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJp
bmdWaWV3W21fb2Zmc2V0ICsgMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICsrbV9vZmZz
ZXQ7CisgICAgICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzTmV3bGluZShtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdKSkKKyAgICAgICAgICAgICAgICAr
K21fbGluZU51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9vZmZzZXQgPCBtX3N0cmlu
Z1ZpZXcubGVuZ3RoKCkpCisgICAgICAgICAgICArK21fb2Zmc2V0OworICAgICAgICBpZiAobV9v
ZmZzZXQgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJpbmdWaWV3W21fb2Zmc2V0XSA9
PSAnLycpIHsKKyAgICAgICAgICAgICsrbV9vZmZzZXQ7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0gd2hpbGUgKG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKTsK
K30KKworLy8gUmVndWxhciBleHByZXNzaW9uIGFyZSB1bm5lY2Vzc2FyeTsgd2Ugc2hvdWxkbid0
IG5lZWQgdG8gY29tcGlsZSB0aGVtLgorCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBMZXhlcjo6
Y29yZURlY2ltYWxJbnRMaXRlcmFsKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAo
b2Zmc2V0ID49IG1fc3RyaW5nVmlldy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBpZiAobV9zdHJpbmdWaWV3W29mZnNldF0gPT0gJzAnKQorICAgICAgICByZXR1
cm4gb2Zmc2V0ICsgMTsKKyAgICBpZiAobV9zdHJpbmdWaWV3W29mZnNldF0gPj0gJzEnICYmIG1f
c3RyaW5nVmlld1tvZmZzZXRdIDw9ICc5JykgeworICAgICAgICArK29mZnNldDsKKyAgICAgICAg
Zm9yICggOyBvZmZzZXQgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJpbmdWaWV3W29m
ZnNldF0gPj0gJzAnICYmIG1fc3RyaW5nVmlld1tvZmZzZXRdIDw9ICc5JzsgKytvZmZzZXQpIHsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgIH0KKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBMZXhlcjo6ZGVjaW1hbElu
dExpdGVyYWwodW5zaWduZWQgb2Zmc2V0KSBjb25zdAoreworICAgIGlmIChvZmZzZXQgPCBtX3N0
cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJpbmdWaWV3W29mZnNldF0gPT0gJy0nKQorICAgICAg
ICArK29mZnNldDsKKyAgICByZXR1cm4gY29yZURlY2ltYWxJbnRMaXRlcmFsKG9mZnNldCk7Cit9
CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjpkZWNpbWFsVWludExpdGVyYWwodW5z
aWduZWQgb2Zmc2V0KSBjb25zdAoreworICAgIGF1dG8gcmVzdWx0ID0gY29yZURlY2ltYWxJbnRM
aXRlcmFsKG9mZnNldCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgaWYgKCpyZXN1bHQgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJp
bmdWaWV3WypyZXN1bHRdID09ICd1JykKKyAgICAgICAgcmV0dXJuICpyZXN1bHQgKyAxOworICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0hleGFkZWNp
bWFsQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gKGNoYXJhY3RlciA+
PSAnMCcgJiYgY2hhcmFjdGVyIDw9ICc5JykKKyAgICAgICAgfHwgKGNoYXJhY3RlciA+PSAnYScg
JiYgY2hhcmFjdGVyIDw9ICdmJykKKyAgICAgICAgfHwgKGNoYXJhY3RlciA+PSAnQScgJiYgY2hh
cmFjdGVyIDw9ICdGJyk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjpjb3Jl
SGV4YWRlY2ltYWxJbnRMaXRlcmFsKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAo
b2Zmc2V0ICsgMSA+PSBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgfHwgbV9zdHJpbmdWaWV3W29mZnNl
dF0gIT0gJzAnIHx8IG1fc3RyaW5nVmlld1tvZmZzZXQgKyAxXSAhPSAneCcpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBvZmZzZXQgKz0gMjsKKyAgICBpZiAob2Zmc2V0ID49
IG1fc3RyaW5nVmlldy5sZW5ndGgoKSB8fCAhaXNIZXhhZGVjaW1hbENoYXJhY3RlcihtX3N0cmlu
Z1ZpZXdbb2Zmc2V0XSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgKytvZmZz
ZXQ7CisgICAgZm9yICggOyBvZmZzZXQgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgaXNIZXhh
ZGVjaW1hbENoYXJhY3RlcihtX3N0cmluZ1ZpZXdbb2Zmc2V0XSk7ICsrb2Zmc2V0KSB7CisgICAg
fQorICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExleGVy
OjpoZXhhZGVjaW1hbEludExpdGVyYWwodW5zaWduZWQgb2Zmc2V0KSBjb25zdAoreworICAgIGlm
IChvZmZzZXQgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJpbmdWaWV3W29mZnNldF0g
PT0gJy0nKQorICAgICAgICArK29mZnNldDsKKyAgICByZXR1cm4gY29yZUhleGFkZWNpbWFsSW50
TGl0ZXJhbChvZmZzZXQpOworfQorCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBMZXhlcjo6aGV4
YWRlY2ltYWxVaW50TGl0ZXJhbCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAgYXV0byBy
ZXN1bHQgPSBjb3JlSGV4YWRlY2ltYWxJbnRMaXRlcmFsKG9mZnNldCk7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCpyZXN1bHQgPCBtX3N0
cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJpbmdWaWV3WypyZXN1bHRdID09ICd1JykKKyAgICAg
ICAgcmV0dXJuICpyZXN1bHQgKyAxOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjppbnRMaXRlcmFsKHVuc2lnbmVkIG9mZnNldCkg
Y29uc3QKK3sKKyAgICBpZiAoYXV0byByZXN1bHQgPSBkZWNpbWFsSW50TGl0ZXJhbChvZmZzZXQp
KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGhleGFkZWNp
bWFsSW50TGl0ZXJhbChvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjp1aW50
TGl0ZXJhbCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0g
ZGVjaW1hbFVpbnRMaXRlcmFsKG9mZnNldCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gaGV4YWRlY2ltYWxVaW50TGl0ZXJhbChvZmZzZXQpKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3N0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IExleGVyOjpkaWdpdCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Cit7Cisg
ICAgaWYgKG9mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAmJiBtX3N0cmluZ1ZpZXdbb2Zm
c2V0XSA+PSAnMCcgJiYgbV9zdHJpbmdWaWV3W29mZnNldF0gPD0gJzknKQorICAgICAgICByZXR1
cm4gb2Zmc2V0ICsgMTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit1bnNpZ25lZCBM
ZXhlcjo6ZGlnaXRTdGFyKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGRpZ2l0KG9mZnNldCk7CisgICAgICAgIGlmICgh
cmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICAgICAgb2Zmc2V0ID0gKnJl
c3VsdDsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjpjaGFyYWN0
ZXIoY2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAob2Zm
c2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpICYmIG1fc3RyaW5nVmlld1tvZmZzZXRdID09IGNo
YXJhY3RlcikKKyAgICAgICAgcmV0dXJuIG9mZnNldCArIDE7CisgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKK30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6OmNvcmVGbG9hdExpdGVy
YWxUeXBlMSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAgYXV0byByZXN1bHQgPSBkaWdp
dChvZmZzZXQpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIGF1dG8gcmVzdWx0MiA9IGRpZ2l0U3RhcigqcmVzdWx0KTsKKyAgICBhdXRvIHJlc3Vs
dDMgPSBjaGFyYWN0ZXIoJy4nLCByZXN1bHQyKTsKKyAgICBpZiAoIXJlc3VsdDMpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIGRpZ2l0U3RhcigqcmVzdWx0Myk7Cit9
CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjpjb3JlRmxvYXRMaXRlcmFsKHVuc2ln
bmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byB0eXBlMSA9IGNvcmVGbG9hdExpdGVy
YWxUeXBlMShvZmZzZXQpKQorICAgICAgICByZXR1cm4gdHlwZTE7CisgICAgYXV0byByZXN1bHQg
PSBkaWdpdFN0YXIob2Zmc2V0KTsKKyAgICBhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJy4nLCBy
ZXN1bHQpOworICAgIGlmICghcmVzdWx0MikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICBhdXRvIHJlc3VsdDMgPSBkaWdpdCgqcmVzdWx0Mik7CisgICAgaWYgKCFyZXN1bHQzKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiBkaWdpdFN0YXIoKnJlc3Vs
dDMpOworfQorCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBMZXhlcjo6ZmxvYXRMaXRlcmFsKHVu
c2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAob2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxl
bmd0aCgpICYmIG1fc3RyaW5nVmlld1tvZmZzZXRdID09ICctJykKKyAgICAgICAgKytvZmZzZXQ7
CisgICAgYXV0byByZXN1bHQgPSBjb3JlRmxvYXRMaXRlcmFsKG9mZnNldCk7CisgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgb2Zmc2V0ID0gKnJlc3Vs
dDsKKyAgICBpZiAob2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpICYmIG1fc3RyaW5nVmll
d1tvZmZzZXRdID09ICdmJykKKyAgICAgICAgKytvZmZzZXQ7CisgICAgcmV0dXJuIG9mZnNldDsK
K30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6OnZhbGlkSWRlbnRpZmllcih1bnNp
Z25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAgaWYgKG9mZnNldCA+PSBtX3N0cmluZ1ZpZXcubGVu
Z3RoKCkKKyAgICAgICAgfHwgISgobV9zdHJpbmdWaWV3W29mZnNldF0gPj0gJ2EnICYmIG1fc3Ry
aW5nVmlld1tvZmZzZXRdIDw9ICd6JykKKyAgICAgICAgICAgIHx8IChtX3N0cmluZ1ZpZXdbb2Zm
c2V0XSA+PSAnQScgJiYgbV9zdHJpbmdWaWV3W29mZnNldF0gPD0gJ1onKQorICAgICAgICAgICAg
fHwgKG1fc3RyaW5nVmlld1tvZmZzZXRdID09ICdfJykpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgICsrb2Zmc2V0OworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChv
ZmZzZXQgPj0gbV9zdHJpbmdWaWV3Lmxlbmd0aCgpCisgICAgICAgICAgICB8fCAhKChtX3N0cmlu
Z1ZpZXdbb2Zmc2V0XSA+PSAnYScgJiYgbV9zdHJpbmdWaWV3W29mZnNldF0gPD0gJ3onKQorICAg
ICAgICAgICAgICAgIHx8IChtX3N0cmluZ1ZpZXdbb2Zmc2V0XSA+PSAnQScgJiYgbV9zdHJpbmdW
aWV3W29mZnNldF0gPD0gJ1onKQorICAgICAgICAgICAgICAgIHx8IChtX3N0cmluZ1ZpZXdbb2Zm
c2V0XSA+PSAnMCcgJiYgbV9zdHJpbmdWaWV3W29mZnNldF0gPD0gJzknKQorICAgICAgICAgICAg
ICAgIHx8IChtX3N0cmluZ1ZpZXdbb2Zmc2V0XSA9PSAnXycpKSkKKyAgICAgICAgICAgIHJldHVy
biBvZmZzZXQ7CisgICAgICAgICsrb2Zmc2V0OworICAgIH0KK30KKworc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gTGV4ZXI6OmlkZW50aWZpZXIodW5zaWduZWQgb2Zmc2V0KSBjb25zdAoreworICAg
IHJldHVybiB2YWxpZElkZW50aWZpZXIob2Zmc2V0KTsKK30KKworc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4gTGV4ZXI6Om9wZXJhdG9yTmFtZSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Cit7CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5nKCJvcGVyYXRvciYuIiwgb2Zmc2V0KSkKKyAgICAgICAg
cmV0dXJuIHZhbGlkSWRlbnRpZmllcigqcmVzdWx0KTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBz
dHJpbmcoIm9wZXJhdG9yLiIsIG9mZnNldCkpIHsKKyAgICAgICAgaWYgKChyZXN1bHQgPSB2YWxp
ZElkZW50aWZpZXIoKnJlc3VsdCkpKSB7CisgICAgICAgICAgICBpZiAoYXV0byByZXN1bHQyID0g
Y2hhcmFjdGVyKCc9JywgKnJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7
CisgICAgICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
YXV0byByZXN1bHQgPSBzdHJpbmcoIm9wZXJhdG9yIiwgb2Zmc2V0KSkgeworICAgICAgICAvLyBT
b3J0ZWQgYnkgbGVuZ3RoLCBzbyBsb25nZXIgbWF0Y2hlcyBhcmUgcHJlZmVyYWJsZSB0byBzaG9y
dGVyIG1hdGNoZXMuCisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIiZbXSIsICpy
ZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7CisgICAgICAgIGlmIChhdXRvIHJl
c3VsdDIgPSBzdHJpbmcoIltdPSIsICpyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDI7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIj4+IiwgKnJlc3VsdCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0
cmluZygiPDwiLCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOworICAgICAg
ICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCIrKyIsICpyZXN1bHQpKQorICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDI7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIi0tIiwg
KnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICAgICAgaWYgKGF1dG8g
cmVzdWx0MiA9IHN0cmluZygiJiYiLCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQyOworICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCJ8fCIsICpyZXN1bHQpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBz
dHJpbmcoIj49IiwgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICAg
ICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiPD0iLCAqcmVzdWx0KSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQyOworICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCI9PSIs
ICpyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7CisgICAgICAgIGlmIChhdXRv
IHJlc3VsdDIgPSBzdHJpbmcoIltdIiwgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0MjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignKycsICpyZXN1bHQp
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIg
PSBjaGFyYWN0ZXIoJy0nLCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwor
ICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCcqJywgKnJlc3VsdCkpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJh
Y3RlcignLycsICpyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7CisgICAgICAg
IGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJyUnLCAqcmVzdWx0KSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQyOworICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCc8
JywgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICAgICAgaWYgKGF1
dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignPicsICpyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDI7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJyEnLCAqcmVz
dWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOworICAgICAgICBpZiAoYXV0byByZXN1
bHQyID0gY2hhcmFjdGVyKCd+JywgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
MjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignJicsICpyZXN1bHQpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBj
aGFyYWN0ZXIoJ14nLCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQyOworICAg
ICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCd8JywgKnJlc3VsdCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0MjsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30K
KworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xMZXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4ODVjODI1YzYyYTFmMWU1MDRlNWM1M2Qy
NDU5NTRmNmNjMGRjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTExleGVyLmgKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nVmlldy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIExleGVyIHsKK3B1YmxpYzoK
KyAgICBMZXhlcigpID0gZGVmYXVsdDsKKworICAgIExleGVyKFN0cmluZ1ZpZXcgc3RyaW5nVmll
dykKKyAgICAgICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5nVmlldykKKyAgICB7CisgICAgICAgIHNr
aXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTsKKyAgICB9CisKKyAgICBMZXhlcihjb25zdCBMZXhl
ciYpID0gZGVsZXRlOworICAgIExleGVyKExleGVyJiYpID0gZGVmYXVsdDsKKworICAgIExleGVy
JiBvcGVyYXRvcj0oY29uc3QgTGV4ZXImKSA9IGRlbGV0ZTsKKyAgICBMZXhlciYgb3BlcmF0b3I9
KExleGVyJiYpID0gZGVmYXVsdDsKKworICAgIHN0cnVjdCBUb2tlbiB7CisgICAgICAgIFRva2Vu
KCkgPSBkZWxldGU7CisgICAgICAgIFRva2VuKGNvbnN0IFRva2VuJikgPSBkZWZhdWx0OworICAg
ICAgICBUb2tlbihUb2tlbiYmKSA9IGRlZmF1bHQ7CisgICAgICAgIFRva2VuJiBvcGVyYXRvcj0o
Y29uc3QgVG9rZW4mKSA9IGRlZmF1bHQ7CisgICAgICAgIFRva2VuJiBvcGVyYXRvcj0oVG9rZW4m
JikgPSBkZWZhdWx0OworCisgICAgICAgIFN0cmluZ1ZpZXcgc3RyaW5nVmlldzsKKyAgICAgICAg
dW5zaWduZWQgbGluZU51bWJlcjsKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAg
ICAgIEludExpdGVyYWwsCisgICAgICAgICAgICBVaW50TGl0ZXJhbCwKKyAgICAgICAgICAgIEZs
b2F0TGl0ZXJhbCwKKyAgICAgICAgICAgIFN0cnVjdCwKKyAgICAgICAgICAgIFR5cGVkZWYsCisg
ICAgICAgICAgICBFbnVtLAorICAgICAgICAgICAgT3BlcmF0b3IsCisgICAgICAgICAgICBJZiwK
KyAgICAgICAgICAgIEVsc2UsCisgICAgICAgICAgICBDb250aW51ZSwKKyAgICAgICAgICAgIEJy
ZWFrLAorICAgICAgICAgICAgU3dpdGNoLAorICAgICAgICAgICAgQ2FzZSwKKyAgICAgICAgICAg
IERlZmF1bHQsCisgICAgICAgICAgICBGYWxsdGhyb3VnaCwKKyAgICAgICAgICAgIEZvciwKKyAg
ICAgICAgICAgIFdoaWxlLAorICAgICAgICAgICAgRG8sCisgICAgICAgICAgICBSZXR1cm4sCisg
ICAgICAgICAgICBUcmFwLAorICAgICAgICAgICAgTnVsbCwKKyAgICAgICAgICAgIFRydWUsCisg
ICAgICAgICAgICBGYWxzZSwKKyAgICAgICAgICAgIENvbnN0YW50LAorICAgICAgICAgICAgRGV2
aWNlLAorICAgICAgICAgICAgVGhyZWFkZ3JvdXAsCisgICAgICAgICAgICBUaHJlYWQsCisgICAg
ICAgICAgICBTcGFjZSwKKyAgICAgICAgICAgIFZlcnRleCwKKyAgICAgICAgICAgIEZyYWdtZW50
LAorICAgICAgICAgICAgQ29tcHV0ZSwKKyAgICAgICAgICAgIE51bVRocmVhZHMsCisgICAgICAg
ICAgICBTVkluc3RhbmNlSUQsCisgICAgICAgICAgICBTVlZlcnRleElELAorICAgICAgICAgICAg
UFNpemUsCisgICAgICAgICAgICBTVlBvc2l0aW9uLAorICAgICAgICAgICAgU1ZJc0Zyb250RmFj
ZSwKKyAgICAgICAgICAgIFNWU2FtcGxlSW5kZXgsCisgICAgICAgICAgICBTVklubmVyQ292ZXJh
Z2UsCisgICAgICAgICAgICBTVlRhcmdldCwKKyAgICAgICAgICAgIFNWRGVwdGgsCisgICAgICAg
ICAgICBTVkNvdmVyYWdlLAorICAgICAgICAgICAgU1ZEaXNwYXRjaFRocmVhZElELAorICAgICAg
ICAgICAgU1ZHcm91cElELAorICAgICAgICAgICAgU1ZHcm91cEluZGV4LAorICAgICAgICAgICAg
U1ZHcm91cFRocmVhZElELAorICAgICAgICAgICAgQXR0cmlidXRlLAorICAgICAgICAgICAgUmVn
aXN0ZXIsCisgICAgICAgICAgICBTcGVjaWFsaXplZCwKKyAgICAgICAgICAgIE5hdGl2ZSwKKyAg
ICAgICAgICAgIFJlc3RyaWN0ZWQsCisgICAgICAgICAgICBVbmRlcnNjb3JlLAorICAgICAgICAg
ICAgQXV0bywKKyAgICAgICAgICAgIFByb3RvY29sLAorICAgICAgICAgICAgQ29uc3QsCisgICAg
ICAgICAgICBTdGF0aWMsCisgICAgICAgICAgICBRdWFsaWZpZXIsCisgICAgICAgICAgICBJZGVu
dGlmaWVyLAorICAgICAgICAgICAgT3BlcmF0b3JOYW1lLAorICAgICAgICAgICAgRXF1YWxzU2ln
biwKKyAgICAgICAgICAgIFNlbWljb2xvbiwKKyAgICAgICAgICAgIExlZnRDdXJseUJyYWNrZXQs
CisgICAgICAgICAgICBSaWdodEN1cmx5QnJhY2tldCwKKyAgICAgICAgICAgIENvbG9uLAorICAg
ICAgICAgICAgQ29tbWEsCisgICAgICAgICAgICBMZWZ0UGFyZW50aGVzaXMsCisgICAgICAgICAg
ICBSaWdodFBhcmVudGhlc2lzLAorICAgICAgICAgICAgU3F1YXJlQnJhY2tldFBhaXIsCisgICAg
ICAgICAgICBMZWZ0U3F1YXJlQnJhY2tldCwKKyAgICAgICAgICAgIFJpZ2h0U3F1YXJlQnJhY2tl
dCwKKyAgICAgICAgICAgIFN0YXIsCisgICAgICAgICAgICBMZXNzVGhhblNpZ24sCisgICAgICAg
ICAgICBHcmVhdGVyVGhhblNpZ24sCisgICAgICAgICAgICBGdWxsU3RvcCwKKyAgICAgICAgICAg
IFBsdXNFcXVhbHMsCisgICAgICAgICAgICBNaW51c0VxdWFscywKKyAgICAgICAgICAgIFRpbWVz
RXF1YWxzLAorICAgICAgICAgICAgRGl2aWRlRXF1YWxzLAorICAgICAgICAgICAgTW9kRXF1YWxz
LAorICAgICAgICAgICAgWG9yRXF1YWxzLAorICAgICAgICAgICAgQW5kRXF1YWxzLAorICAgICAg
ICAgICAgT3JFcXVhbHMsCisgICAgICAgICAgICBSaWdodFNoaWZ0RXF1YWxzLAorICAgICAgICAg
ICAgTGVmdFNoaWZ0RXF1YWxzLAorICAgICAgICAgICAgUGx1c1BsdXMsCisgICAgICAgICAgICBN
aW51c01pbnVzLAorICAgICAgICAgICAgQXJyb3csCisgICAgICAgICAgICBRdWVzdGlvbk1hcmss
CisgICAgICAgICAgICBPck9yLAorICAgICAgICAgICAgQW5kQW5kLAorICAgICAgICAgICAgT3Is
CisgICAgICAgICAgICBYb3IsCisgICAgICAgICAgICBBbmQsCisgICAgICAgICAgICBMZXNzVGhh
bk9yRXF1YWxUbywKKyAgICAgICAgICAgIEdyZWF0ZXJUaGFuT3JFcXVhbFRvLAorICAgICAgICAg
ICAgRXF1YWxDb21wYXJpc29uLAorICAgICAgICAgICAgTm90RXF1YWwsCisgICAgICAgICAgICBS
aWdodFNoaWZ0LAorICAgICAgICAgICAgTGVmdFNoaWZ0LAorICAgICAgICAgICAgUGx1cywKKyAg
ICAgICAgICAgIE1pbnVzLAorICAgICAgICAgICAgRGl2aWRlLAorICAgICAgICAgICAgTW9kLAor
ICAgICAgICAgICAgVGlsZGUsCisgICAgICAgICAgICBFeGNsYW1hdGlvblBvaW50LAorICAgICAg
ICAgICAgQXQsCisgICAgICAgIH0gdHlwZTsKKworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciog
dHlwZU5hbWUoVHlwZSk7CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8VG9rZW4+IGNvbnN1
bWVUb2tlbigpCisgICAgeworICAgICAgICBpZiAoIW1fc3RhY2suaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVU
b2tlbkZyb21TdHJlYW0oKTsKKyAgICB9CisKKyAgICB2b2lkIHVuY29uc3VtZVRva2VuKFRva2Vu
JiYgdG9rZW4pCisgICAgeworICAgICAgICBtX3N0YWNrLmFwcGVuZChXVEZNb3ZlKHRva2VuKSk7
CisgICAgfQorCisgICAgc3RydWN0IFN0YXRlIHsKKyAgICAgICAgVmVjdG9yPFRva2VuPiBzdGFj
azsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBsaW5lTnVtYmVy
OworICAgIH07CisKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4geyBtX3N0YWNrLCBtX29mZnNldCwgbV9saW5lTnVtYmVyIH07CisgICAgfQorCisgICAgdm9p
ZCBzZXRTdGF0ZShjb25zdCBTdGF0ZSYgc3RhdGUpCisgICAgeworICAgICAgICBtX3N0YWNrID0g
c3RhdGUuc3RhY2s7CisgICAgICAgIG1fb2Zmc2V0ID0gc3RhdGUub2Zmc2V0OworICAgICAgICBt
X2xpbmVOdW1iZXIgPSBzdGF0ZS5saW5lTnVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0U3Rh
dGUoU3RhdGUmJiBzdGF0ZSkKKyAgICB7CisgICAgICAgIG1fc3RhY2sgPSBXVEZNb3ZlKHN0YXRl
LnN0YWNrKTsKKyAgICAgICAgbV9vZmZzZXQgPSBXVEZNb3ZlKHN0YXRlLm9mZnNldCk7CisgICAg
ICAgIG1fbGluZU51bWJlciA9IFdURk1vdmUoc3RhdGUubGluZU51bWJlcik7CisgICAgfQorCisg
ICAgYm9vbCBpc0Z1bGx5Q29uc3VtZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0ID09IG1fc3RyaW5nVmlldy5sZW5ndGgoKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZXJy
b3JTdHJpbmcoY29uc3QgVG9rZW4mIHRva2VuLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAg
eworICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlBhcnNlIGVycm9yIGF0IGxpbmUgJXU6
ICVzIiwgdG9rZW4ubGluZU51bWJlciwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgc3RkOjpvcHRpb25hbDxUb2tlbj4gY29uc3VtZVRva2VuRnJvbVN0cmVh
bSgpOworCisgICAgdm9pZCBza2lwV2hpdGVzcGFjZUFuZENvbW1lbnRzKCk7CisgICAgdm9pZCBz
a2lwV2hpdGVzcGFjZSgpOworICAgIHZvaWQgc2tpcExpbmVDb21tZW50KCk7CisgICAgdm9pZCBz
a2lwTG9uZ0NvbW1lbnQoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8VG9rZW46OlR5cGU+IHJlY29n
bml6ZUtleXdvcmQodW5zaWduZWQgZW5kKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IGNvcmVEZWNpbWFsSW50TGl0ZXJhbCh1bnNpZ25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gZGVjaW1hbEludExpdGVyYWwodW5zaWduZWQpIGNvbnN0OworICAgIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IGRlY2ltYWxVaW50TGl0ZXJhbCh1bnNpZ25lZCkgY29uc3Q7Cisg
ICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY29yZUhleGFkZWNpbWFsSW50TGl0ZXJhbCh1bnNp
Z25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gaGV4YWRlY2ltYWxJbnRM
aXRlcmFsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBoZXhh
ZGVjaW1hbFVpbnRMaXRlcmFsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBpbnRMaXRlcmFsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiB1aW50TGl0ZXJhbCh1bnNpZ25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gZGlnaXQodW5zaWduZWQpIGNvbnN0OworICAgIHVuc2lnbmVkIGRpZ2l0U3Rhcih1
bnNpZ25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY2hhcmFjdGVyKGNo
YXIsIHVuc2lnbmVkKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IGFueUNoYXJhY3Rlcihjb25zdCBjaGFyICgmc3RyaW5nKVtsZW5n
dGhdLCB1bnNpZ25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY29yZUZs
b2F0TGl0ZXJhbFR5cGUxKHVuc2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiBjb3JlRmxvYXRMaXRlcmFsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBmbG9hdExpdGVyYWwodW5zaWduZWQpIGNvbnN0OworICAgIHRlbXBsYXRlPHVu
c2lnbmVkIGxlbmd0aD4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3RyaW5nKGNvbnN0IGNoYXIg
KCZzdHJpbmcpW2xlbmd0aF0sIHVuc2lnbmVkKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiB2YWxpZElkZW50aWZpZXIodW5zaWduZWQpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IGlkZW50aWZpZXIodW5zaWduZWQpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IG9wZXJhdG9yTmFtZSh1bnNpZ25lZCkgY29uc3Q7CisKKyAgICBTdHJpbmdW
aWV3IG1fc3RyaW5nVmlldzsKKyAgICBWZWN0b3I8VG9rZW4+IG1fc3RhY2s7CisgICAgdW5zaWdu
ZWQgbV9vZmZzZXQgeyAwIH07CisgICAgdW5zaWduZWQgbV9saW5lTnVtYmVyIHsgMCB9OworfTsK
KwordGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBMZXhl
cjo6c3RyaW5nKGNvbnN0IGNoYXIgKCZzdHJpbmcpW2xlbmd0aF0sIHVuc2lnbmVkIG9mZnNldCkg
Y29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgKytpKSB7
CisgICAgICAgIGlmIChvZmZzZXQgKyBpID49IG1fc3RyaW5nVmlldy5sZW5ndGgoKSB8fCBtX3N0
cmluZ1ZpZXdbb2Zmc2V0ICsgaV0gIT0gc3RyaW5nW2ldKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICB9CisgICAgcmV0dXJuIG9mZnNldCArIGxlbmd0aCAtIDE7Cit9CisK
K3RlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6
OmFueUNoYXJhY3Rlcihjb25zdCBjaGFyICgmc3RyaW5nKVtsZW5ndGhdLCB1bnNpZ25lZCBvZmZz
ZXQpIGNvbnN0Cit7CisgICAgaWYgKG9mZnNldCA+PSBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aCAtIDE7ICsraSkgeworICAgICAgICBpZiAobV9zdHJpbmdWaWV3W29mZnNldF0gPT0g
c3RyaW5nW2ldKQorICAgICAgICAgICAgcmV0dXJuIG9mZnNldCArIDE7CisgICAgfQorICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5k
ZXggZTcwZGI4Mzk0NDFjODhmMTYwYTBmMmU2YjllMGU5YzU1MmQ2YTdkNC4uMmNjOTc5M2RhN2Q4
Nzc4MWVjMjdmY2EzYTUyOTc0YzE0OWFjMmViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMwMSw2ICsz
MDEsNyBAQCBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAogTW9kdWxl
cy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAogCiBNb2R1
bGVzL3dlYmdwdS9ET01XaW5kb3dXZWJHUFUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TExleGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV2Vi
R1BVQWRhcHRlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cExheW91dC5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA2M2U5YTY4M2ZmYTZlMWE0OTZjMDk3NDZmNzM0NTdmNmRmMWIwNDg1Li42MmNhY2FmY2Q3
YmQ0YzM2OGMxYTQwN2Q1MTVlNGUyZDUzNTA2NmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzIxMiw2ICsxMzIxMiw4IEBA
CiAJCUMxMUE5RUQyMjE0MDU3OEIwMENGQjIwQSAvKiBTd2l0Y2hpbmdHUFVDbGllbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3dpdGNoaW5nR1BVQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzFFMUQyMzUyMDNERjE1NDAwNTg0NjY1IC8qIFNjcmVlblByb3BlcnRp
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyZWVuUHJvcGVydGllcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMjAxNUMwOTFCRTZGRTJDMDA4MjIzODkgLyogRm9udFZhcmlhbnRCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRWYXJpYW50QnVpbGRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMjEwRTkxMTIxQjRCRDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIxMEU5MTIyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFERjJFNzFEOUU0RTk5MDBGNUIyNEMgLyogQ1NTRm9udFZhcmlhdGlvblZhbHVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMURGMkU4MUQ5RTRFOTkwMEY1QjI0
QyAvKiBDU1NGb250VmFyaWF0aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ1NTRm9udFZhcmlhdGlvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyNDU4RTYxMUZFODk3OUUwMDU5NDc1OSAvKiBGb250Q2FjaGVDb3JlVGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb250Q2FjaGVDb3JlVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjUyMTcsNiArMjUyMTksMTUgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJz
ID0gMDsKIAkJfTsKKwkJQzIxMEU5MEQyMUI0QkNBNDAwQjdGODNEIC8qIFdITFNMICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDMjEwRTkxMTIxQjRCRDEw
MDBCN0Y4M0QgLyogV0hMU0xMZXhlci5jcHAgKi8sCisJCQkJQzIxMEU5MTIyMUI0QkQxMDAwQjdG
ODNEIC8qIFdITFNMTGV4ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gV0hMU0w7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlDOTZGNUVCRjFCNTg3MjI2MDA5MUVBOUQgLyog
bWVkaWFzZXNzaW9uICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
QEAgLTI1NTU5LDYgKzI1NTcwLDcgQEAKIAkJRDAwRjU5M0UyMTZFQ0M0MzAwMEQ3MURCIC8qIHdl
YmdwdSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzIx
MEU5MEQyMUI0QkNBNDAwQjdGODNEIC8qIFdITFNMICovLAogCQkJCUQwMEY1OTQxMjE2RUNDN0Ew
MDBENzFEQiAvKiBET01XaW5kb3dXZWJHUFUuY3BwICovLAogCQkJCUQwMEY1OTQwMjE2RUNDN0Ew
MDBENzFEQiAvKiBET01XaW5kb3dXZWJHUFUuaCAqLywKIAkJCQlEMDBGNTk0MjIxNkVDQzdBMDAw
RDcxREIgLyogRE9NV2luZG93V2ViR1BVLmlkbCAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>