<?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>104537</bug_id>
          
          <creation_ts>2012-12-10 05:37:43 -0800</creation_ts>
          <short_desc>[chromium] Move the test implementation of WebKit::WebPlugin to the TestRunner library</short_desc>
          <delta_ts>2012-12-10 11:53:28 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>jochen</reporter>
          <assigned_to>jochen</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>787221</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-12-10 05:37:43 -0800</bug_when>
    <thetext>[chromium] Move the test implementation of WebKit::WebPlugin to the TestRunner library</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787224</commentid>
    <comment_count>1</comment_count>
      <attachid>178523</attachid>
    <who name="">jochen</who>
    <bug_when>2012-12-10 05:44:35 -0800</bug_when>
    <thetext>Created attachment 178523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787226</commentid>
    <comment_count>2</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-12-10 05:45:50 -0800</bug_when>
    <thetext>Darin, could you have a look please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787281</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-10 06:47:32 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787495</commentid>
    <comment_count>4</comment_count>
      <attachid>178523</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-10 10:27:50 -0800</bug_when>
    <thetext>Comment on attachment 178523
Patch

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

&gt; Tools/DumpRenderTree/chromium/TestRunner/public/WebTestPlugin.h:49
&gt; +    static WebTestPlugin* Create(WebKit::WebFrame*, const WebKit::WebPluginParams&amp;, WebTestDelegate*);

Create -&gt; create.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787546</commentid>
    <comment_count>5</comment_count>
      <attachid>178592</attachid>
    <who name="">jochen</who>
    <bug_when>2012-12-10 11:01:17 -0800</bug_when>
    <thetext>Created attachment 178592
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787547</commentid>
    <comment_count>6</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-12-10 11:01:47 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 178523 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178523&amp;action=review
&gt; 
&gt; &gt; Tools/DumpRenderTree/chromium/TestRunner/public/WebTestPlugin.h:49
&gt; &gt; +    static WebTestPlugin* Create(WebKit::WebFrame*, const WebKit::WebPluginParams&amp;, WebTestDelegate*);
&gt; 
&gt; Create -&gt; create.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787548</commentid>
    <comment_count>7</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-12-10 11:02:00 -0800</bug_when>
    <thetext>Darin, can you cq+ if you&apos;re ok with the change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787613</commentid>
    <comment_count>8</comment_count>
      <attachid>178592</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-10 11:53:24 -0800</bug_when>
    <thetext>Comment on attachment 178592
Patch for landing

Clearing flags on attachment: 178592

Committed r137193: &lt;http://trac.webkit.org/changeset/137193&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787614</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-10 11:53:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178523</attachid>
            <date>2012-12-10 05:44:35 -0800</date>
            <delta_ts>2012-12-10 11:01:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104537-20121210144157.patch</filename>
            <type>text/plain</type>
            <size>58039</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MTIwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDg1YmYxZjViMDI3ZDc0ZjVhMzQxZDY4ZGY1NTRiNmVj
NDcxOGZlZi4uOTM2N2NhMDQ0NzkzZjM5OTFmODUzYTIxMGQ4NGM2MTdlN2M5YTM0ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMw
IEBACisyMDEyLTEyLTEwICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSB0aGUgdGVzdCBpbXBsZW1lbnRhdGlvbiBvZiBXZWJL
aXQ6OldlYlBsdWdpbiB0byB0aGUgVGVzdFJ1bm5lciBsaWJyYXJ5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ1MzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBvcmRlciB0byBoaWRlIGltcGxlbWVu
dGF0aW9uIGRldGFpbHMgZnJvbSB0aGUgcHVibGljIFRlc3RSdW5uZXIgQVBJLAorICAgICAgICBJ
IG1vdmVkIHRoZSBwbHVnaW4gdG8gV2ViVGVzdFBsdWdpbkltcGwgYW5kIGFkZGVkIGEgc3RhdGlj
IENyZWF0ZQorICAgICAgICBtZXRob2QgdG8gV2ViVGVzdFBsdWdpbi4gQWxzbywgSSByZW5hbWVk
IHRoZSBwbHVnaW4gZnJvbSBUZXN0V2ViUGx1Z2luCisgICAgICAgIHRvIFdlYlRlc3RQbHVnaW4g
dG8gYmUgbW9yZSBpbiBsaW5lIHdpdGggb3RoZXIgY2xhc3NlcyBpbiB0aGUKKyAgICAgICAgVGVz
dFJ1bm5lciBBUEkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5n
eXBpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGlj
L1dlYlRlc3RQbHVnaW4uaDogQWRkZWQuCisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAg
ICAgKFdlYlRlc3RQbHVnaW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL1dlYlRlc3RQbHVnaW4uY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYlBsdWdpbi5jcHAuCisgICAgICAgIChXZWJUZXN0UnVu
bmVyOjpXZWJUZXN0UGx1Z2luOjpDcmVhdGUpOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6Cisg
ICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0UGx1Z2luOjpXZWJUZXN0UGx1Z2luKToKKyAg
ICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQbHVnaW46On5XZWJUZXN0UGx1Z2luKToKKyAg
ICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQbHVnaW46Om1pbWVUeXBlKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViUGx1Z2luLmg6IFJlbW92ZWQuCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwOgorICAgICAgICAo
V2ViVmlld0hvc3Q6OmNyZWF0ZVBsdWdpbik6CisKIDIwMTItMTItMTAgIE1paG5lYSBPdmlkZW5p
ZSAgPG1paG5lYUBhZG9iZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQWRkaW5nIE1paGFp
IE1hZXJlYW4gdG8gdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLCB3b3JraW5nIG9uIENTU1JlZ2lv
bnMuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBp
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQppbmRleCBkMzcyZmFj
ZmNjMjExNjA4MGVkYjdmYmM3ZjQwMzA3OWJlNjEwMjZkLi5lOTI2ZjMzNWZhMzY2YWY5N2Q1ZTEz
MWIxNTg0YjE1ZjEyZjJkMDQ0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5neXBpCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
Lmd5cGkKQEAgLTQ0LDggKzQ0LDYgQEAKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxT
dHViLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsV2luLmNwcCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcCcsCi0gICAgICAgICAgICAnY2hyb21p
dW0vVGVzdFdlYlBsdWdpbi5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RXZWJQbHVn
aW4uaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vV2ViUGVybWlzc2lvbnMuY3BwJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9XZWJQZXJtaXNzaW9ucy5oJywKICAgICAgICAgICAgICdjaHJvbWl1
bS9XZWJUaGVtZUNvbnRyb2xEUlRXaW4uY3BwJywKQEAgLTcwLDYgKzY4LDcgQEAKICAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJQcmVmZXJlbmNlcy5oJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUYXNrLmgnLAogICAgICAgICAg
ICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RJbnRlcmZhY2VzLmgnLAorICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQbHVnaW4uaCcsCiAg
ICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmgnLApAQCAtOTYsNiArOTUsNyBAQAogICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlByZWZlcmVuY2VzLmNwcCcsCiAg
ICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGFzay5jcHAnLAogICAgICAg
ICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RJbnRlcmZhY2VzLmNwcCcsCisg
ICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFBsdWdpbi5jcHAnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQcm94eS5jcHAnLAog
ICAgICAgICBdLAogICAgICAgICAndGVzdF9wbHVnaW5fZmlsZXMnOiBbCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UGx1
Z2luLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9X
ZWJUZXN0UGx1Z2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQyZmJkOWJlYWIxMzBiMzE4MDQxZjcwYjI3ZGU2
Njc0Y2ViOTZkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQbHVnaW4uaApAQCAtMCwwICsxLDYwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJUZXN0UGx1Z2luX2gKKyNkZWZpbmUgV2ViVGVzdFBsdWdpbl9oCisK
KyNpbmNsdWRlICJXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbi5oIgorCituYW1lc3Bh
Y2UgV2ViVGVzdFJ1bm5lciB7CisKK2NsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKKworLy8gQSBmYWtl
IGltcGxlbWVudGlvbiBvZiBXZWJLaXQ6OldlYlBsdWdpbiBmb3IgdGVzdGluZyBwdXJwb3Nlcy4K
Ky8vCisvLyBJdCB1c2VzIFdlYkdyYXBoaWNzQ29udGV4dDNEIHRvIHBhaW50IGEgc2NlbmUgY29u
c2lzaXRpbmcgb2YgYSBwcmltaXRpdmUKKy8vIG92ZXIgYSBiYWNrZ3JvdW5kLiBUaGUgcHJpbWl0
aXZlIGFuZCBiYWNrZ3JvdW5kIGNhbiBiZSBjdXN0b21pemVkIHVzaW5nCisvLyB0aGUgZm9sbG93
aW5nIHBsdWdpbiBwYXJhbWV0ZXJzOgorLy8gcHJpbWl0aXZlOiBub25lIChkZWZhdWx0KSwgdHJp
YW5nbGUuCisvLyBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjayAoZGVmYXVsdCksIHJlZCwgZ3JlZW4s
IGJsdWUuCisvLyBwcmltaXRpdmUtY29sb3I6IGJsYWNrIChkZWZhdWx0KSwgcmVkLCBncmVlbiwg
Ymx1ZS4KKy8vIG9wYWNpdHk6IFswLjAgLSAxLjBdLiBEZWZhdWx0IGlzIDEuMC4KKy8vCisvLyBX
aGV0aGVyIHRoZSBwbHVnaW4gYWNjZXB0cyB0b3VjaCBldmVudHMgb3Igbm90IGNhbiBiZSBjdXN0
b21pemVkIHVzaW5nIHRoZQorLy8gJ2FjY2VwdHMtdG91Y2gnIHBsdWdpbiBwYXJhbWV0ZXIgKGRl
ZmF1bHRzIHRvIGZhbHNlKS4KK2NsYXNzIFdlYlRlc3RQbHVnaW4gOiBwdWJsaWMgV2ViS2l0OjpX
ZWJQbHVnaW4geworcHVibGljOgorICAgIHN0YXRpYyBXZWJUZXN0UGx1Z2luKiBDcmVhdGUoV2Vi
S2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViUGx1Z2luUGFyYW1zJiwgV2ViVGVzdERl
bGVnYXRlKik7CisgICAgdmlydHVhbCB+V2ViVGVzdFBsdWdpbigpOworCisgICAgc3RhdGljIGNv
bnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtaW1lVHlwZSgpOworCitwcm90ZWN0ZWQ6CisgICAgV2Vi
VGVzdFBsdWdpbigpOworfTsKKworfQorCisjZW5kaWYgLy8gV2ViVGVzdFBsdWdpbl9oCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJU
ZXN0UGx1Z2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
c3JjL1dlYlRlc3RQbHVnaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzNGFiYmFhM2RjM2FkZDVmYWIwYTFh
NzNlNzdmMzVjNzBkY2NmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0UGx1Z2luLmNwcApAQCAtMCwwICsxLDYy
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJUZXN0UGx1Z2lu
LmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIK
KyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5Db250YWluZXIuaCIKKyNp
bmNsdWRlICJXZWJQbHVnaW5QYXJhbXMuaCIKKyNpbmNsdWRlICJXZWJUZXN0RGVsZWdhdGUuaCIK
KyNpbmNsdWRlICJXZWJUb3VjaFBvaW50LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQu
aCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgeworCituYW1lc3BhY2UgeworCisv
LyBHTGVudW0gdmFsdWVzIGNvcGllZCBmcm9tIGdsMi5oLgorI2RlZmluZSBHTF9GQUxTRSAgICAg
ICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfVFJVRSAgICAgICAgICAgICAgICAgICAxCisjZGVm
aW5lIEdMX09ORSAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHTF9UUklBTkdMRVMgICAg
ICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBICAgIDB4MDMw
MworI2RlZmluZSBHTF9ERVBUSF9URVNUICAgICAgICAgICAgIDB4MEI3MQorI2RlZmluZSBHTF9C
TEVORCAgICAgICAgICAgICAgICAgIDB4MEJFMgorI2RlZmluZSBHTF9TQ0lTU09SX1RFU1QgICAg
ICAgICAgIDB4MEI5MAorI2RlZmluZSBHTF9URVhUVVJFXzJEICAgICAgICAgICAgIDB4MERFMQor
I2RlZmluZSBHTF9GTE9BVCAgICAgICAgICAgICAgICAgIDB4MTQwNgorI2RlZmluZSBHTF9SR0JB
ICAgICAgICAgICAgICAgICAgIDB4MTkwOAorI2RlZmluZSBHTF9VTlNJR05FRF9CWVRFICAgICAg
ICAgIDB4MTQwMQorI2RlZmluZSBHTF9URVhUVVJFX01BR19GSUxURVIgICAgIDB4MjgwMAorI2Rl
ZmluZSBHTF9URVhUVVJFX01JTl9GSUxURVIgICAgIDB4MjgwMQorI2RlZmluZSBHTF9URVhUVVJF
X1dSQVBfUyAgICAgICAgIDB4MjgwMgorI2RlZmluZSBHTF9URVhUVVJFX1dSQVBfVCAgICAgICAg
IDB4MjgwMworI2RlZmluZSBHTF9ORUFSRVNUICAgICAgICAgICAgICAgIDB4MjYwMAorI2RlZmlu
ZSBHTF9DT0xPUl9CVUZGRVJfQklUICAgICAgIDB4NDAwMAorI2RlZmluZSBHTF9DTEFNUF9UT19F
REdFICAgICAgICAgIDB4ODEyRgorI2RlZmluZSBHTF9BUlJBWV9CVUZGRVIgICAgICAgICAgIDB4
ODg5MgorI2RlZmluZSBHTF9TVEFUSUNfRFJBVyAgICAgICAgICAgIDB4ODhFNAorI2RlZmluZSBH
TF9GUkFHTUVOVF9TSEFERVIgICAgICAgIDB4OEIzMAorI2RlZmluZSBHTF9WRVJURVhfU0hBREVS
ICAgICAgICAgIDB4OEIzMQorI2RlZmluZSBHTF9DT01QSUxFX1NUQVRVUyAgICAgICAgIDB4OEI4
MQorI2RlZmluZSBHTF9MSU5LX1NUQVRVUyAgICAgICAgICAgIDB4OEI4MgorI2RlZmluZSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCAgICAgIDB4OENFMAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9DT01Q
TEVURSAgIDB4OENENQorI2RlZmluZSBHTF9GUkFNRUJVRkZFUiAgICAgICAgICAgIDB4OEQ0MAor
Cit2b2lkIHByZW11bHRpcGx5QWxwaGEoY29uc3QgdW5zaWduZWQgY29sb3JJblszXSwgZmxvYXQg
YWxwaGEsIGZsb2F0IGNvbG9yT3V0WzRdKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsg
KytpKQorICAgICAgICBjb2xvck91dFtpXSA9IChjb2xvckluW2ldIC8gMjU1LjBmKSAqIGFscGhh
OworCisgICAgY29sb3JPdXRbM10gPSBhbHBoYTsKK30KKworY29uc3QgY2hhciogcG9pbnRTdGF0
ZShXZWJUb3VjaFBvaW50OjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7Cisg
ICAgY2FzZSBXZWJUb3VjaFBvaW50OjpTdGF0ZVJlbGVhc2VkOgorICAgICAgICByZXR1cm4gIlJl
bGVhc2VkIjsKKyAgICBjYXNlIFdlYlRvdWNoUG9pbnQ6OlN0YXRlUHJlc3NlZDoKKyAgICAgICAg
cmV0dXJuICJQcmVzc2VkIjsKKyAgICBjYXNlIFdlYlRvdWNoUG9pbnQ6OlN0YXRlTW92ZWQ6Cisg
ICAgICAgIHJldHVybiAiTW92ZWQiOworICAgIGNhc2UgV2ViVG91Y2hQb2ludDo6U3RhdGVDYW5j
ZWxsZWQ6CisgICAgICAgIHJldHVybiAiQ2FuY2VsbGVkIjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gIlVua25vd24iOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIHByaW50VG91Y2hMaXN0KFdlYlRlc3REZWxlZ2F0ZSog
ZGVsZWdhdGUsIGNvbnN0IFdlYlRvdWNoUG9pbnQqIHBvaW50cywgaW50IGxlbmd0aCkKK3sKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBkZWxlZ2F0ZS0+cHJp
bnRNZXNzYWdlKHN0ZDo6c3RyaW5nKCIqICIpICsgU3RyaW5nOjpudW1iZXIocG9pbnRzW2ldLnBv
c2l0aW9uLngpLmFzY2lpKCkuZGF0YSgpICsgIiwgIiArIFN0cmluZzo6bnVtYmVyKHBvaW50c1tp
XS5wb3NpdGlvbi55KS5hc2NpaSgpLmRhdGEoKSArICI6ICIgKyBwb2ludFN0YXRlKHBvaW50c1tp
XS5zdGF0ZSkgKyAiXG4iKTsKK30KKwordm9pZCBwcmludEV2ZW50RGV0YWlscyhXZWJUZXN0RGVs
ZWdhdGUqIGRlbGVnYXRlLCBjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAo
V2ViSW5wdXRFdmVudDo6aXNUb3VjaEV2ZW50VHlwZShldmVudC50eXBlKSkgeworICAgICAgICBj
b25zdCBXZWJUb3VjaEV2ZW50JiB0b3VjaCA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYlRvdWNoRXZl
bnQmPihldmVudCk7CisgICAgICAgIHByaW50VG91Y2hMaXN0KGRlbGVnYXRlLCB0b3VjaC50b3Vj
aGVzLCB0b3VjaC50b3VjaGVzTGVuZ3RoKTsKKyAgICAgICAgcHJpbnRUb3VjaExpc3QoZGVsZWdh
dGUsIHRvdWNoLmNoYW5nZWRUb3VjaGVzLCB0b3VjaC5jaGFuZ2VkVG91Y2hlc0xlbmd0aCk7Cisg
ICAgICAgIHByaW50VG91Y2hMaXN0KGRlbGVnYXRlLCB0b3VjaC50YXJnZXRUb3VjaGVzLCB0b3Vj
aC50YXJnZXRUb3VjaGVzTGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKFdlYklucHV0RXZlbnQ6Omlz
TW91c2VFdmVudFR5cGUoZXZlbnQudHlwZSkgfHwgZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50
OjpNb3VzZVdoZWVsKSB7CisgICAgICAgIGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCY+KGV2ZW50KTsKKyAgICAgICAgZGVsZWdhdGUt
PnByaW50TWVzc2FnZShzdGQ6OnN0cmluZygiKiAiKSArIFN0cmluZzo6bnVtYmVyKG1vdXNlLngp
LmFzY2lpKCkuZGF0YSgpICsgIiwgIiArIFN0cmluZzo6bnVtYmVyKG1vdXNlLnkpLmFzY2lpKCku
ZGF0YSgpICsgIlxuIik7CisgICAgfSBlbHNlIGlmIChXZWJJbnB1dEV2ZW50Ojppc0dlc3R1cmVF
dmVudFR5cGUoZXZlbnQudHlwZSkpIHsKKyAgICAgICAgY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBn
ZXN0dXJlID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViR2VzdHVyZUV2ZW50Jj4oZXZlbnQpOworICAg
ICAgICBkZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0ZDo6c3RyaW5nKCIqICIpICsgU3RyaW5nOjpu
dW1iZXIoZ2VzdHVyZS54KS5hc2NpaSgpLmRhdGEoKSArICIsICIgKyBTdHJpbmc6Om51bWJlcihn
ZXN0dXJlLnkpLmFzY2lpKCkuZGF0YSgpICsgIlxuIik7CisgICAgfQorfQorCitXZWJQbHVnaW5D
b250YWluZXI6OlRvdWNoRXZlbnRSZXF1ZXN0VHlwZSBwYXJzZVRvdWNoRXZlbnRSZXF1ZXN0VHlw
ZShjb25zdCBXZWJTdHJpbmcmIHN0cmluZykKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IFdlYlN0cmluZywga1ByaW1pdGl2ZVJhdywgKFdlYlN0cmluZzo6ZnJvbVVURjgoInJhdyIp
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBXZWJTdHJpbmcsIGtQcmltaXRpdmVT
eW50aGV0aWMsIChXZWJTdHJpbmc6OmZyb21VVEY4KCJzeW50aGV0aWMiKSkpOworCisgICAgaWYg
KHN0cmluZyA9PSBrUHJpbWl0aXZlUmF3KQorICAgICAgICByZXR1cm4gV2ViUGx1Z2luQ29udGFp
bmVyOjpUb3VjaEV2ZW50UmVxdWVzdFR5cGVSYXc7CisgICAgaWYgKHN0cmluZyA9PSBrUHJpbWl0
aXZlU3ludGhldGljKQorICAgICAgICByZXR1cm4gV2ViUGx1Z2luQ29udGFpbmVyOjpUb3VjaEV2
ZW50UmVxdWVzdFR5cGVTeW50aGVzaXplZE1vdXNlOworICAgIHJldHVybiBXZWJQbHVnaW5Db250
YWluZXI6OlRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmU7Cit9CisKK2NsYXNzIFdlYlRlc3RQbHVn
aW5JbXBsIDogcHVibGljIFdlYlRlc3RQbHVnaW4geworcHVibGljOgorICAgIFdlYlRlc3RQbHVn
aW5JbXBsKFdlYkZyYW1lKiwgY29uc3QgV2ViUGx1Z2luUGFyYW1zJiwgV2ViVGVzdERlbGVnYXRl
Kik7CisgICAgdmlydHVhbCB+V2ViVGVzdFBsdWdpbkltcGwoKTsKKworICAgIC8vIFdlYlBsdWdp
biBtZXRob2RzOgorICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKFdlYlBsdWdpbkNvbnRhaW5l
ciopOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisgICAgdmlydHVhbCBOUE9iamVjdCog
c2NyaXB0YWJsZU9iamVjdCgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuUHJv
Y2Vzc0RyYWcoKSBjb25zdCB7IHJldHVybiBtX2NhblByb2Nlc3NEcmFnOyB9CisgICAgdmlydHVh
bCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlR2VvbWV0cnkoY29uc3QgV2ViUmVjdCYgZnJhbWVSZWN0LCBjb25zdCBXZWJS
ZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViVmVjdG9yPFdlYlJlY3Q+JiBjdXRPdXRzUmVjdHMsIGJv
b2wgaXNWaXNpYmxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRm9jdXMoYm9vbCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2liaWxpdHkoYm9vbCkgeyB9CisgICAgdmlydHVhbCBi
b29sIGFjY2VwdHNJbnB1dEV2ZW50cygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiwgV2ViQ3Vyc29ySW5mbyYp
OworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVEcmFnU3RhdHVzVXBkYXRlKFdlYkRyYWdTdGF0dXMs
IGNvbnN0IFdlYkRyYWdEYXRhJiwgV2ViRHJhZ09wZXJhdGlvbnNNYXNrLCBjb25zdCBXZWJQb2lu
dCYgcG9zaXRpb24sIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb3NpdGlvbik7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJVUkxSZXNwb25zZSYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxl
bmd0aCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkRmFpbExvYWRpbmcoY29uc3QgV2ViVVJMRXJyb3ImKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0ZyYW1lUmVxdWVzdChjb25zdCBXZWJVUkwmLCB2
b2lkKiBub3RpZnlEYXRhKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbExvYWRpbmdGcmFt
ZVJlcXVlc3QoY29uc3QgV2ViVVJMJiwgdm9pZCogbm90aWZ5RGF0YSwgY29uc3QgV2ViVVJMRXJy
b3ImKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQbGFjZWhvbGRlcigpIHsgcmV0dXJuIGZhbHNl
OyB9CisKK3ByaXZhdGU6CisgICAgZW51bSBQcmltaXRpdmUgeworICAgICAgICBQcmltaXRpdmVO
b25lLAorICAgICAgICBQcmltaXRpdmVUcmlhbmdsZQorICAgIH07CisKKyAgICBzdHJ1Y3QgU2Nl
bmUgeworICAgICAgICBQcmltaXRpdmUgcHJpbWl0aXZlOworICAgICAgICB1bnNpZ25lZCBiYWNr
Z3JvdW5kQ29sb3JbM107CisgICAgICAgIHVuc2lnbmVkIHByaW1pdGl2ZUNvbG9yWzNdOworICAg
ICAgICBmbG9hdCBvcGFjaXR5OworCisgICAgICAgIHVuc2lnbmVkIHZibzsKKyAgICAgICAgdW5z
aWduZWQgcHJvZ3JhbTsKKyAgICAgICAgaW50IGNvbG9yTG9jYXRpb247CisgICAgICAgIGludCBw
b3NpdGlvbkxvY2F0aW9uOworCisgICAgICAgIFNjZW5lKCkKKyAgICAgICAgICAgIDogcHJpbWl0
aXZlKFByaW1pdGl2ZU5vbmUpCisgICAgICAgICAgICAsIG9wYWNpdHkoMS4wZikgLy8gRnVsbHkg
b3BhcXVlLgorICAgICAgICAgICAgLCB2Ym8oMCkKKyAgICAgICAgICAgICwgcHJvZ3JhbSgwKQor
ICAgICAgICAgICAgLCBjb2xvckxvY2F0aW9uKC0xKQorICAgICAgICAgICAgLCBwb3NpdGlvbkxv
Y2F0aW9uKC0xKQorICAgICAgICB7CisgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3JbMF0gPSBi
YWNrZ3JvdW5kQ29sb3JbMV0gPSBiYWNrZ3JvdW5kQ29sb3JbMl0gPSAwOworICAgICAgICAgICAg
cHJpbWl0aXZlQ29sb3JbMF0gPSBwcmltaXRpdmVDb2xvclsxXSA9IHByaW1pdGl2ZUNvbG9yWzJd
ID0gMDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBGdW5jdGlvbnMgZm9yIHBhcnNpbmcg
cGx1Z2luIHBhcmFtZXRlcnMuCisgICAgUHJpbWl0aXZlIHBhcnNlUHJpbWl0aXZlKGNvbnN0IFdl
YlN0cmluZyYpOworICAgIHZvaWQgcGFyc2VDb2xvcihjb25zdCBXZWJTdHJpbmcmLCB1bnNpZ25l
ZCBjb2xvclszXSk7CisgICAgZmxvYXQgcGFyc2VPcGFjaXR5KGNvbnN0IFdlYlN0cmluZyYpOwor
ICAgIGJvb2wgcGFyc2VCb29sZWFuKGNvbnN0IFdlYlN0cmluZyYpOworCisgICAgLy8gRnVuY3Rp
b25zIGZvciBsb2FkaW5nIGFuZCBkcmF3aW5nIHNjZW5lLgorICAgIGJvb2wgaW5pdFNjZW5lKCk7
CisgICAgdm9pZCBkcmF3U2NlbmUoKTsKKyAgICB2b2lkIGRlc3Ryb3lTY2VuZSgpOworICAgIGJv
b2wgaW5pdFByb2dyYW0oKTsKKyAgICBib29sIGluaXRQcmltaXRpdmUoKTsKKyAgICB2b2lkIGRy
YXdQcmltaXRpdmUoKTsKKyAgICB1bnNpZ25lZCBsb2FkU2hhZGVyKHVuc2lnbmVkIHR5cGUsIGNv
bnN0IFdURjo6Q1N0cmluZyYgc291cmNlKTsKKyAgICB1bnNpZ25lZCBsb2FkUHJvZ3JhbShjb25z
dCBXVEY6OkNTdHJpbmcmIHZlcnRleFNvdXJjZSwgY29uc3QgV1RGOjpDU3RyaW5nJiBmcmFnbWVu
dFNvdXJjZSk7CisKKyAgICBXZWJGcmFtZSogbV9mcmFtZTsKKyAgICBXZWJUZXN0RGVsZWdhdGUq
IG1fZGVsZWdhdGU7CisgICAgV2ViUGx1Z2luQ29udGFpbmVyKiBtX2NvbnRhaW5lcjsKKworICAg
IFdlYlJlY3QgbV9yZWN0OworICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Cisg
ICAgdW5zaWduZWQgbV9jb2xvclRleHR1cmU7CisgICAgdW5zaWduZWQgbV9mcmFtZWJ1ZmZlcjsK
KyAgICBTY2VuZSBtX3NjZW5lOworCisgICAgV2ViUGx1Z2luQ29udGFpbmVyOjpUb3VjaEV2ZW50
UmVxdWVzdFR5cGUgbV90b3VjaEV2ZW50UmVxdWVzdDsKKyAgICBib29sIG1fcHJpbnRFdmVudERl
dGFpbHM7CisgICAgYm9vbCBtX3ByaW50VXNlckdlc3R1cmVTdGF0dXM7CisgICAgYm9vbCBtX2Nh
blByb2Nlc3NEcmFnOworfTsKKworV2ViVGVzdFBsdWdpbkltcGw6OldlYlRlc3RQbHVnaW5JbXBs
KFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViUGx1Z2luUGFyYW1zJiBwYXJhbXMsIFdlYlRlc3RE
ZWxlZ2F0ZSogZGVsZWdhdGUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9kZWxlZ2F0
ZShkZWxlZ2F0ZSkKKyAgICAsIG1fY29udGFpbmVyKDApCisgICAgLCBtX2NvbnRleHQoMCkKKyAg
ICAsIG1fdG91Y2hFdmVudFJlcXVlc3QoV2ViUGx1Z2luQ29udGFpbmVyOjpUb3VjaEV2ZW50UmVx
dWVzdFR5cGVOb25lKQorICAgICwgbV9wcmludEV2ZW50RGV0YWlscyhmYWxzZSkKKyAgICAsIG1f
cHJpbnRVc2VyR2VzdHVyZVN0YXR1cyhmYWxzZSkKKyAgICAsIG1fY2FuUHJvY2Vzc0RyYWcoZmFs
c2UpCit7CisgICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrQXR0cmlidXRlUHJpbWl0aXZlID0g
V2ViU3RyaW5nOjpmcm9tVVRGOCgicHJpbWl0aXZlIik7CisgICAgc3RhdGljIGNvbnN0IFdlYlN0
cmluZyBrQXR0cmlidXRlQmFja2dyb3VuZENvbG9yID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmFj
a2dyb3VuZC1jb2xvciIpOworICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZVBy
aW1pdGl2ZUNvbG9yID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgicHJpbWl0aXZlLWNvbG9yIik7Cisg
ICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrQXR0cmlidXRlT3BhY2l0eSA9IFdlYlN0cmluZzo6
ZnJvbVVURjgoIm9wYWNpdHkiKTsKKyAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1
dGVBY2NlcHRzVG91Y2ggPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJhY2NlcHRzLXRvdWNoIik7Cisg
ICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrQXR0cmlidXRlUHJpbnRFdmVudERldGFpbHMgPSBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJwcmludC1ldmVudC1kZXRhaWxzIik7CisgICAgc3RhdGljIGNv
bnN0IFdlYlN0cmluZyBrQXR0cmlidXRlQ2FuUHJvY2Vzc0RyYWcgPSBXZWJTdHJpbmc6OmZyb21V
VEY4KCJjYW4tcHJvY2Vzcy1kcmFnIik7CisgICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrQXR0
cmlidXRlUHJpbnRVc2VyR2VzdHVyZVN0YXR1cyA9IFdlYlN0cmluZzo6ZnJvbVVURjgoInByaW50
LXVzZXItZ2VzdHVyZS1zdGF0dXMiKTsKKworICAgIEFTU0VSVChwYXJhbXMuYXR0cmlidXRlTmFt
ZXMuc2l6ZSgpID09IHBhcmFtcy5hdHRyaWJ1dGVWYWx1ZXMuc2l6ZSgpKTsKKyAgICBzaXplX3Qg
c2l6ZSA9IHBhcmFtcy5hdHRyaWJ1dGVOYW1lcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBhdHRyaWJ1dGVO
YW1lID0gcGFyYW1zLmF0dHJpYnV0ZU5hbWVzW2ldOworICAgICAgICBjb25zdCBXZWJTdHJpbmcm
IGF0dHJpYnV0ZVZhbHVlID0gcGFyYW1zLmF0dHJpYnV0ZVZhbHVlc1tpXTsKKworICAgICAgICBp
ZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlUHJpbWl0aXZlKQorICAgICAgICAgICAgbV9z
Y2VuZS5wcmltaXRpdmUgPSBwYXJzZVByaW1pdGl2ZShhdHRyaWJ1dGVWYWx1ZSk7CisgICAgICAg
IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0ga0F0dHJpYnV0ZUJhY2tncm91bmRDb2xvcikKKyAg
ICAgICAgICAgIHBhcnNlQ29sb3IoYXR0cmlidXRlVmFsdWUsIG1fc2NlbmUuYmFja2dyb3VuZENv
bG9yKTsKKyAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlUHJpbWl0
aXZlQ29sb3IpCisgICAgICAgICAgICBwYXJzZUNvbG9yKGF0dHJpYnV0ZVZhbHVlLCBtX3NjZW5l
LnByaW1pdGl2ZUNvbG9yKTsKKyAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0
cmlidXRlT3BhY2l0eSkKKyAgICAgICAgICAgIG1fc2NlbmUub3BhY2l0eSA9IHBhcnNlT3BhY2l0
eShhdHRyaWJ1dGVWYWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0ga0F0
dHJpYnV0ZUFjY2VwdHNUb3VjaCkKKyAgICAgICAgICAgIG1fdG91Y2hFdmVudFJlcXVlc3QgPSBw
YXJzZVRvdWNoRXZlbnRSZXF1ZXN0VHlwZShhdHRyaWJ1dGVWYWx1ZSk7CisgICAgICAgIGVsc2Ug
aWYgKGF0dHJpYnV0ZU5hbWUgPT0ga0F0dHJpYnV0ZVByaW50RXZlbnREZXRhaWxzKQorICAgICAg
ICAgICAgbV9wcmludEV2ZW50RGV0YWlscyA9IHBhcnNlQm9vbGVhbihhdHRyaWJ1dGVWYWx1ZSk7
CisgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0ga0F0dHJpYnV0ZUNhblByb2Nlc3NE
cmFnKQorICAgICAgICAgICAgbV9jYW5Qcm9jZXNzRHJhZyA9IHBhcnNlQm9vbGVhbihhdHRyaWJ1
dGVWYWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0ga0F0dHJpYnV0ZVBy
aW50VXNlckdlc3R1cmVTdGF0dXMpCisgICAgICAgICAgICBtX3ByaW50VXNlckdlc3R1cmVTdGF0
dXMgPSBwYXJzZUJvb2xlYW4oYXR0cmlidXRlVmFsdWUpOworICAgIH0KK30KKworV2ViVGVzdFBs
dWdpbkltcGw6On5XZWJUZXN0UGx1Z2luSW1wbCgpCit7Cit9CisKK2Jvb2wgV2ViVGVzdFBsdWdp
bkltcGw6OmluaXRpYWxpemUoV2ViUGx1Z2luQ29udGFpbmVyKiBjb250YWluZXIpCit7CisgICAg
V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgbV9jb250ZXh0ID0g
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZU9mZnNjcmVlbkdyYXBoaWNzQ29udGV4dDNE
KGF0dHJzKTsKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWluaXRTY2VuZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtX2NvbnRhaW5lciA9IGNvbnRhaW5lcjsKKyAgICBtX2NvbnRhaW5lci0+c2V0QmFja2lu
Z1RleHR1cmVJZChtX2NvbG9yVGV4dHVyZSk7CisgICAgbV9jb250YWluZXItPnJlcXVlc3RUb3Vj
aEV2ZW50VHlwZShtX3RvdWNoRXZlbnRSZXF1ZXN0KTsKKyAgICBtX2NvbnRhaW5lci0+c2V0V2Fu
dHNXaGVlbEV2ZW50cyh0cnVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJUZXN0
UGx1Z2luSW1wbDo6ZGVzdHJveSgpCit7CisgICAgZGVzdHJveVNjZW5lKCk7CisKKyAgICBkZWxl
dGUgbV9jb250ZXh0OworICAgIG1fY29udGV4dCA9IDA7CisKKyAgICBtX2NvbnRhaW5lciA9IDA7
CisgICAgbV9mcmFtZSA9IDA7Cit9CisKK3ZvaWQgV2ViVGVzdFBsdWdpbkltcGw6OnVwZGF0ZUdl
b21ldHJ5KGNvbnN0IFdlYlJlY3QmIGZyYW1lUmVjdCwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3Qs
IGNvbnN0IFdlYlZlY3RvcjxXZWJSZWN0PiYgY3V0T3V0c1JlY3RzLCBib29sIGlzVmlzaWJsZSkK
K3sKKyAgICBpZiAoY2xpcFJlY3QgPT0gbV9yZWN0KQorICAgICAgICByZXR1cm47CisgICAgbV9y
ZWN0ID0gY2xpcFJlY3Q7CisgICAgaWYgKG1fcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29udGV4dC0+cmVzaGFwZShtX3JlY3Qud2lkdGgsIG1fcmVjdC5oZWlnaHQp
OworICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV9yZWN0LndpZHRoLCBtX3JlY3QuaGVp
Z2h0KTsKKworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb2xv
clRleHR1cmUpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01BR19GSUxURVIsIEdMX05FQVJFU1QpOworICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1Qp
OworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICBtX2NvbnRleHQtPnRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV9yZWN0
LndpZHRoLCBtX3JlY3QuaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
KyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1
ZmZlcik7CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZF
UiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fY29sb3JUZXh0dXJlLCAw
KTsKKworICAgIGRyYXdTY2VuZSgpOworCisgICAgbV9jb250ZXh0LT5mbHVzaCgpOworICAgIG1f
Y29udGFpbmVyLT5jb21taXRCYWNraW5nVGV4dHVyZSgpOworfQorCitXZWJUZXN0UGx1Z2luSW1w
bDo6UHJpbWl0aXZlIFdlYlRlc3RQbHVnaW5JbXBsOjpwYXJzZVByaW1pdGl2ZShjb25zdCBXZWJT
dHJpbmcmIHN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtQcmltaXRpdmVO
b25lID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgibm9uZSIpOworICAgIHN0YXRpYyBjb25zdCBXZWJT
dHJpbmcga1ByaW1pdGl2ZVRyaWFuZ2xlID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgidHJpYW5nbGUi
KTsKKworICAgIFByaW1pdGl2ZSBwcmltaXRpdmUgPSBQcmltaXRpdmVOb25lOworICAgIGlmIChz
dHJpbmcgPT0ga1ByaW1pdGl2ZU5vbmUpCisgICAgICAgIHByaW1pdGl2ZSA9IFByaW1pdGl2ZU5v
bmU7CisgICAgZWxzZSBpZiAoc3RyaW5nID09IGtQcmltaXRpdmVUcmlhbmdsZSkKKyAgICAgICAg
cHJpbWl0aXZlID0gUHJpbWl0aXZlVHJpYW5nbGU7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gcHJpbWl0aXZlOworfQorCisvLyBGSVhNRTogVGhp
cyBtZXRob2Qgc2hvdWxkIGFscmVhZHkgZXhpc3QuIFVzZSBpdC4KKy8vIEZvciBub3cganVzdCBw
YXJzZSBwcmltYXJ5IGNvbG9ycy4KK3ZvaWQgV2ViVGVzdFBsdWdpbkltcGw6OnBhcnNlQ29sb3Io
Y29uc3QgV2ViU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIGNvbG9yWzNdKQoreworICAgIGNvbG9y
WzBdID0gY29sb3JbMV0gPSBjb2xvclsyXSA9IDA7CisgICAgaWYgKHN0cmluZyA9PSAiYmxhY2si
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3RyaW5nID09ICJyZWQiKQorICAgICAgICBj
b2xvclswXSA9IDI1NTsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gImdyZWVuIikKKyAgICAgICAg
Y29sb3JbMV0gPSAyNTU7CisgICAgZWxzZSBpZiAoc3RyaW5nID09ICJibHVlIikKKyAgICAgICAg
Y29sb3JbMl0gPSAyNTU7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworZmxvYXQgV2ViVGVzdFBsdWdpbkltcGw6OnBhcnNlT3BhY2l0eShjb25zdCBXZWJTdHJp
bmcmIHN0cmluZykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2Yoc3RyaW5n
LnV0ZjgoKS5kYXRhKCkpKTsKK30KKworYm9vbCBXZWJUZXN0UGx1Z2luSW1wbDo6cGFyc2VCb29s
ZWFuKGNvbnN0IFdlYlN0cmluZyYgc3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBXZWJTdHJp
bmcga1ByaW1pdGl2ZVRydWUgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0cnVlIik7CisgICAgcmV0
dXJuIHN0cmluZyA9PSBrUHJpbWl0aXZlVHJ1ZTsKK30KKworYm9vbCBXZWJUZXN0UGx1Z2luSW1w
bDo6aW5pdFNjZW5lKCkKK3sKKyAgICBmbG9hdCBjb2xvcls0XTsKKyAgICBwcmVtdWx0aXBseUFs
cGhhKG1fc2NlbmUuYmFja2dyb3VuZENvbG9yLCBtX3NjZW5lLm9wYWNpdHksIGNvbG9yKTsKKwor
ICAgIG1fY29sb3JUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgbV9m
cmFtZWJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKworICAgIG1fY29u
dGV4dC0+dmlld3BvcnQoMCwgMCwgbV9yZWN0LndpZHRoLCBtX3JlY3QuaGVpZ2h0KTsKKyAgICBt
X2NvbnRleHQtPmRpc2FibGUoR0xfREVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0LT5kaXNhYmxl
KEdMX1NDSVNTT1JfVEVTVCk7CisKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoY29sb3JbMF0s
IGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10pOworCisgICAgbV9jb250ZXh0LT5lbmFibGUo
R0xfQkxFTkQpOworICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVT
X1NSQ19BTFBIQSk7CisKKyAgICByZXR1cm4gbV9zY2VuZS5wcmltaXRpdmUgIT0gUHJpbWl0aXZl
Tm9uZSA/IGluaXRQcm9ncmFtKCkgJiYgaW5pdFByaW1pdGl2ZSgpIDogdHJ1ZTsKK30KKwordm9p
ZCBXZWJUZXN0UGx1Z2luSW1wbDo6ZHJhd1NjZW5lKCkKK3sKKyAgICBtX2NvbnRleHQtPnZpZXdw
b3J0KDAsIDAsIG1fcmVjdC53aWR0aCwgbV9yZWN0LmhlaWdodCk7CisgICAgbV9jb250ZXh0LT5j
bGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKKworICAgIGlmIChtX3NjZW5lLnByaW1pdGl2ZSAh
PSBQcmltaXRpdmVOb25lKQorICAgICAgICBkcmF3UHJpbWl0aXZlKCk7Cit9CisKK3ZvaWQgV2Vi
VGVzdFBsdWdpbkltcGw6OmRlc3Ryb3lTY2VuZSgpCit7CisgICAgaWYgKG1fc2NlbmUucHJvZ3Jh
bSkgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9zY2VuZS5wcm9ncmFtKTsK
KyAgICAgICAgbV9zY2VuZS5wcm9ncmFtID0gMDsKKyAgICB9CisgICAgaWYgKG1fc2NlbmUudmJv
KSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlQnVmZmVyKG1fc2NlbmUudmJvKTsKKyAgICAg
ICAgbV9zY2VuZS52Ym8gPSAwOworICAgIH0KKworICAgIGlmIChtX2ZyYW1lYnVmZmVyKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZlcik7CisgICAg
ICAgIG1fZnJhbWVidWZmZXIgPSAwOworICAgIH0KKworICAgIGlmIChtX2NvbG9yVGV4dHVyZSkg
eworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9jb2xvclRleHR1cmUpOworICAg
ICAgICBtX2NvbG9yVGV4dHVyZSA9IDA7CisgICAgfQorfQorCitib29sIFdlYlRlc3RQbHVnaW5J
bXBsOjppbml0UHJvZ3JhbSgpCit7CisgICAgY29uc3QgQ1N0cmluZyB2ZXJ0ZXhTb3VyY2UoCisg
ICAgICAgICJhdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjsgIFxuIgorICAgICAgICAidm9pZCBtYWlu
KCkgeyAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbjsg
XG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICk7CisKKyAg
ICBjb25zdCBDU3RyaW5nIGZyYWdtZW50U291cmNlKAorICAgICAgICAicHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7IFxuIgorICAgICAgICAidW5pZm9ybSB2ZWM0IGNvbG9yOyAgICAgIFxuIgorICAg
ICAgICAidm9pZCBtYWluKCkgeyAgICAgICAgICAgIFxuIgorICAgICAgICAiICBnbF9GcmFnQ29s
b3IgPSBjb2xvcjsgIFxuIgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgIFxuIgor
ICAgICk7CisKKyAgICBtX3NjZW5lLnByb2dyYW0gPSBsb2FkUHJvZ3JhbSh2ZXJ0ZXhTb3VyY2Us
IGZyYWdtZW50U291cmNlKTsKKyAgICBpZiAoIW1fc2NlbmUucHJvZ3JhbSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9zY2VuZS5jb2xvckxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRV
bmlmb3JtTG9jYXRpb24obV9zY2VuZS5wcm9ncmFtLCAiY29sb3IiKTsKKyAgICBtX3NjZW5lLnBv
c2l0aW9uTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG1fc2NlbmUucHJv
Z3JhbSwgInBvc2l0aW9uIik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVGVzdFBs
dWdpbkltcGw6OmluaXRQcmltaXRpdmUoKQoreworICAgIEFTU0VSVChtX3NjZW5lLnByaW1pdGl2
ZSA9PSBQcmltaXRpdmVUcmlhbmdsZSk7CisKKyAgICBtX3NjZW5lLnZibyA9IG1fY29udGV4dC0+
Y3JlYXRlQnVmZmVyKCk7CisgICAgaWYgKCFtX3NjZW5lLnZibykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgY29uc3QgZmxvYXQgdmVydGljZXNbXSA9IHsKKyAgICAgICAgMC4wZiwgIDAu
OGYsIDAuMGYsCisgICAgICAgIC0wLjhmLCAtMC44ZiwgMC4wZiwKKyAgICAgICAgMC44ZiwgLTAu
OGYsIDAuMGYgfTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBt
X3NjZW5lLnZibyk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdMX0FSUkFZX0JVRkZFUiwg
c2l6ZW9mKHZlcnRpY2VzKSwgMCwgR0xfU1RBVElDX0RSQVcpOworICAgIG1fY29udGV4dC0+YnVm
ZmVyU3ViRGF0YShHTF9BUlJBWV9CVUZGRVIsIDAsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2Vz
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJUZXN0UGx1Z2luSW1wbDo6ZHJhd1By
aW1pdGl2ZSgpCit7CisgICAgQVNTRVJUKG1fc2NlbmUucHJpbWl0aXZlID09IFByaW1pdGl2ZVRy
aWFuZ2xlKTsKKyAgICBBU1NFUlQobV9zY2VuZS52Ym8pOworICAgIEFTU0VSVChtX3NjZW5lLnBy
b2dyYW0pOworCisgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1fc2NlbmUucHJvZ3JhbSk7CisK
KyAgICAvLyBCaW5kIHByaW1pdGl2ZSBjb2xvci4KKyAgICBmbG9hdCBjb2xvcls0XTsKKyAgICBw
cmVtdWx0aXBseUFscGhhKG1fc2NlbmUucHJpbWl0aXZlQ29sb3IsIG1fc2NlbmUub3BhY2l0eSwg
Y29sb3IpOworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKG1fc2NlbmUuY29sb3JMb2NhdGlvbiwg
Y29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10pOworCisgICAgLy8gQmluZCBw
cmltaXRpdmUgdmVydGljZXMuCisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgbV9zY2VuZS52Ym8pOworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkobV9zY2VuZS5wb3NpdGlvbkxvY2F0aW9uKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YlBvaW50ZXIobV9zY2VuZS5wb3NpdGlvbkxvY2F0aW9uLCAzLCBHTF9GTE9BVCwgR0xfRkFMU0Us
IDAsIDApOworICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHTF9UUklBTkdMRVMsIDAsIDMpOwor
fQorCit1bnNpZ25lZCBXZWJUZXN0UGx1Z2luSW1wbDo6bG9hZFNoYWRlcih1bnNpZ25lZCB0eXBl
LCBjb25zdCBDU3RyaW5nJiBzb3VyY2UpCit7CisgICAgdW5zaWduZWQgc2hhZGVyID0gbV9jb250
ZXh0LT5jcmVhdGVTaGFkZXIodHlwZSk7CisgICAgaWYgKHNoYWRlcikgeworICAgICAgICBtX2Nv
bnRleHQtPnNoYWRlclNvdXJjZShzaGFkZXIsIHNvdXJjZS5kYXRhKCkpOworICAgICAgICBtX2Nv
bnRleHQtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKworICAgICAgICBpbnQgY29tcGlsZWQgPSAw
OworICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciwgR0xfQ09NUElMRV9TVEFU
VVMsICZjb21waWxlZCk7CisgICAgICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7CisgICAgICAgICAgICBzaGFkZXIgPSAwOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzaGFkZXI7Cit9CisKK3Vuc2lnbmVkIFdlYlRl
c3RQbHVnaW5JbXBsOjpsb2FkUHJvZ3JhbShjb25zdCBDU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIGNv
bnN0IENTdHJpbmcmIGZyYWdtZW50U291cmNlKQoreworICAgIHVuc2lnbmVkIHZlcnRleFNoYWRl
ciA9IGxvYWRTaGFkZXIoR0xfVkVSVEVYX1NIQURFUiwgdmVydGV4U291cmNlKTsKKyAgICB1bnNp
Z25lZCBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSLCBmcmFn
bWVudFNvdXJjZSk7CisgICAgdW5zaWduZWQgcHJvZ3JhbSA9IG1fY29udGV4dC0+Y3JlYXRlUHJv
Z3JhbSgpOworICAgIGlmICh2ZXJ0ZXhTaGFkZXIgJiYgZnJhZ21lbnRTaGFkZXIgJiYgcHJvZ3Jh
bSkgeworICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFk
ZXIpOworICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudFNo
YWRlcik7CisgICAgICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAg
ICAgaW50IGxpbmtlZCA9IDA7CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dy
YW0sIEdMX0xJTktfU1RBVFVTLCAmbGlua2VkKTsKKyAgICAgICAgaWYgKCFsaW5rZWQpIHsKKyAg
ICAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAg
IHByb2dyYW0gPSAwOworICAgICAgICB9CisgICAgfQorICAgIGlmICh2ZXJ0ZXhTaGFkZXIpCisg
ICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgaWYgKGZy
YWdtZW50U2hhZGVyKQorICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihmcmFnbWVudFNo
YWRlcik7CisKKyAgICByZXR1cm4gcHJvZ3JhbTsKK30KKworYm9vbCBXZWJUZXN0UGx1Z2luSW1w
bDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCwgV2ViQ3Vyc29y
SW5mbyYgaW5mbykKK3sKKyAgICBjb25zdCBjaGFyKiBldmVudE5hbWUgPSAwOworICAgIHN3aXRj
aCAoZXZlbnQudHlwZSkgeworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VW5kZWZpbmVkOiAgICAg
ICAgICAgZXZlbnROYW1lID0gInVua25vd24iOyBicmVhazsKKworICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6TW91c2VEb3duOiAgICAgICAgICAgZXZlbnROYW1lID0gIk1vdXNlRG93biI7IGJyZWFr
OworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VVcDogICAgICAgICAgICAgZXZlbnROYW1l
ID0gIk1vdXNlVXAiOyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlTW92ZTog
ICAgICAgICAgIGV2ZW50TmFtZSA9ICJNb3VzZU1vdmUiOyBicmVhazsKKyAgICBjYXNlIFdlYklu
cHV0RXZlbnQ6Ok1vdXNlRW50ZXI6ICAgICAgICAgIGV2ZW50TmFtZSA9ICJNb3VzZUVudGVyIjsg
YnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZUxlYXZlOiAgICAgICAgICBldmVu
dE5hbWUgPSAiTW91c2VMZWF2ZSI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6Q29u
dGV4dE1lbnU6ICAgICAgICAgZXZlbnROYW1lID0gIkNvbnRleHRNZW51IjsgYnJlYWs7CisKKyAg
ICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hlZWw6ICAgICAgICAgIGV2ZW50TmFtZSA9ICJN
b3VzZVdoZWVsIjsgYnJlYWs7CisKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlJhd0tleURvd246
ICAgICAgICAgIGV2ZW50TmFtZSA9ICJSYXdLZXlEb3duIjsgYnJlYWs7CisgICAgY2FzZSBXZWJJ
bnB1dEV2ZW50OjpLZXlEb3duOiAgICAgICAgICAgICBldmVudE5hbWUgPSAiS2V5RG93biI7IGJy
ZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6S2V5VXA6ICAgICAgICAgICAgICAgZXZlbnRO
YW1lID0gIktleVVwIjsgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpDaGFyOiAgICAg
ICAgICAgICAgICBldmVudE5hbWUgPSAiQ2hhciI7IGJyZWFrOworCisgICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46ICBldmVudE5hbWUgPSAiR2VzdHVyZVNjcm9sbEJl
Z2luIjsgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOiAg
ICBldmVudE5hbWUgPSAiR2VzdHVyZVNjcm9sbEVuZCI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5w
dXRFdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZTogZXZlbnROYW1lID0gIkdlc3R1cmVTY3JvbGxV
cGRhdGUiOyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0
OiAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlRmxpbmdTdGFydCI7IGJyZWFrOworICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nQ2FuY2VsOiAgZXZlbnROYW1lID0gIkdlc3R1cmVGbGlu
Z0NhbmNlbCI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcDogICAg
ICAgICAgZXZlbnROYW1lID0gIkdlc3R1cmVUYXAiOyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0
RXZlbnQ6Okdlc3R1cmVUYXBEb3duOiAgICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlVGFwRG93biI7
IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcENhbmNlbDogICAgZXZl
bnROYW1lID0gIkdlc3R1cmVUYXBDYW5jZWwiOyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZl
bnQ6Okdlc3R1cmVEb3VibGVUYXA6ICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlRG91YmxlVGFwIjsg
YnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVHdvRmluZ2VyVGFwOiBldmVu
dE5hbWUgPSAiR2VzdHVyZVR3b0ZpbmdlclRhcCI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6R2VzdHVyZUxvbmdQcmVzczogICAgZXZlbnROYW1lID0gIkdlc3R1cmVMb25nUHJlc3Mi
OyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVMb25nVGFwOiAgICAgIGV2
ZW50TmFtZSA9ICJHZXN0dXJlTG9uZ1RhcCI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVu
dDo6R2VzdHVyZVBpbmNoQmVnaW46ICAgZXZlbnROYW1lID0gIkdlc3R1cmVQaW5jaEJlZ2luIjsg
YnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hFbmQ6ICAgICBldmVu
dE5hbWUgPSAiR2VzdHVyZVBpbmNoRW5kIjsgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpHZXN0dXJlUGluY2hVcGRhdGU6ICBldmVudE5hbWUgPSAiR2VzdHVyZVBpbmNoVXBkYXRlIjsg
YnJlYWs7CisKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNoU3RhcnQ6ICAgICAgICAgIGV2
ZW50TmFtZSA9ICJUb3VjaFN0YXJ0IjsgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpU
b3VjaE1vdmU6ICAgICAgICAgICBldmVudE5hbWUgPSAiVG91Y2hNb3ZlIjsgYnJlYWs7CisgICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpUb3VjaEVuZDogICAgICAgICAgICBldmVudE5hbWUgPSAiVG91
Y2hFbmQiOyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNoQ2FuY2VsOiAgICAg
ICAgIGV2ZW50TmFtZSA9ICJUb3VjaENhbmNlbCI7IGJyZWFrOworICAgIH0KKworICAgIG1fZGVs
ZWdhdGUtPnByaW50TWVzc2FnZShzdGQ6OnN0cmluZygiUGx1Z2luIHJlY2VpdmVkIGV2ZW50OiAi
KSArIChldmVudE5hbWUgPyBldmVudE5hbWUgOiAidW5rbm93biIpICsgIlxuIik7CisgICAgaWYg
KG1fcHJpbnRFdmVudERldGFpbHMpCisgICAgICAgIHByaW50RXZlbnREZXRhaWxzKG1fZGVsZWdh
dGUsIGV2ZW50KTsKKyAgICBpZiAobV9wcmludFVzZXJHZXN0dXJlU3RhdHVzKQorICAgICAgICBt
X2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RkOjpzdHJpbmcoIiogIikgKyAobV9mcmFtZS0+aXNQ
cm9jZXNzaW5nVXNlckdlc3R1cmUoKSA/ICIiIDogIm5vdCAiKSArICJoYW5kbGluZyB1c2VyIGdl
c3R1cmVcbiIpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJUZXN0UGx1Z2luSW1w
bDo6aGFuZGxlRHJhZ1N0YXR1c1VwZGF0ZShXZWJEcmFnU3RhdHVzIGRyYWdTdGF0dXMsIGNvbnN0
IFdlYkRyYWdEYXRhJiwgV2ViRHJhZ09wZXJhdGlvbnNNYXNrLCBjb25zdCBXZWJQb2ludCYgcG9z
aXRpb24sIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb3NpdGlvbikKK3sKKyAgICBjb25zdCBjaGFy
KiBkcmFnU3RhdHVzTmFtZSA9IDA7CisgICAgc3dpdGNoIChkcmFnU3RhdHVzKSB7CisgICAgY2Fz
ZSBXZWJEcmFnU3RhdHVzRW50ZXI6CisgICAgICAgIGRyYWdTdGF0dXNOYW1lID0gIkRyYWdFbnRl
ciI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRHJhZ1N0YXR1c092ZXI6CisgICAgICAg
IGRyYWdTdGF0dXNOYW1lID0gIkRyYWdPdmVyIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
ZWJEcmFnU3RhdHVzTGVhdmU6CisgICAgICAgIGRyYWdTdGF0dXNOYW1lID0gIkRyYWdMZWF2ZSI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRHJhZ1N0YXR1c0Ryb3A6CisgICAgICAgIGRy
YWdTdGF0dXNOYW1lID0gIkRyYWdEcm9wIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJE
cmFnU3RhdHVzVW5rbm93bjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdGQ6OnN0cmluZygiUGx1Z2luIHJlY2VpdmVk
IGV2ZW50OiAiKSArIGRyYWdTdGF0dXNOYW1lICsgIlxuIik7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit9CisKK1dlYlRlc3RQbHVnaW4qIFdlYlRlc3RQbHVnaW46OkNyZWF0ZShXZWJGcmFtZSog
ZnJhbWUsIGNvbnN0IFdlYlBsdWdpblBhcmFtcyYgcGFyYW1zLCBXZWJUZXN0RGVsZWdhdGUqIGRl
bGVnYXRlKQoreworICAgIHJldHVybiBuZXcgV2ViVGVzdFBsdWdpbkltcGwoZnJhbWUsIHBhcmFt
cywgZGVsZWdhdGUpOworfQorCitXZWJUZXN0UGx1Z2luOjpXZWJUZXN0UGx1Z2luKCkKK3sKK30K
KworV2ViVGVzdFBsdWdpbjo6fldlYlRlc3RQbHVnaW4oKQoreworfQorCitjb25zdCBXZWJTdHJp
bmcmIFdlYlRlc3RQbHVnaW46Om1pbWVUeXBlKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgV2ViU3Ry
aW5nIGtNaW1lVHlwZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoImFwcGxpY2F0aW9uL3gtd2Via2l0
LXRlc3Qtd2VicGx1Z2luIik7CisgICAgcmV0dXJuIGtNaW1lVHlwZTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYlBsdWdpbi5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViUGx1Z2luLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDVjOWMyMzY4N2ZiNWNhNTVkZjMzOTZmZDBkZTc3M2U0ZDFm
OGQwZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViUGx1Z2luLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDUyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RXZWJQbHVnaW4uaCIKLQotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVkZSAiV2Vi
SW5wdXRFdmVudC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkdyYXBoaWNzQ29udGV4dDNELmgi
Ci0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1T
dXBwb3J0LmgiCi0jaW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiV2Vi
UGx1Z2luUGFyYW1zLmgiCi0jaW5jbHVkZSAiV2ViVG91Y2hQb2ludC5oIgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwotCi0vLyBHTGVudW0gdmFsdWVzIGNvcGllZCBmcm9tIGdsMi5oLgot
I2RlZmluZSBHTF9GQUxTRSAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR0xfVFJVRSAgICAg
ICAgICAgICAgICAgICAxCi0jZGVmaW5lIEdMX09ORSAgICAgICAgICAgICAgICAgICAgMQotI2Rl
ZmluZSBHTF9UUklBTkdMRVMgICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBHTF9PTkVfTUlO
VVNfU1JDX0FMUEhBICAgIDB4MDMwMwotI2RlZmluZSBHTF9ERVBUSF9URVNUICAgICAgICAgICAg
IDB4MEI3MQotI2RlZmluZSBHTF9CTEVORCAgICAgICAgICAgICAgICAgIDB4MEJFMgotI2RlZmlu
ZSBHTF9TQ0lTU09SX1RFU1QgICAgICAgICAgIDB4MEI5MAotI2RlZmluZSBHTF9URVhUVVJFXzJE
ICAgICAgICAgICAgIDB4MERFMQotI2RlZmluZSBHTF9GTE9BVCAgICAgICAgICAgICAgICAgIDB4
MTQwNgotI2RlZmluZSBHTF9SR0JBICAgICAgICAgICAgICAgICAgIDB4MTkwOAotI2RlZmluZSBH
TF9VTlNJR05FRF9CWVRFICAgICAgICAgIDB4MTQwMQotI2RlZmluZSBHTF9URVhUVVJFX01BR19G
SUxURVIgICAgIDB4MjgwMAotI2RlZmluZSBHTF9URVhUVVJFX01JTl9GSUxURVIgICAgIDB4Mjgw
MQotI2RlZmluZSBHTF9URVhUVVJFX1dSQVBfUyAgICAgICAgIDB4MjgwMgotI2RlZmluZSBHTF9U
RVhUVVJFX1dSQVBfVCAgICAgICAgIDB4MjgwMwotI2RlZmluZSBHTF9ORUFSRVNUICAgICAgICAg
ICAgICAgIDB4MjYwMAotI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUICAgICAgIDB4NDAwMAot
I2RlZmluZSBHTF9DTEFNUF9UT19FREdFICAgICAgICAgIDB4ODEyRgotI2RlZmluZSBHTF9BUlJB
WV9CVUZGRVIgICAgICAgICAgIDB4ODg5MgotI2RlZmluZSBHTF9TVEFUSUNfRFJBVyAgICAgICAg
ICAgIDB4ODhFNAotI2RlZmluZSBHTF9GUkFHTUVOVF9TSEFERVIgICAgICAgIDB4OEIzMAotI2Rl
ZmluZSBHTF9WRVJURVhfU0hBREVSICAgICAgICAgIDB4OEIzMQotI2RlZmluZSBHTF9DT01QSUxF
X1NUQVRVUyAgICAgICAgIDB4OEI4MQotI2RlZmluZSBHTF9MSU5LX1NUQVRVUyAgICAgICAgICAg
IDB4OEI4MgotI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMCAgICAgIDB4OENFMAotI2RlZmlu
ZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSAgIDB4OENENQotI2RlZmluZSBHTF9GUkFNRUJVRkZF
UiAgICAgICAgICAgIDB4OEQ0MAotCi1zdGF0aWMgdm9pZCBwcmVtdWx0aXBseUFscGhhKGNvbnN0
IHVuc2lnbmVkIGNvbG9ySW5bM10sIGZsb2F0IGFscGhhLCBmbG9hdCBjb2xvck91dFs0XSkKLXsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgY29sb3JPdXRbaV0gPSAo
Y29sb3JJbltpXSAvIDI1NS4wZikgKiBhbHBoYTsKLQotICAgIGNvbG9yT3V0WzNdID0gYWxwaGE7
Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBwb2ludFN0YXRlKFdlYktpdDo6V2ViVG91Y2hQb2lu
dDo6U3RhdGUgc3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgV2ViS2l0
OjpXZWJUb3VjaFBvaW50OjpTdGF0ZVJlbGVhc2VkOgotICAgICAgICByZXR1cm4gIlJlbGVhc2Vk
IjsKLSAgICBjYXNlIFdlYktpdDo6V2ViVG91Y2hQb2ludDo6U3RhdGVQcmVzc2VkOgotICAgICAg
ICByZXR1cm4gIlByZXNzZWQiOwotICAgIGNhc2UgV2ViS2l0OjpXZWJUb3VjaFBvaW50OjpTdGF0
ZU1vdmVkOgotICAgICAgICByZXR1cm4gIk1vdmVkIjsKLSAgICBjYXNlIFdlYktpdDo6V2ViVG91
Y2hQb2ludDo6U3RhdGVDYW5jZWxsZWQ6Ci0gICAgICAgIHJldHVybiAiQ2FuY2VsbGVkIjsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIlVua25vd24iOwotICAgIH0KLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwcmludFRv
dWNoTGlzdChjb25zdCBXZWJLaXQ6OldlYlRvdWNoUG9pbnQqIHBvaW50cywgaW50IGxlbmd0aCkK
LXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBwcmludGYo
IiogJWQsICVkOiAlc1xuIiwgcG9pbnRzW2ldLnBvc2l0aW9uLngsIHBvaW50c1tpXS5wb3NpdGlv
bi55LCBwb2ludFN0YXRlKHBvaW50c1tpXS5zdGF0ZSkpOwotfQotCi1zdGF0aWMgdm9pZCBwcmlu
dEV2ZW50RGV0YWlscyhjb25zdCBXZWJLaXQ6OldlYklucHV0RXZlbnQmIGV2ZW50KQotewotICAg
IGlmIChXZWJLaXQ6OldlYklucHV0RXZlbnQ6OmlzVG91Y2hFdmVudFR5cGUoZXZlbnQudHlwZSkp
IHsKLSAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50JiB0b3VjaCA9IHN0YXRpY19j
YXN0PGNvbnN0IFdlYktpdDo6V2ViVG91Y2hFdmVudCY+KGV2ZW50KTsKLSAgICAgICAgcHJpbnRU
b3VjaExpc3QodG91Y2gudG91Y2hlcywgdG91Y2gudG91Y2hlc0xlbmd0aCk7Ci0gICAgICAgIHBy
aW50VG91Y2hMaXN0KHRvdWNoLmNoYW5nZWRUb3VjaGVzLCB0b3VjaC5jaGFuZ2VkVG91Y2hlc0xl
bmd0aCk7Ci0gICAgICAgIHByaW50VG91Y2hMaXN0KHRvdWNoLnRhcmdldFRvdWNoZXMsIHRvdWNo
LnRhcmdldFRvdWNoZXNMZW5ndGgpOwotICAgIH0gZWxzZSBpZiAoV2ViS2l0OjpXZWJJbnB1dEV2
ZW50Ojppc01vdXNlRXZlbnRUeXBlKGV2ZW50LnR5cGUpIHx8IGV2ZW50LnR5cGUgPT0gV2ViS2l0
OjpXZWJJbnB1dEV2ZW50OjpNb3VzZVdoZWVsKSB7Ci0gICAgICAgIGNvbnN0IFdlYktpdDo6V2Vi
TW91c2VFdmVudCYgbW91c2UgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJLaXQ6OldlYk1vdXNlRXZl
bnQmPihldmVudCk7Ci0gICAgICAgIHByaW50ZigiKiAlZCwgJWRcbiIsIG1vdXNlLngsIG1vdXNl
LnkpOwotICAgIH0gZWxzZSBpZiAoV2ViS2l0OjpXZWJJbnB1dEV2ZW50Ojppc0dlc3R1cmVFdmVu
dFR5cGUoZXZlbnQudHlwZSkpIHsKLSAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJHZXN0dXJlRXZl
bnQmIGdlc3R1cmUgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCY+
KGV2ZW50KTsKLSAgICAgICAgcHJpbnRmKCIqICVkLCAlZFxuIiwgZ2VzdHVyZS54LCBnZXN0dXJl
LnkpOwotICAgIH0KLX0KLQotc3RhdGljIFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVyOjpUb3Vj
aEV2ZW50UmVxdWVzdFR5cGUgcGFyc2VUb3VjaEV2ZW50UmVxdWVzdFR5cGUoY29uc3QgV2ViU3Ry
aW5nJiBzdHJpbmcpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBXZWJTdHJpbmcs
IGtQcmltaXRpdmVSYXcsIChXZWJTdHJpbmc6OmZyb21VVEY4KCJyYXciKSkpOwotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgV2ViU3RyaW5nLCBrUHJpbWl0aXZlU3ludGhldGljLCAoV2Vi
U3RyaW5nOjpmcm9tVVRGOCgic3ludGhldGljIikpKTsKLQotICAgIGlmIChzdHJpbmcgPT0ga1By
aW1pdGl2ZVJhdykKLSAgICAgICAgcmV0dXJuIFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVyOjpU
b3VjaEV2ZW50UmVxdWVzdFR5cGVSYXc7Ci0gICAgaWYgKHN0cmluZyA9PSBrUHJpbWl0aXZlU3lu
dGhldGljKQotICAgICAgICByZXR1cm4gV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXI6OlRvdWNo
RXZlbnRSZXF1ZXN0VHlwZVN5bnRoZXNpemVkTW91c2U7Ci0gICAgcmV0dXJuIFdlYktpdDo6V2Vi
UGx1Z2luQ29udGFpbmVyOjpUb3VjaEV2ZW50UmVxdWVzdFR5cGVOb25lOwotfQotCi1UZXN0V2Vi
UGx1Z2luOjpUZXN0V2ViUGx1Z2luKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlBsdWdpblBhcmFtcyYgcGFyYW1z
KQotICAgIDogbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fY29udGFpbmVyKDApCi0gICAgLCBtX2Nv
bnRleHQoMCkKLSAgICAsIG1fdG91Y2hFdmVudFJlcXVlc3QoV2ViS2l0OjpXZWJQbHVnaW5Db250
YWluZXI6OlRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmUpCi0gICAgLCBtX3ByaW50RXZlbnREZXRh
aWxzKGZhbHNlKQotICAgICwgbV9wcmludFVzZXJHZXN0dXJlU3RhdHVzKGZhbHNlKQotICAgICwg
bV9jYW5Qcm9jZXNzRHJhZyhmYWxzZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtB
dHRyaWJ1dGVQcmltaXRpdmUgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJwcmltaXRpdmUiKTsKLSAg
ICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3IgPSBXZWJT
dHJpbmc6OmZyb21VVEY4KCJiYWNrZ3JvdW5kLWNvbG9yIik7Ci0gICAgc3RhdGljIGNvbnN0IFdl
YlN0cmluZyBrQXR0cmlidXRlUHJpbWl0aXZlQ29sb3IgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJw
cmltaXRpdmUtY29sb3IiKTsKLSAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1dGVP
cGFjaXR5ID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgib3BhY2l0eSIpOwotICAgIHN0YXRpYyBjb25z
dCBXZWJTdHJpbmcga0F0dHJpYnV0ZUFjY2VwdHNUb3VjaCA9IFdlYlN0cmluZzo6ZnJvbVVURjgo
ImFjY2VwdHMtdG91Y2giKTsKLSAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1dGVQ
cmludEV2ZW50RGV0YWlscyA9IFdlYlN0cmluZzo6ZnJvbVVURjgoInByaW50LWV2ZW50LWRldGFp
bHMiKTsKLSAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1dGVDYW5Qcm9jZXNzRHJh
ZyA9IFdlYlN0cmluZzo6ZnJvbVVURjgoImNhbi1wcm9jZXNzLWRyYWciKTsKLSAgICBzdGF0aWMg
Y29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1dGVQcmludFVzZXJHZXN0dXJlU3RhdHVzID0gV2ViU3Ry
aW5nOjpmcm9tVVRGOCgicHJpbnQtdXNlci1nZXN0dXJlLXN0YXR1cyIpOwotCi0gICAgQVNTRVJU
KHBhcmFtcy5hdHRyaWJ1dGVOYW1lcy5zaXplKCkgPT0gcGFyYW1zLmF0dHJpYnV0ZVZhbHVlcy5z
aXplKCkpOwotICAgIHNpemVfdCBzaXplID0gcGFyYW1zLmF0dHJpYnV0ZU5hbWVzLnNpemUoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBX
ZWJTdHJpbmcmIGF0dHJpYnV0ZU5hbWUgPSBwYXJhbXMuYXR0cmlidXRlTmFtZXNbaV07Ci0gICAg
ICAgIGNvbnN0IFdlYlN0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBwYXJhbXMuYXR0cmlidXRlVmFs
dWVzW2ldOwotCi0gICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVQcmltaXRp
dmUpCi0gICAgICAgICAgICBtX3NjZW5lLnByaW1pdGl2ZSA9IHBhcnNlUHJpbWl0aXZlKGF0dHJp
YnV0ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRl
QmFja2dyb3VuZENvbG9yKQotICAgICAgICAgICAgcGFyc2VDb2xvcihhdHRyaWJ1dGVWYWx1ZSwg
bV9zY2VuZS5iYWNrZ3JvdW5kQ29sb3IpOwotICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1l
ID09IGtBdHRyaWJ1dGVQcmltaXRpdmVDb2xvcikKLSAgICAgICAgICAgIHBhcnNlQ29sb3IoYXR0
cmlidXRlVmFsdWUsIG1fc2NlbmUucHJpbWl0aXZlQ29sb3IpOwotICAgICAgICBlbHNlIGlmIChh
dHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVPcGFjaXR5KQotICAgICAgICAgICAgbV9zY2VuZS5v
cGFjaXR5ID0gcGFyc2VPcGFjaXR5KGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
YXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlQWNjZXB0c1RvdWNoKQotICAgICAgICAgICAgbV90
b3VjaEV2ZW50UmVxdWVzdCA9IHBhcnNlVG91Y2hFdmVudFJlcXVlc3RUeXBlKGF0dHJpYnV0ZVZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlUHJpbnRF
dmVudERldGFpbHMpCi0gICAgICAgICAgICBtX3ByaW50RXZlbnREZXRhaWxzID0gcGFyc2VCb29s
ZWFuKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBr
QXR0cmlidXRlQ2FuUHJvY2Vzc0RyYWcpCi0gICAgICAgICAgICBtX2NhblByb2Nlc3NEcmFnID0g
cGFyc2VCb29sZWFuKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRl
TmFtZSA9PSBrQXR0cmlidXRlUHJpbnRVc2VyR2VzdHVyZVN0YXR1cykKLSAgICAgICAgICAgIG1f
cHJpbnRVc2VyR2VzdHVyZVN0YXR1cyA9IHBhcnNlQm9vbGVhbihhdHRyaWJ1dGVWYWx1ZSk7Ci0g
ICAgfQotfQotCi1UZXN0V2ViUGx1Z2luOjp+VGVzdFdlYlBsdWdpbigpCi17Ci19Ci0KLWNvbnN0
IFdlYlN0cmluZyYgVGVzdFdlYlBsdWdpbjo6bWltZVR5cGUoKQotewotICAgIHN0YXRpYyBjb25z
dCBXZWJTdHJpbmcga01pbWVUeXBlID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiYXBwbGljYXRpb24v
eC13ZWJraXQtdGVzdC13ZWJwbHVnaW4iKTsKLSAgICByZXR1cm4ga01pbWVUeXBlOwotfQotCi1i
b29sIFRlc3RXZWJQbHVnaW46OmluaXRpYWxpemUoV2ViUGx1Z2luQ29udGFpbmVyKiBjb250YWlu
ZXIpCi17Ci0gICAgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAg
bV9jb250ZXh0ID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZU9mZnNjcmVlbkdyYXBo
aWNzQ29udGV4dDNEKGF0dHJzKTsKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWluaXRTY2VuZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBtX2NvbnRhaW5lciA9IGNvbnRhaW5lcjsKLSAgICBtX2NvbnRhaW5l
ci0+c2V0QmFja2luZ1RleHR1cmVJZChtX2NvbG9yVGV4dHVyZSk7Ci0gICAgbV9jb250YWluZXIt
PnJlcXVlc3RUb3VjaEV2ZW50VHlwZShtX3RvdWNoRXZlbnRSZXF1ZXN0KTsKLSAgICBtX2NvbnRh
aW5lci0+c2V0V2FudHNXaGVlbEV2ZW50cyh0cnVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBUZXN0V2ViUGx1Z2luOjpkZXN0cm95KCkKLXsKLSAgICBkZXN0cm95U2NlbmUoKTsKLQot
ICAgIGRlbGV0ZSBtX2NvbnRleHQ7Ci0gICAgbV9jb250ZXh0ID0gMDsKLQotICAgIG1fY29udGFp
bmVyID0gMDsKLSAgICBtX2ZyYW1lID0gMDsKLX0KLQotdm9pZCBUZXN0V2ViUGx1Z2luOjp1cGRh
dGVHZW9tZXRyeShjb25zdCBXZWJSZWN0JiBmcmFtZVJlY3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViUmVjdD4mIGN1dE91dHNSZWN0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1Zpc2libGUpCi17
Ci0gICAgaWYgKGNsaXBSZWN0ID09IG1fcmVjdCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVj
dCA9IGNsaXBSZWN0OwotICAgIGlmIChtX3JlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvbnRleHQtPnJlc2hhcGUobV9yZWN0LndpZHRoLCBtX3JlY3QuaGVpZ2h0KTsK
LSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIG1fcmVjdC53aWR0aCwgbV9yZWN0LmhlaWdo
dCk7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29sb3JU
ZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9ORUFSRVNUKTsK
LSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
bV9jb250ZXh0LT50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fcmVjdC53
aWR0aCwgbV9yZWN0LmhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0g
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZnJhbWVidWZm
ZXIpOwotICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIs
IEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2NvbG9yVGV4dHVyZSwgMCk7
Ci0KLSAgICBkcmF3U2NlbmUoKTsKLQotICAgIG1fY29udGV4dC0+Zmx1c2goKTsKLSAgICBtX2Nv
bnRhaW5lci0+Y29tbWl0QmFja2luZ1RleHR1cmUoKTsKLX0KLQotVGVzdFdlYlBsdWdpbjo6UHJp
bWl0aXZlIFRlc3RXZWJQbHVnaW46OnBhcnNlUHJpbWl0aXZlKGNvbnN0IFdlYlN0cmluZyYgc3Ry
aW5nKQotewotICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga1ByaW1pdGl2ZU5vbmUgPSBXZWJT
dHJpbmc6OmZyb21VVEY4KCJub25lIik7Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrUHJp
bWl0aXZlVHJpYW5nbGUgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0cmlhbmdsZSIpOwotCi0gICAg
UHJpbWl0aXZlIHByaW1pdGl2ZSA9IFByaW1pdGl2ZU5vbmU7Ci0gICAgaWYgKHN0cmluZyA9PSBr
UHJpbWl0aXZlTm9uZSkKLSAgICAgICAgcHJpbWl0aXZlID0gUHJpbWl0aXZlTm9uZTsKLSAgICBl
bHNlIGlmIChzdHJpbmcgPT0ga1ByaW1pdGl2ZVRyaWFuZ2xlKQotICAgICAgICBwcmltaXRpdmUg
PSBQcmltaXRpdmVUcmlhbmdsZTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBwcmltaXRpdmU7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIG1ldGhvZCBz
aG91bGQgYWxyZWFkeSBleGlzdC4gVXNlIGl0LgotLy8gRm9yIG5vdyBqdXN0IHBhcnNlIHByaW1h
cnkgY29sb3JzLgotdm9pZCBUZXN0V2ViUGx1Z2luOjpwYXJzZUNvbG9yKGNvbnN0IFdlYlN0cmlu
ZyYgc3RyaW5nLCB1bnNpZ25lZCBjb2xvclszXSkKLXsKLSAgICBjb2xvclswXSA9IGNvbG9yWzFd
ID0gY29sb3JbMl0gPSAwOwotICAgIGlmIChzdHJpbmcgPT0gImJsYWNrIikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKHN0cmluZyA9PSAicmVkIikKLSAgICAgICAgY29sb3JbMF0gPSAyNTU7
Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJncmVlbiIpCi0gICAgICAgIGNvbG9yWzFdID0gMjU1
OwotICAgIGVsc2UgaWYgKHN0cmluZyA9PSAiYmx1ZSIpCi0gICAgICAgIGNvbG9yWzJdID0gMjU1
OwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWZsb2F0IFRl
c3RXZWJQbHVnaW46OnBhcnNlT3BhY2l0eShjb25zdCBXZWJTdHJpbmcmIHN0cmluZykKLXsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2Yoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsK
LX0KLQotYm9vbCBUZXN0V2ViUGx1Z2luOjpwYXJzZUJvb2xlYW4oY29uc3QgV2ViU3RyaW5nJiBz
dHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrUHJpbWl0aXZlVHJ1ZSA9IFdl
YlN0cmluZzo6ZnJvbVVURjgoInRydWUiKTsKLSAgICByZXR1cm4gc3RyaW5nID09IGtQcmltaXRp
dmVUcnVlOwotfQotCi1ib29sIFRlc3RXZWJQbHVnaW46OmluaXRTY2VuZSgpCi17Ci0gICAgZmxv
YXQgY29sb3JbNF07Ci0gICAgcHJlbXVsdGlwbHlBbHBoYShtX3NjZW5lLmJhY2tncm91bmRDb2xv
ciwgbV9zY2VuZS5vcGFjaXR5LCBjb2xvcik7Ci0KLSAgICBtX2NvbG9yVGV4dHVyZSA9IG1fY29u
dGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIG1fZnJhbWVidWZmZXIgPSBtX2NvbnRleHQtPmNy
ZWF0ZUZyYW1lYnVmZmVyKCk7Ci0KLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIG1fcmVj
dC53aWR0aCwgbV9yZWN0LmhlaWdodCk7Ci0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdMX0RFUFRI
X1RFU1QpOwotICAgIG1fY29udGV4dC0+ZGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotCi0gICAg
bV9jb250ZXh0LT5jbGVhckNvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9y
WzNdKTsKLQotICAgIG1fY29udGV4dC0+ZW5hYmxlKEdMX0JMRU5EKTsKLSAgICBtX2NvbnRleHQt
PmJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOwotCi0gICAgcmV0dXJu
IG1fc2NlbmUucHJpbWl0aXZlICE9IFByaW1pdGl2ZU5vbmUgPyBpbml0UHJvZ3JhbSgpICYmIGlu
aXRQcmltaXRpdmUoKSA6IHRydWU7Ci19Ci0KLXZvaWQgVGVzdFdlYlBsdWdpbjo6ZHJhd1NjZW5l
KCkKLXsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIG1fcmVjdC53aWR0aCwgbV9yZWN0
LmhlaWdodCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKLQot
ICAgIGlmIChtX3NjZW5lLnByaW1pdGl2ZSAhPSBQcmltaXRpdmVOb25lKQotICAgICAgICBkcmF3
UHJpbWl0aXZlKCk7Ci19Ci0KLXZvaWQgVGVzdFdlYlBsdWdpbjo6ZGVzdHJveVNjZW5lKCkKLXsK
LSAgICBpZiAobV9zY2VuZS5wcm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJv
Z3JhbShtX3NjZW5lLnByb2dyYW0pOwotICAgICAgICBtX3NjZW5lLnByb2dyYW0gPSAwOwotICAg
IH0KLSAgICBpZiAobV9zY2VuZS52Ym8pIHsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVCdWZm
ZXIobV9zY2VuZS52Ym8pOwotICAgICAgICBtX3NjZW5lLnZibyA9IDA7Ci0gICAgfQotCi0gICAg
aWYgKG1fZnJhbWVidWZmZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZl
cihtX2ZyYW1lYnVmZmVyKTsKLSAgICAgICAgbV9mcmFtZWJ1ZmZlciA9IDA7Ci0gICAgfQotCi0g
ICAgaWYgKG1fY29sb3JUZXh0dXJlKSB7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVy
ZShtX2NvbG9yVGV4dHVyZSk7Ci0gICAgICAgIG1fY29sb3JUZXh0dXJlID0gMDsKLSAgICB9Ci19
Ci0KLWJvb2wgVGVzdFdlYlBsdWdpbjo6aW5pdFByb2dyYW0oKQotewotICAgIGNvbnN0IENTdHJp
bmcgdmVydGV4U291cmNlKAotICAgICAgICAiYXR0cmlidXRlIHZlYzQgcG9zaXRpb247ICBcbiIK
LSAgICAgICAgInZvaWQgbWFpbigpIHsgICAgICAgICAgICAgXG4iCi0gICAgICAgICIgIGdsX1Bv
c2l0aW9uID0gcG9zaXRpb247IFxuIgotICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKLSAgICApOwotCi0gICAgY29uc3QgQ1N0cmluZyBmcmFnbWVudFNvdXJjZSgKLSAgICAg
ICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyBcbiIKLSAgICAgICAgInVuaWZvcm0gdmVjNCBj
b2xvcjsgICAgICBcbiIKLSAgICAgICAgInZvaWQgbWFpbigpIHsgICAgICAgICAgICBcbiIKLSAg
ICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7ICBcbiIKLSAgICAgICAgIn0gICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKLSAgICApOwotCi0gICAgbV9zY2VuZS5wcm9ncmFtID0gbG9hZFBy
b2dyYW0odmVydGV4U291cmNlLCBmcmFnbWVudFNvdXJjZSk7Ci0gICAgaWYgKCFtX3NjZW5lLnBy
b2dyYW0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fc2NlbmUuY29sb3JMb2NhdGlv
biA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc2NlbmUucHJvZ3JhbSwgImNvbG9y
Iik7Ci0gICAgbV9zY2VuZS5wb3NpdGlvbkxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRBdHRyaWJM
b2NhdGlvbihtX3NjZW5lLnByb2dyYW0sICJwb3NpdGlvbiIpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFRlc3RXZWJQbHVnaW46OmluaXRQcmltaXRpdmUoKQotewotICAgIEFTU0VSVCht
X3NjZW5lLnByaW1pdGl2ZSA9PSBQcmltaXRpdmVUcmlhbmdsZSk7Ci0KLSAgICBtX3NjZW5lLnZi
byA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7Ci0gICAgaWYgKCFtX3NjZW5lLnZibykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgZmxvYXQgdmVydGljZXNbXSA9IHsgMC4w
ZiwgIDAuOGYsIDAuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMC44ZiwgLTAu
OGYsIDAuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC44ZiwgLTAuOGYsIDAu
MGYgfTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3NjZW5l
LnZibyk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9m
KHZlcnRpY2VzKSwgMCwgR0xfU1RBVElDX0RSQVcpOwotICAgIG1fY29udGV4dC0+YnVmZmVyU3Vi
RGF0YShHTF9BUlJBWV9CVUZGRVIsIDAsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUZXN0V2ViUGx1Z2luOjpkcmF3UHJpbWl0aXZlKCkK
LXsKLSAgICBBU1NFUlQobV9zY2VuZS5wcmltaXRpdmUgPT0gUHJpbWl0aXZlVHJpYW5nbGUpOwot
ICAgIEFTU0VSVChtX3NjZW5lLnZibyk7Ci0gICAgQVNTRVJUKG1fc2NlbmUucHJvZ3JhbSk7Ci0K
LSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9zY2VuZS5wcm9ncmFtKTsKLQotICAgIC8vIEJp
bmQgcHJpbWl0aXZlIGNvbG9yLgotICAgIGZsb2F0IGNvbG9yWzRdOwotICAgIHByZW11bHRpcGx5
QWxwaGEobV9zY2VuZS5wcmltaXRpdmVDb2xvciwgbV9zY2VuZS5vcGFjaXR5LCBjb2xvcik7Ci0g
ICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV9zY2VuZS5jb2xvckxvY2F0aW9uLCBjb2xvclswXSwg
Y29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSk7Ci0KLSAgICAvLyBCaW5kIHByaW1pdGl2ZSB2
ZXJ0aWNlcy4KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3Nj
ZW5lLnZibyk7Ci0gICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3NjZW5l
LnBvc2l0aW9uTG9jYXRpb24pOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlciht
X3NjZW5lLnBvc2l0aW9uTG9jYXRpb24sIDMsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgMCk7Ci0g
ICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdMX1RSSUFOR0xFUywgMCwgMyk7Ci19Ci0KLXVuc2ln
bmVkIFRlc3RXZWJQbHVnaW46OmxvYWRTaGFkZXIodW5zaWduZWQgdHlwZSwgY29uc3QgQ1N0cmlu
ZyYgc291cmNlKQotewotICAgIHVuc2lnbmVkIHNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hh
ZGVyKHR5cGUpOwotICAgIGlmIChzaGFkZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zaGFkZXJT
b3VyY2Uoc2hhZGVyLCBzb3VyY2UuZGF0YSgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jb21waWxl
U2hhZGVyKHNoYWRlcik7Ci0KLSAgICAgICAgaW50IGNvbXBpbGVkID0gMDsKLSAgICAgICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAmY29tcGlsZWQp
OwotICAgICAgICBpZiAoIWNvbXBpbGVkKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZVNoYWRlcihzaGFkZXIpOwotICAgICAgICAgICAgc2hhZGVyID0gMDsKLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gc2hhZGVyOwotfQotCi11bnNpZ25lZCBUZXN0V2ViUGx1Z2luOjpsb2Fk
UHJvZ3JhbShjb25zdCBDU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nJiBmcmFnbWVudFNvdXJjZSkKLXsKLSAgICB1
bnNpZ25lZCB2ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRl
eFNvdXJjZSk7Ci0gICAgdW5zaWduZWQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKEdMX0ZS
QUdNRU5UX1NIQURFUiwgZnJhZ21lbnRTb3VyY2UpOwotICAgIHVuc2lnbmVkIHByb2dyYW0gPSBt
X2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICBpZiAodmVydGV4U2hhZGVyICYmIGZyYWdt
ZW50U2hhZGVyICYmIHByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIo
cHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKLSAgICAgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIo
cHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwotICAgICAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFt
KHByb2dyYW0pOwotCi0gICAgICAgIGludCBsaW5rZWQgPSAwOwotICAgICAgICBtX2NvbnRleHQt
PmdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9MSU5LX1NUQVRVUywgJmxpbmtlZCk7Ci0gICAgICAg
IGlmICghbGlua2VkKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJv
Z3JhbSk7Ci0gICAgICAgICAgICBwcm9ncmFtID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICBp
ZiAodmVydGV4U2hhZGVyKQotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhT
aGFkZXIpOwotICAgIGlmIChmcmFnbWVudFNoYWRlcikKLSAgICAgICAgbV9jb250ZXh0LT5kZWxl
dGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotCi0gICAgcmV0dXJuIHByb2dyYW07Ci19Ci0KLWJv
b2wgVGVzdFdlYlBsdWdpbjo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJLaXQ6OldlYklucHV0
RXZlbnQmIGV2ZW50LCBXZWJLaXQ6OldlYkN1cnNvckluZm8mIGluZm8pCi17Ci0gICAgY29uc3Qg
Y2hhciogZXZlbnROYW1lID0gMDsKLSAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKLSAgICBjYXNl
IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6VW5kZWZpbmVkOiAgICAgICAgICAgZXZlbnROYW1lID0g
InVua25vd24iOyBicmVhazsKLQotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpNb3Vz
ZURvd246ICAgICAgICAgICBldmVudE5hbWUgPSAiTW91c2VEb3duIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Ok1vdXNlVXA6ICAgICAgICAgICAgIGV2ZW50TmFtZSA9
ICJNb3VzZVVwIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Ok1vdXNl
TW92ZTogICAgICAgICAgIGV2ZW50TmFtZSA9ICJNb3VzZU1vdmUiOyBicmVhazsKLSAgICBjYXNl
IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6TW91c2VFbnRlcjogICAgICAgICAgZXZlbnROYW1lID0g
Ik1vdXNlRW50ZXIiOyBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRFdmVudDo6TW91
c2VMZWF2ZTogICAgICAgICAgZXZlbnROYW1lID0gIk1vdXNlTGVhdmUiOyBicmVhazsKLSAgICBj
YXNlIFdlYktpdDo6V2ViSW5wdXRFdmVudDo6Q29udGV4dE1lbnU6ICAgICAgICAgZXZlbnROYW1l
ID0gIkNvbnRleHRNZW51IjsgYnJlYWs7Ci0KLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRFdmVu
dDo6TW91c2VXaGVlbDogICAgICAgICAgZXZlbnROYW1lID0gIk1vdXNlV2hlZWwiOyBicmVhazsK
LQotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duOiAgICAgICAgICBl
dmVudE5hbWUgPSAiUmF3S2V5RG93biI7IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1
dEV2ZW50OjpLZXlEb3duOiAgICAgICAgICAgICBldmVudE5hbWUgPSAiS2V5RG93biI7IGJyZWFr
OwotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpLZXlVcDogICAgICAgICAgICAgICBl
dmVudE5hbWUgPSAiS2V5VXAiOyBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRFdmVu
dDo6Q2hhcjogICAgICAgICAgICAgICAgZXZlbnROYW1lID0gIkNoYXIiOyBicmVhazsKLQotICAg
IGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46ICBldmVudE5h
bWUgPSAiR2VzdHVyZVNjcm9sbEJlZ2luIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklu
cHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ6ICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlU2Nyb2xs
RW5kIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3Jv
bGxVcGRhdGU6IGV2ZW50TmFtZSA9ICJHZXN0dXJlU2Nyb2xsVXBkYXRlIjsgYnJlYWs7Ci0gICAg
Y2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0OiAgIGV2ZW50TmFt
ZSA9ICJHZXN0dXJlRmxpbmdTdGFydCI7IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1
dEV2ZW50OjpHZXN0dXJlRmxpbmdDYW5jZWw6ICBldmVudE5hbWUgPSAiR2VzdHVyZUZsaW5nQ2Fu
Y2VsIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXA6
ICAgICAgICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlVGFwIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJL
aXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3duOiAgICAgIGV2ZW50TmFtZSA9ICJHZXN0
dXJlVGFwRG93biI7IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0
dXJlVGFwQ2FuY2VsOiAgICBldmVudE5hbWUgPSAiR2VzdHVyZVRhcENhbmNlbCI7IGJyZWFrOwot
ICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRG91YmxlVGFwOiAgICBldmVu
dE5hbWUgPSAiR2VzdHVyZURvdWJsZVRhcCI7IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJJ
bnB1dEV2ZW50OjpHZXN0dXJlVHdvRmluZ2VyVGFwOiBldmVudE5hbWUgPSAiR2VzdHVyZVR3b0Zp
bmdlclRhcCI7IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJl
TG9uZ1ByZXNzOiAgICBldmVudE5hbWUgPSAiR2VzdHVyZUxvbmdQcmVzcyI7IGJyZWFrOwotICAg
IGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlTG9uZ1RhcDogICAgICBldmVudE5h
bWUgPSAiR2VzdHVyZUxvbmdUYXAiOyBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRF
dmVudDo6R2VzdHVyZVBpbmNoQmVnaW46ICAgZXZlbnROYW1lID0gIkdlc3R1cmVQaW5jaEJlZ2lu
IjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEVu
ZDogICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlUGluY2hFbmQiOyBicmVhazsKLSAgICBjYXNlIFdl
YktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoVXBkYXRlOiAgZXZlbnROYW1lID0gIkdl
c3R1cmVQaW5jaFVwZGF0ZSI7IGJyZWFrOwotCi0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZl
bnQ6OlRvdWNoU3RhcnQ6ICAgICAgICAgIGV2ZW50TmFtZSA9ICJUb3VjaFN0YXJ0IjsgYnJlYWs7
Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6OlRvdWNoTW92ZTogICAgICAgICAgIGV2
ZW50TmFtZSA9ICJUb3VjaE1vdmUiOyBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRF
dmVudDo6VG91Y2hFbmQ6ICAgICAgICAgICAgZXZlbnROYW1lID0gIlRvdWNoRW5kIjsgYnJlYWs7
Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6OlRvdWNoQ2FuY2VsOiAgICAgICAgIGV2
ZW50TmFtZSA9ICJUb3VjaENhbmNlbCI7IGJyZWFrOwotICAgIH0KLQotICAgIHByaW50ZigiUGx1
Z2luIHJlY2VpdmVkIGV2ZW50OiAlc1xuIiwgZXZlbnROYW1lID8gZXZlbnROYW1lIDogInVua25v
d24iKTsKLSAgICBpZiAobV9wcmludEV2ZW50RGV0YWlscykKLSAgICAgICAgcHJpbnRFdmVudERl
dGFpbHMoZXZlbnQpOwotICAgIGlmIChtX3ByaW50VXNlckdlc3R1cmVTdGF0dXMpCi0gICAgICAg
IHByaW50ZigiKiAlc2hhbmRsaW5nIHVzZXIgZ2VzdHVyZVxuIiwgbV9mcmFtZS0+aXNQcm9jZXNz
aW5nVXNlckdlc3R1cmUoKSA/ICIiIDogIm5vdCAiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgVGVzdFdlYlBsdWdpbjo6aGFuZGxlRHJhZ1N0YXR1c1VwZGF0ZShXZWJLaXQ6OldlYkRy
YWdTdGF0dXMgZHJhZ1N0YXR1cywgY29uc3QgV2ViS2l0OjpXZWJEcmFnRGF0YSYsIFdlYktpdDo6
V2ViRHJhZ09wZXJhdGlvbnNNYXNrLCBjb25zdCBXZWJLaXQ6OldlYlBvaW50JiBwb3NpdGlvbiwg
Y29uc3QgV2ViS2l0OjpXZWJQb2ludCYgc2NyZWVuUG9zaXRpb24pCi17Ci0gICAgY29uc3QgY2hh
ciogZHJhZ1N0YXR1c05hbWUgPSAwOwotICAgIHN3aXRjaCAoZHJhZ1N0YXR1cykgewotICAgIGNh
c2UgV2ViS2l0OjpXZWJEcmFnU3RhdHVzRW50ZXI6Ci0gICAgICAgIGRyYWdTdGF0dXNOYW1lID0g
IkRyYWdFbnRlciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJEcmFnU3Rh
dHVzT3ZlcjoKLSAgICAgICAgZHJhZ1N0YXR1c05hbWUgPSAiRHJhZ092ZXIiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViRHJhZ1N0YXR1c0xlYXZlOgotICAgICAgICBkcmFn
U3RhdHVzTmFtZSA9ICJEcmFnTGVhdmUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktp
dDo6V2ViRHJhZ1N0YXR1c0Ryb3A6Ci0gICAgICAgIGRyYWdTdGF0dXNOYW1lID0gIkRyYWdEcm9w
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYkRyYWdTdGF0dXNVbmtub3du
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcHJpbnRmKCJQbHVn
aW4gcmVjZWl2ZWQgZXZlbnQ6ICVzXG4iLCBkcmFnU3RhdHVzTmFtZSk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
V2ViUGx1Z2luLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViUGx1Z2lu
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1Y2RmODVkMWI2M2U0ZWZlMGUzOTEz
ZGVlNjEwMTEzMjM2YzA0OTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYlBsdWdpbi5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRlc3RXZWJQbHVn
aW5faAotI2RlZmluZSBUZXN0V2ViUGx1Z2luX2gKLQotI2luY2x1ZGUgIldlYlBsdWdpbi5oIgot
I2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlJl
Y3QuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsK
LX0KLQotLy8gQSBmYWtlIGltcGxlbWVudGlvbiBvZiBXZWJLaXQ6OldlYlBsdWdpbiBmb3IgdGVz
dGluZyBwdXJwb3Nlcy4KLS8vCi0vLyBJdCB1c2VzIFdlYkdyYXBoaWNzQ29udGV4dDNEIHRvIHBh
aW50IGEgc2NlbmUgY29uc2lzaXRpbmcgb2YgYSBwcmltaXRpdmUKLS8vIG92ZXIgYSBiYWNrZ3Jv
dW5kLiBUaGUgcHJpbWl0aXZlIGFuZCBiYWNrZ3JvdW5kIGNhbiBiZSBjdXN0b21pemVkIHVzaW5n
Ci0vLyB0aGUgZm9sbG93aW5nIHBsdWdpbiBwYXJhbWV0ZXJzOgotLy8gcHJpbWl0aXZlOiBub25l
IChkZWZhdWx0KSwgdHJpYW5nbGUuCi0vLyBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjayAoZGVmYXVs
dCksIHJlZCwgZ3JlZW4sIGJsdWUuCi0vLyBwcmltaXRpdmUtY29sb3I6IGJsYWNrIChkZWZhdWx0
KSwgcmVkLCBncmVlbiwgYmx1ZS4KLS8vIG9wYWNpdHk6IFswLjAgLSAxLjBdLiBEZWZhdWx0IGlz
IDEuMC4KLS8vCi0vLyBXaGV0aGVyIHRoZSBwbHVnaW4gYWNjZXB0cyB0b3VjaCBldmVudHMgb3Ig
bm90IGNhbiBiZSBjdXN0b21pemVkIHVzaW5nIHRoZQotLy8gJ2FjY2VwdHMtdG91Y2gnIHBsdWdp
biBwYXJhbWV0ZXIgKGRlZmF1bHRzIHRvIGZhbHNlKS4KLWNsYXNzIFRlc3RXZWJQbHVnaW4gOiBw
dWJsaWMgV2ViS2l0OjpXZWJQbHVnaW4gewotcHVibGljOgotICAgIFRlc3RXZWJQbHVnaW4oV2Vi
S2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViUGx1Z2luUGFyYW1zJik7Ci0gICAgdmly
dHVhbCB+VGVzdFdlYlBsdWdpbigpOwotCi0gICAgc3RhdGljIGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiBtaW1lVHlwZSgpOwotCi0gICAgLy8gV2ViUGx1Z2luIG1ldGhvZHM6Ci0gICAgdmlydHVh
bCBib29sIGluaXRpYWxpemUoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXIqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSgpOwotICAgIHZpcnR1YWwgTlBPYmplY3QqIHNjcmlwdGFibGVPYmpl
Y3QoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBib29sIGNhblByb2Nlc3NEcmFnKCkgY29u
c3QgeyByZXR1cm4gbV9jYW5Qcm9jZXNzRHJhZzsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludChX
ZWJLaXQ6OldlYkNhbnZhcyosIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVHZW9tZXRyeShjb25zdCBXZWJLaXQ6OldlYlJlY3QmIGZyYW1lUmVjdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJSZWN0JiBj
bGlwUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0OjpX
ZWJWZWN0b3I8V2ViS2l0OjpXZWJSZWN0PiYgY3V0T3V0c1JlY3RzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGlzVmlzaWJsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUZvY3VzKGJvb2wpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaXNpYmlsaXR5KGJvb2wp
IHsgfQotICAgIHZpcnR1YWwgYm9vbCBhY2NlcHRzSW5wdXRFdmVudHMoKSB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViS2l0OjpXZWJJ
bnB1dEV2ZW50JiwgV2ViS2l0OjpXZWJDdXJzb3JJbmZvJik7Ci0gICAgdmlydHVhbCBib29sIGhh
bmRsZURyYWdTdGF0dXNVcGRhdGUoV2ViS2l0OjpXZWJEcmFnU3RhdHVzLCBjb25zdCBXZWJLaXQ6
OldlYkRyYWdEYXRhJiwgV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uc01hc2ssIGNvbnN0IFdlYktp
dDo6V2ViUG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJLaXQ6OldlYlBvaW50JiBzY3JlZW5Qb3Np
dGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJLaXQ6
OldlYlVSTFJlc3BvbnNlJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGluZyhjb25z
dCBXZWJLaXQ6OldlYlVSTEVycm9yJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmdGcmFtZVJlcXVlc3QoY29uc3QgV2ViS2l0OjpXZWJVUkwmLCB2b2lkKiBub3RpZnlEYXRh
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbExvYWRpbmdGcmFtZVJlcXVlc3QoY29uc3Qg
V2ViS2l0OjpXZWJVUkwmLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBXZWJLaXQ6OldlYlVSTEVy
cm9yJikgeyB9Ci0gICAgdmlydHVhbCBib29sIGlzUGxhY2Vob2xkZXIoKSB7IHJldHVybiBmYWxz
ZTsgfQotCi1wcml2YXRlOgotICAgIGVudW0gUHJpbWl0aXZlIHsKLSAgICAgICAgUHJpbWl0aXZl
Tm9uZSwKLSAgICAgICAgUHJpbWl0aXZlVHJpYW5nbGUKLSAgICB9OwotCi0gICAgc3RydWN0IFNj
ZW5lIHsKLSAgICAgICAgUHJpbWl0aXZlIHByaW1pdGl2ZTsKLSAgICAgICAgdW5zaWduZWQgYmFj
a2dyb3VuZENvbG9yWzNdOwotICAgICAgICB1bnNpZ25lZCBwcmltaXRpdmVDb2xvclszXTsKLSAg
ICAgICAgZmxvYXQgb3BhY2l0eTsKLQotICAgICAgICB1bnNpZ25lZCB2Ym87Ci0gICAgICAgIHVu
c2lnbmVkIHByb2dyYW07Ci0gICAgICAgIGludCBjb2xvckxvY2F0aW9uOwotICAgICAgICBpbnQg
cG9zaXRpb25Mb2NhdGlvbjsKLQotICAgICAgICBTY2VuZSgpCi0gICAgICAgICAgICA6IHByaW1p
dGl2ZShQcmltaXRpdmVOb25lKQotICAgICAgICAgICAgLCBvcGFjaXR5KDEuMGYpIC8vIEZ1bGx5
IG9wYXF1ZS4KLSAgICAgICAgICAgICwgdmJvKDApCi0gICAgICAgICAgICAsIHByb2dyYW0oMCkK
LSAgICAgICAgICAgICwgY29sb3JMb2NhdGlvbigtMSkKLSAgICAgICAgICAgICwgcG9zaXRpb25M
b2NhdGlvbigtMSkKLSAgICAgICAgewotICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yWzBdID0g
YmFja2dyb3VuZENvbG9yWzFdID0gYmFja2dyb3VuZENvbG9yWzJdID0gMDsKLSAgICAgICAgICAg
IHByaW1pdGl2ZUNvbG9yWzBdID0gcHJpbWl0aXZlQ29sb3JbMV0gPSBwcmltaXRpdmVDb2xvclsy
XSA9IDA7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gRnVuY3Rpb25zIGZvciBwYXJzaW5n
IHBsdWdpbiBwYXJhbWV0ZXJzLgotICAgIFByaW1pdGl2ZSBwYXJzZVByaW1pdGl2ZShjb25zdCBX
ZWJLaXQ6OldlYlN0cmluZyYpOwotICAgIHZvaWQgcGFyc2VDb2xvcihjb25zdCBXZWJLaXQ6Oldl
YlN0cmluZyYsIHVuc2lnbmVkIGNvbG9yWzNdKTsKLSAgICBmbG9hdCBwYXJzZU9wYWNpdHkoY29u
c3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKLSAgICBib29sIHBhcnNlQm9vbGVhbihjb25zdCBXZWJL
aXQ6OldlYlN0cmluZyYpOwotCi0gICAgLy8gRnVuY3Rpb25zIGZvciBsb2FkaW5nIGFuZCBkcmF3
aW5nIHNjZW5lLgotICAgIGJvb2wgaW5pdFNjZW5lKCk7Ci0gICAgdm9pZCBkcmF3U2NlbmUoKTsK
LSAgICB2b2lkIGRlc3Ryb3lTY2VuZSgpOwotICAgIGJvb2wgaW5pdFByb2dyYW0oKTsKLSAgICBi
b29sIGluaXRQcmltaXRpdmUoKTsKLSAgICB2b2lkIGRyYXdQcmltaXRpdmUoKTsKLSAgICB1bnNp
Z25lZCBsb2FkU2hhZGVyKHVuc2lnbmVkIHR5cGUsIGNvbnN0IFdURjo6Q1N0cmluZyYgc291cmNl
KTsKLSAgICB1bnNpZ25lZCBsb2FkUHJvZ3JhbShjb25zdCBXVEY6OkNTdHJpbmcmIHZlcnRleFNv
dXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OkNTdHJpbmcmIGZyYWdt
ZW50U291cmNlKTsKLQotICAgIFdlYktpdDo6V2ViRnJhbWUqIG1fZnJhbWU7Ci0gICAgV2ViS2l0
OjpXZWJQbHVnaW5Db250YWluZXIqIG1fY29udGFpbmVyOwotCi0gICAgV2ViS2l0OjpXZWJSZWN0
IG1fcmVjdDsKLSAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0g
ICAgdW5zaWduZWQgbV9jb2xvclRleHR1cmU7Ci0gICAgdW5zaWduZWQgbV9mcmFtZWJ1ZmZlcjsK
LSAgICBTY2VuZSBtX3NjZW5lOwotCi0gICAgV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXI6OlRv
dWNoRXZlbnRSZXF1ZXN0VHlwZSBtX3RvdWNoRXZlbnRSZXF1ZXN0OwotICAgIGJvb2wgbV9wcmlu
dEV2ZW50RGV0YWlsczsKLSAgICBib29sIG1fcHJpbnRVc2VyR2VzdHVyZVN0YXR1czsKLSAgICBi
b29sIG1fY2FuUHJvY2Vzc0RyYWc7Ci19OwotCi0jZW5kaWYgLy8gVGVzdFBlcHBlclBsdWdpbl9o
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXgg
M2JlMjIzMzIwNzk2NjAzYzE3MTI1NTZjOGM1NjE5MWYyNGQ3Zjc1YS4uNjNiNTU3YTA0ZGU1MzRi
ZmFhM2FiYjA2Yzc1M2FmMDE2NzIyNjZkMCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIlRhc2su
aCIKICNpbmNsdWRlICJUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXN0
U2hlbGwuaCIKLSNpbmNsdWRlICJUZXN0V2ViUGx1Z2luLmgiCiAjaW5jbHVkZSAiV2ViQ2FjaGVk
VVJMUmVxdWVzdC5oIgogI2luY2x1ZGUgIldlYkNvbnNvbGVNZXNzYWdlLmgiCiAjaW5jbHVkZSAi
V2ViQ29udGV4dE1lbnVEYXRhLmgiCkBAIC02Miw2ICs2MSw3IEBACiAjaW5jbHVkZSAiV2ViUmFu
Z2UuaCIKICNpbmNsdWRlICJXZWJTY3JlZW5JbmZvLmgiCiAjaW5jbHVkZSAiV2ViU3RvcmFnZU5h
bWVzcGFjZS5oIgorI2luY2x1ZGUgIldlYlRlc3RQbHVnaW4uaCIKICNpbmNsdWRlICJXZWJUZXh0
Q2hlY2tpbmdDb21wbGV0aW9uLmgiCiAjaW5jbHVkZSAiV2ViVGV4dENoZWNraW5nUmVzdWx0Lmgi
CiAjaW5jbHVkZSAiV2ViVXNlck1lZGlhQ2xpZW50TW9jay5oIgpAQCAtODc2LDggKzg3Niw4IEBA
IHZvaWQgV2ViVmlld0hvc3Q6OmV4aXRGdWxsU2NyZWVuKCkKIAogV2ViUGx1Z2luKiBXZWJWaWV3
SG9zdDo6Y3JlYXRlUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViUGx1Z2luUGFyYW1z
JiBwYXJhbXMpCiB7Ci0gICAgaWYgKHBhcmFtcy5taW1lVHlwZSA9PSBUZXN0V2ViUGx1Z2luOjpt
aW1lVHlwZSgpKQotICAgICAgICByZXR1cm4gbmV3IFRlc3RXZWJQbHVnaW4oZnJhbWUsIHBhcmFt
cyk7CisgICAgaWYgKHBhcmFtcy5taW1lVHlwZSA9PSBXZWJUZXN0UGx1Z2luOjptaW1lVHlwZSgp
KQorICAgICAgICByZXR1cm4gV2ViVGVzdFBsdWdpbjo6Q3JlYXRlKGZyYW1lLCBwYXJhbXMsIHRo
aXMpOwogCiAgICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpDcmVhdGVXZWJQbHVnaW4oZnJhbWUs
IHBhcmFtcyk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178592</attachid>
            <date>2012-12-10 11:01:17 -0800</date>
            <delta_ts>2012-12-10 11:53:24 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-104537-20121210195838.patch</filename>
            <type>text/plain</type>
            <size>58035</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MTIwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDg1YmYxZjViMDI3ZDc0ZjVhMzQxZDY4ZGY1NTRiNmVj
NDcxOGZlZi4uNmJmODIyMTg0Yzk4ZmQ5Y2I5ZTUzOTA0OGU3ZmM3ZTAzMjY0NjVhMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMw
IEBACisyMDEyLTEyLTEwICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSB0aGUgdGVzdCBpbXBsZW1lbnRhdGlvbiBvZiBXZWJL
aXQ6OldlYlBsdWdpbiB0byB0aGUgVGVzdFJ1bm5lciBsaWJyYXJ5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ1MzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBUb255IENoYW5nLgorCisgICAgICAgIEluIG9yZGVyIHRvIGhpZGUgaW1wbGVtZW50YXRp
b24gZGV0YWlscyBmcm9tIHRoZSBwdWJsaWMgVGVzdFJ1bm5lciBBUEksCisgICAgICAgIEkgbW92
ZWQgdGhlIHBsdWdpbiB0byBXZWJUZXN0UGx1Z2luSW1wbCBhbmQgYWRkZWQgYSBzdGF0aWMgY3Jl
YXRlCisgICAgICAgIG1ldGhvZCB0byBXZWJUZXN0UGx1Z2luLiBBbHNvLCBJIHJlbmFtZWQgdGhl
IHBsdWdpbiBmcm9tIFRlc3RXZWJQbHVnaW4KKyAgICAgICAgdG8gV2ViVGVzdFBsdWdpbiB0byBi
ZSBtb3JlIGluIGxpbmUgd2l0aCBvdGhlciBjbGFzc2VzIGluIHRoZQorICAgICAgICBUZXN0UnVu
bmVyIEFQSS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2Vi
VGVzdFBsdWdpbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAo
V2ViVGVzdFBsdWdpbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvV2ViVGVzdFBsdWdpbi5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0V2ViUGx1Z2luLmNwcC4KKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OldlYlRlc3RQbHVnaW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQbHVnaW46OldlYlRlc3RQbHVnaW4pOgorICAgICAg
ICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFBsdWdpbjo6fldlYlRlc3RQbHVnaW4pOgorICAgICAg
ICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFBsdWdpbjo6bWltZVR5cGUpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJQbHVnaW4uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHA6CisgICAgICAgIChXZWJW
aWV3SG9zdDo6Y3JlYXRlUGx1Z2luKToKKwogMjAxMi0xMi0xMCAgTWlobmVhIE92aWRlbmllICA8
bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGRpbmcgTWloYWkgTWFl
cmVhbiB0byB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMsIHdvcmtpbmcgb24gQ1NTUmVnaW9ucy4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCmluZGV4IGQzNzJmYWNmY2My
MTE2MDgwZWRiN2ZiYzdmNDAzMDc5YmU2MTAyNmQuLmU5MjZmMzM1ZmEzNjZhZjk3ZDVlMTMxYjE1
ODRiMTVmMTJmMmQwNDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLmd5cGkKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lw
aQpAQCAtNDQsOCArNDQsNiBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbFN0dWIu
Y3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxXaW4uY3BwJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9U
ZXN0V2ViUGx1Z2luLmNwcCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFdlYlBsdWdpbi5o
JywKICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJQZXJtaXNzaW9ucy5jcHAnLAogICAgICAgICAg
ICAgJ2Nocm9taXVtL1dlYlBlcm1pc3Npb25zLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1dl
YlRoZW1lQ29udHJvbERSVFdpbi5jcHAnLApAQCAtNzAsNiArNjgsNyBAQAogICAgICAgICAgICAg
J2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlByZWZlcmVuY2VzLmgnLAogICAgICAgICAg
ICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRhc2suaCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdEludGVyZmFjZXMuaCcsCisgICAgICAg
ICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFBsdWdpbi5oJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJD
aHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaCcsCkBAIC05Niw2ICs5NSw3IEBACiAgICAgICAg
ICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViUHJlZmVyZW5jZXMuY3BwJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUYXNrLmNwcCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdEludGVyZmFjZXMuY3BwJywKKyAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0UGx1Z2luLmNwcCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFByb3h5LmNwcCcsCiAgICAg
ICAgIF0sCiAgICAgICAgICd0ZXN0X3BsdWdpbl9maWxlcyc6IFsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQbHVnaW4u
aCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRl
c3RQbHVnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2Y1ZjM5NGViYWMwZTVhYzJjZWIyYjRkOWE5NWI0ZjY5
NTI4MGU4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFBsdWdpbi5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlRlc3RQbHVnaW5faAorI2RlZmluZSBXZWJUZXN0UGx1Z2luX2gKKworI2lu
Y2x1ZGUgIldlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luLmgiCisKK25hbWVzcGFjZSBX
ZWJUZXN0UnVubmVyIHsKKworY2xhc3MgV2ViVGVzdERlbGVnYXRlOworCisvLyBBIGZha2UgaW1w
bGVtZW50aW9uIG9mIFdlYktpdDo6V2ViUGx1Z2luIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorLy8K
Ky8vIEl0IHVzZXMgV2ViR3JhcGhpY3NDb250ZXh0M0QgdG8gcGFpbnQgYSBzY2VuZSBjb25zaXNp
dGluZyBvZiBhIHByaW1pdGl2ZQorLy8gb3ZlciBhIGJhY2tncm91bmQuIFRoZSBwcmltaXRpdmUg
YW5kIGJhY2tncm91bmQgY2FuIGJlIGN1c3RvbWl6ZWQgdXNpbmcKKy8vIHRoZSBmb2xsb3dpbmcg
cGx1Z2luIHBhcmFtZXRlcnM6CisvLyBwcmltaXRpdmU6IG5vbmUgKGRlZmF1bHQpLCB0cmlhbmds
ZS4KKy8vIGJhY2tncm91bmQtY29sb3I6IGJsYWNrIChkZWZhdWx0KSwgcmVkLCBncmVlbiwgYmx1
ZS4KKy8vIHByaW1pdGl2ZS1jb2xvcjogYmxhY2sgKGRlZmF1bHQpLCByZWQsIGdyZWVuLCBibHVl
LgorLy8gb3BhY2l0eTogWzAuMCAtIDEuMF0uIERlZmF1bHQgaXMgMS4wLgorLy8KKy8vIFdoZXRo
ZXIgdGhlIHBsdWdpbiBhY2NlcHRzIHRvdWNoIGV2ZW50cyBvciBub3QgY2FuIGJlIGN1c3RvbWl6
ZWQgdXNpbmcgdGhlCisvLyAnYWNjZXB0cy10b3VjaCcgcGx1Z2luIHBhcmFtZXRlciAoZGVmYXVs
dHMgdG8gZmFsc2UpLgorY2xhc3MgV2ViVGVzdFBsdWdpbiA6IHB1YmxpYyBXZWJLaXQ6OldlYlBs
dWdpbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYlRlc3RQbHVnaW4qIGNyZWF0ZShXZWJLaXQ6
OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJQbHVnaW5QYXJhbXMmLCBXZWJUZXN0RGVsZWdh
dGUqKTsKKyAgICB2aXJ0dWFsIH5XZWJUZXN0UGx1Z2luKCk7CisKKyAgICBzdGF0aWMgY29uc3Qg
V2ViS2l0OjpXZWJTdHJpbmcmIG1pbWVUeXBlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJUZXN0
UGx1Z2luKCk7Cit9OworCit9CisKKyNlbmRpZiAvLyBXZWJUZXN0UGx1Z2luX2gKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQ
bHVnaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
V2ViVGVzdFBsdWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTcxZmEwMzA3OTZhYjE5ZjlhMDU4ZjczNGVj
N2FmM2VhODQwYjk0OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQbHVnaW4uY3BwCkBAIC0wLDAgKzEsNjI2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlRlc3RQbHVnaW4uaCIK
KworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgorI2lu
Y2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lci5oIgorI2luY2x1
ZGUgIldlYlBsdWdpblBhcmFtcy5oIgorI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0ZS5oIgorI2lu
Y2x1ZGUgIldlYlRvdWNoUG9pbnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OworCituYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CisKK25hbWVzcGFjZSB7CisKKy8vIEdM
ZW51bSB2YWx1ZXMgY29waWVkIGZyb20gZ2wyLmguCisjZGVmaW5lIEdMX0ZBTFNFICAgICAgICAg
ICAgICAgICAgMAorI2RlZmluZSBHTF9UUlVFICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUg
R0xfT05FICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdMX1RSSUFOR0xFUyAgICAgICAg
ICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX09ORV9NSU5VU19TUkNfQUxQSEEgICAgMHgwMzAzCisj
ZGVmaW5lIEdMX0RFUFRIX1RFU1QgICAgICAgICAgICAgMHgwQjcxCisjZGVmaW5lIEdMX0JMRU5E
ICAgICAgICAgICAgICAgICAgMHgwQkUyCisjZGVmaW5lIEdMX1NDSVNTT1JfVEVTVCAgICAgICAg
ICAgMHgwQjkwCisjZGVmaW5lIEdMX1RFWFRVUkVfMkQgICAgICAgICAgICAgMHgwREUxCisjZGVm
aW5lIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgMHgxNDA2CisjZGVmaW5lIEdMX1JHQkEgICAg
ICAgICAgICAgICAgICAgMHgxOTA4CisjZGVmaW5lIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAg
MHgxNDAxCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiAgICAgMHgyODAwCisjZGVmaW5l
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAgICAgMHgyODAxCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JB
UF9TICAgICAgICAgMHgyODAyCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9UICAgICAgICAgMHgy
ODAzCisjZGVmaW5lIEdMX05FQVJFU1QgICAgICAgICAgICAgICAgMHgyNjAwCisjZGVmaW5lIEdM
X0NPTE9SX0JVRkZFUl9CSVQgICAgICAgMHg0MDAwCisjZGVmaW5lIEdMX0NMQU1QX1RPX0VER0Ug
ICAgICAgICAgMHg4MTJGCisjZGVmaW5lIEdMX0FSUkFZX0JVRkZFUiAgICAgICAgICAgMHg4ODky
CisjZGVmaW5lIEdMX1NUQVRJQ19EUkFXICAgICAgICAgICAgMHg4OEU0CisjZGVmaW5lIEdMX0ZS
QUdNRU5UX1NIQURFUiAgICAgICAgMHg4QjMwCisjZGVmaW5lIEdMX1ZFUlRFWF9TSEFERVIgICAg
ICAgICAgMHg4QjMxCisjZGVmaW5lIEdMX0NPTVBJTEVfU1RBVFVTICAgICAgICAgMHg4QjgxCisj
ZGVmaW5lIEdMX0xJTktfU1RBVFVTICAgICAgICAgICAgMHg4QjgyCisjZGVmaW5lIEdMX0NPTE9S
X0FUVEFDSE1FTlQwICAgICAgMHg4Q0UwCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
ICAgMHg4Q0Q1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSICAgICAgICAgICAgMHg4RDQwCisKK3Zv
aWQgcHJlbXVsdGlwbHlBbHBoYShjb25zdCB1bnNpZ25lZCBjb2xvckluWzNdLCBmbG9hdCBhbHBo
YSwgZmxvYXQgY29sb3JPdXRbNF0pCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kp
CisgICAgICAgIGNvbG9yT3V0W2ldID0gKGNvbG9ySW5baV0gLyAyNTUuMGYpICogYWxwaGE7CisK
KyAgICBjb2xvck91dFszXSA9IGFscGhhOworfQorCitjb25zdCBjaGFyKiBwb2ludFN0YXRlKFdl
YlRvdWNoUG9pbnQ6OlN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBj
YXNlIFdlYlRvdWNoUG9pbnQ6OlN0YXRlUmVsZWFzZWQ6CisgICAgICAgIHJldHVybiAiUmVsZWFz
ZWQiOworICAgIGNhc2UgV2ViVG91Y2hQb2ludDo6U3RhdGVQcmVzc2VkOgorICAgICAgICByZXR1
cm4gIlByZXNzZWQiOworICAgIGNhc2UgV2ViVG91Y2hQb2ludDo6U3RhdGVNb3ZlZDoKKyAgICAg
ICAgcmV0dXJuICJNb3ZlZCI7CisgICAgY2FzZSBXZWJUb3VjaFBvaW50OjpTdGF0ZUNhbmNlbGxl
ZDoKKyAgICAgICAgcmV0dXJuICJDYW5jZWxsZWQiOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiAiVW5rbm93biI7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgcHJpbnRUb3VjaExpc3QoV2ViVGVzdERlbGVnYXRlKiBkZWxl
Z2F0ZSwgY29uc3QgV2ViVG91Y2hQb2ludCogcG9pbnRzLCBpbnQgbGVuZ3RoKQoreworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIGRlbGVnYXRlLT5wcmludE1l
c3NhZ2Uoc3RkOjpzdHJpbmcoIiogIikgKyBTdHJpbmc6Om51bWJlcihwb2ludHNbaV0ucG9zaXRp
b24ueCkuYXNjaWkoKS5kYXRhKCkgKyAiLCAiICsgU3RyaW5nOjpudW1iZXIocG9pbnRzW2ldLnBv
c2l0aW9uLnkpLmFzY2lpKCkuZGF0YSgpICsgIjogIiArIHBvaW50U3RhdGUocG9pbnRzW2ldLnN0
YXRlKSArICJcbiIpOworfQorCit2b2lkIHByaW50RXZlbnREZXRhaWxzKFdlYlRlc3REZWxlZ2F0
ZSogZGVsZWdhdGUsIGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQoreworICAgIGlmIChXZWJJ
bnB1dEV2ZW50Ojppc1RvdWNoRXZlbnRUeXBlKGV2ZW50LnR5cGUpKSB7CisgICAgICAgIGNvbnN0
IFdlYlRvdWNoRXZlbnQmIHRvdWNoID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViVG91Y2hFdmVudCY+
KGV2ZW50KTsKKyAgICAgICAgcHJpbnRUb3VjaExpc3QoZGVsZWdhdGUsIHRvdWNoLnRvdWNoZXMs
IHRvdWNoLnRvdWNoZXNMZW5ndGgpOworICAgICAgICBwcmludFRvdWNoTGlzdChkZWxlZ2F0ZSwg
dG91Y2guY2hhbmdlZFRvdWNoZXMsIHRvdWNoLmNoYW5nZWRUb3VjaGVzTGVuZ3RoKTsKKyAgICAg
ICAgcHJpbnRUb3VjaExpc3QoZGVsZWdhdGUsIHRvdWNoLnRhcmdldFRvdWNoZXMsIHRvdWNoLnRh
cmdldFRvdWNoZXNMZW5ndGgpOworICAgIH0gZWxzZSBpZiAoV2ViSW5wdXRFdmVudDo6aXNNb3Vz
ZUV2ZW50VHlwZShldmVudC50eXBlKSB8fCBldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Ok1v
dXNlV2hlZWwpIHsKKyAgICAgICAgY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2UgPSBzdGF0aWNf
Y2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpOworICAgICAgICBkZWxlZ2F0ZS0+cHJp
bnRNZXNzYWdlKHN0ZDo6c3RyaW5nKCIqICIpICsgU3RyaW5nOjpudW1iZXIobW91c2UueCkuYXNj
aWkoKS5kYXRhKCkgKyAiLCAiICsgU3RyaW5nOjpudW1iZXIobW91c2UueSkuYXNjaWkoKS5kYXRh
KCkgKyAiXG4iKTsKKyAgICB9IGVsc2UgaWYgKFdlYklucHV0RXZlbnQ6OmlzR2VzdHVyZUV2ZW50
VHlwZShldmVudC50eXBlKSkgeworICAgICAgICBjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGdlc3R1
cmUgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJHZXN0dXJlRXZlbnQmPihldmVudCk7CisgICAgICAg
IGRlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RkOjpzdHJpbmcoIiogIikgKyBTdHJpbmc6Om51bWJl
cihnZXN0dXJlLngpLmFzY2lpKCkuZGF0YSgpICsgIiwgIiArIFN0cmluZzo6bnVtYmVyKGdlc3R1
cmUueSkuYXNjaWkoKS5kYXRhKCkgKyAiXG4iKTsKKyAgICB9Cit9CisKK1dlYlBsdWdpbkNvbnRh
aW5lcjo6VG91Y2hFdmVudFJlcXVlc3RUeXBlIHBhcnNlVG91Y2hFdmVudFJlcXVlc3RUeXBlKGNv
bnN0IFdlYlN0cmluZyYgc3RyaW5nKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
V2ViU3RyaW5nLCBrUHJpbWl0aXZlUmF3LCAoV2ViU3RyaW5nOjpmcm9tVVRGOCgicmF3IikpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFdlYlN0cmluZywga1ByaW1pdGl2ZVN5bnRo
ZXRpYywgKFdlYlN0cmluZzo6ZnJvbVVURjgoInN5bnRoZXRpYyIpKSk7CisKKyAgICBpZiAoc3Ry
aW5nID09IGtQcmltaXRpdmVSYXcpCisgICAgICAgIHJldHVybiBXZWJQbHVnaW5Db250YWluZXI6
OlRvdWNoRXZlbnRSZXF1ZXN0VHlwZVJhdzsKKyAgICBpZiAoc3RyaW5nID09IGtQcmltaXRpdmVT
eW50aGV0aWMpCisgICAgICAgIHJldHVybiBXZWJQbHVnaW5Db250YWluZXI6OlRvdWNoRXZlbnRS
ZXF1ZXN0VHlwZVN5bnRoZXNpemVkTW91c2U7CisgICAgcmV0dXJuIFdlYlBsdWdpbkNvbnRhaW5l
cjo6VG91Y2hFdmVudFJlcXVlc3RUeXBlTm9uZTsKK30KKworY2xhc3MgV2ViVGVzdFBsdWdpbklt
cGwgOiBwdWJsaWMgV2ViVGVzdFBsdWdpbiB7CitwdWJsaWM6CisgICAgV2ViVGVzdFBsdWdpbklt
cGwoV2ViRnJhbWUqLCBjb25zdCBXZWJQbHVnaW5QYXJhbXMmLCBXZWJUZXN0RGVsZWdhdGUqKTsK
KyAgICB2aXJ0dWFsIH5XZWJUZXN0UGx1Z2luSW1wbCgpOworCisgICAgLy8gV2ViUGx1Z2luIG1l
dGhvZHM6CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoV2ViUGx1Z2luQ29udGFpbmVyKik7
CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFsIE5QT2JqZWN0KiBzY3Jp
cHRhYmxlT2JqZWN0KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5Qcm9jZXNz
RHJhZygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuUHJvY2Vzc0RyYWc7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVHZW9tZXRyeShjb25zdCBXZWJSZWN0JiBmcmFtZVJlY3QsIGNvbnN0IFdlYlJlY3Qm
IGNsaXBSZWN0LCBjb25zdCBXZWJWZWN0b3I8V2ViUmVjdD4mIGN1dE91dHNSZWN0cywgYm9vbCBp
c1Zpc2libGUpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGb2N1cyhib29sKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVmlzaWJpbGl0eShib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
YWNjZXB0c0lucHV0RXZlbnRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmLCBXZWJDdXJzb3JJbmZvJik7Cisg
ICAgdmlydHVhbCBib29sIGhhbmRsZURyYWdTdGF0dXNVcGRhdGUoV2ViRHJhZ1N0YXR1cywgY29u
c3QgV2ViRHJhZ0RhdGEmLCBXZWJEcmFnT3BlcmF0aW9uc01hc2ssIGNvbnN0IFdlYlBvaW50JiBw
b3NpdGlvbiwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvc2l0aW9uKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYlVSTFJlc3BvbnNlJikgeyB9CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3Ro
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZygpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsTG9hZGluZyhjb25zdCBXZWJVUkxFcnJvciYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nRnJhbWVSZXF1ZXN0KGNvbnN0IFdlYlVSTCYsIHZvaWQq
IG5vdGlmeURhdGEpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGluZ0ZyYW1lUmVx
dWVzdChjb25zdCBXZWJVUkwmLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBXZWJVUkxFcnJvciYp
IHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1BsYWNlaG9sZGVyKCkgeyByZXR1cm4gZmFsc2U7IH0K
KworcHJpdmF0ZToKKyAgICBlbnVtIFByaW1pdGl2ZSB7CisgICAgICAgIFByaW1pdGl2ZU5vbmUs
CisgICAgICAgIFByaW1pdGl2ZVRyaWFuZ2xlCisgICAgfTsKKworICAgIHN0cnVjdCBTY2VuZSB7
CisgICAgICAgIFByaW1pdGl2ZSBwcmltaXRpdmU7CisgICAgICAgIHVuc2lnbmVkIGJhY2tncm91
bmRDb2xvclszXTsKKyAgICAgICAgdW5zaWduZWQgcHJpbWl0aXZlQ29sb3JbM107CisgICAgICAg
IGZsb2F0IG9wYWNpdHk7CisKKyAgICAgICAgdW5zaWduZWQgdmJvOworICAgICAgICB1bnNpZ25l
ZCBwcm9ncmFtOworICAgICAgICBpbnQgY29sb3JMb2NhdGlvbjsKKyAgICAgICAgaW50IHBvc2l0
aW9uTG9jYXRpb247CisKKyAgICAgICAgU2NlbmUoKQorICAgICAgICAgICAgOiBwcmltaXRpdmUo
UHJpbWl0aXZlTm9uZSkKKyAgICAgICAgICAgICwgb3BhY2l0eSgxLjBmKSAvLyBGdWxseSBvcGFx
dWUuCisgICAgICAgICAgICAsIHZibygwKQorICAgICAgICAgICAgLCBwcm9ncmFtKDApCisgICAg
ICAgICAgICAsIGNvbG9yTG9jYXRpb24oLTEpCisgICAgICAgICAgICAsIHBvc2l0aW9uTG9jYXRp
b24oLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhY2tncm91bmRDb2xvclswXSA9IGJhY2tn
cm91bmRDb2xvclsxXSA9IGJhY2tncm91bmRDb2xvclsyXSA9IDA7CisgICAgICAgICAgICBwcmlt
aXRpdmVDb2xvclswXSA9IHByaW1pdGl2ZUNvbG9yWzFdID0gcHJpbWl0aXZlQ29sb3JbMl0gPSAw
OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIEZ1bmN0aW9ucyBmb3IgcGFyc2luZyBwbHVn
aW4gcGFyYW1ldGVycy4KKyAgICBQcmltaXRpdmUgcGFyc2VQcmltaXRpdmUoY29uc3QgV2ViU3Ry
aW5nJik7CisgICAgdm9pZCBwYXJzZUNvbG9yKGNvbnN0IFdlYlN0cmluZyYsIHVuc2lnbmVkIGNv
bG9yWzNdKTsKKyAgICBmbG9hdCBwYXJzZU9wYWNpdHkoY29uc3QgV2ViU3RyaW5nJik7CisgICAg
Ym9vbCBwYXJzZUJvb2xlYW4oY29uc3QgV2ViU3RyaW5nJik7CisKKyAgICAvLyBGdW5jdGlvbnMg
Zm9yIGxvYWRpbmcgYW5kIGRyYXdpbmcgc2NlbmUuCisgICAgYm9vbCBpbml0U2NlbmUoKTsKKyAg
ICB2b2lkIGRyYXdTY2VuZSgpOworICAgIHZvaWQgZGVzdHJveVNjZW5lKCk7CisgICAgYm9vbCBp
bml0UHJvZ3JhbSgpOworICAgIGJvb2wgaW5pdFByaW1pdGl2ZSgpOworICAgIHZvaWQgZHJhd1By
aW1pdGl2ZSgpOworICAgIHVuc2lnbmVkIGxvYWRTaGFkZXIodW5zaWduZWQgdHlwZSwgY29uc3Qg
V1RGOjpDU3RyaW5nJiBzb3VyY2UpOworICAgIHVuc2lnbmVkIGxvYWRQcm9ncmFtKGNvbnN0IFdU
Rjo6Q1N0cmluZyYgdmVydGV4U291cmNlLCBjb25zdCBXVEY6OkNTdHJpbmcmIGZyYWdtZW50U291
cmNlKTsKKworICAgIFdlYkZyYW1lKiBtX2ZyYW1lOworICAgIFdlYlRlc3REZWxlZ2F0ZSogbV9k
ZWxlZ2F0ZTsKKyAgICBXZWJQbHVnaW5Db250YWluZXIqIG1fY29udGFpbmVyOworCisgICAgV2Vi
UmVjdCBtX3JlY3Q7CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICB1
bnNpZ25lZCBtX2NvbG9yVGV4dHVyZTsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lYnVmZmVyOworICAg
IFNjZW5lIG1fc2NlbmU7CisKKyAgICBXZWJQbHVnaW5Db250YWluZXI6OlRvdWNoRXZlbnRSZXF1
ZXN0VHlwZSBtX3RvdWNoRXZlbnRSZXF1ZXN0OworICAgIGJvb2wgbV9wcmludEV2ZW50RGV0YWls
czsKKyAgICBib29sIG1fcHJpbnRVc2VyR2VzdHVyZVN0YXR1czsKKyAgICBib29sIG1fY2FuUHJv
Y2Vzc0RyYWc7Cit9OworCitXZWJUZXN0UGx1Z2luSW1wbDo6V2ViVGVzdFBsdWdpbkltcGwoV2Vi
RnJhbWUqIGZyYW1lLCBjb25zdCBXZWJQbHVnaW5QYXJhbXMmIHBhcmFtcywgV2ViVGVzdERlbGVn
YXRlKiBkZWxlZ2F0ZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RlbGVnYXRlKGRl
bGVnYXRlKQorICAgICwgbV9jb250YWluZXIoMCkKKyAgICAsIG1fY29udGV4dCgwKQorICAgICwg
bV90b3VjaEV2ZW50UmVxdWVzdChXZWJQbHVnaW5Db250YWluZXI6OlRvdWNoRXZlbnRSZXF1ZXN0
VHlwZU5vbmUpCisgICAgLCBtX3ByaW50RXZlbnREZXRhaWxzKGZhbHNlKQorICAgICwgbV9wcmlu
dFVzZXJHZXN0dXJlU3RhdHVzKGZhbHNlKQorICAgICwgbV9jYW5Qcm9jZXNzRHJhZyhmYWxzZSkK
K3sKKyAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1dGVQcmltaXRpdmUgPSBXZWJT
dHJpbmc6OmZyb21VVEY4KCJwcmltaXRpdmUiKTsKKyAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5n
IGtBdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3IgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJiYWNrZ3Jv
dW5kLWNvbG9yIik7CisgICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrQXR0cmlidXRlUHJpbWl0
aXZlQ29sb3IgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJwcmltaXRpdmUtY29sb3IiKTsKKyAgICBz
dGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1dGVPcGFjaXR5ID0gV2ViU3RyaW5nOjpmcm9t
VVRGOCgib3BhY2l0eSIpOworICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZUFj
Y2VwdHNUb3VjaCA9IFdlYlN0cmluZzo6ZnJvbVVURjgoImFjY2VwdHMtdG91Y2giKTsKKyAgICBz
dGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1dGVQcmludEV2ZW50RGV0YWlscyA9IFdlYlN0
cmluZzo6ZnJvbVVURjgoInByaW50LWV2ZW50LWRldGFpbHMiKTsKKyAgICBzdGF0aWMgY29uc3Qg
V2ViU3RyaW5nIGtBdHRyaWJ1dGVDYW5Qcm9jZXNzRHJhZyA9IFdlYlN0cmluZzo6ZnJvbVVURjgo
ImNhbi1wcm9jZXNzLWRyYWciKTsKKyAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1
dGVQcmludFVzZXJHZXN0dXJlU3RhdHVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgicHJpbnQtdXNl
ci1nZXN0dXJlLXN0YXR1cyIpOworCisgICAgQVNTRVJUKHBhcmFtcy5hdHRyaWJ1dGVOYW1lcy5z
aXplKCkgPT0gcGFyYW1zLmF0dHJpYnV0ZVZhbHVlcy5zaXplKCkpOworICAgIHNpemVfdCBzaXpl
ID0gcGFyYW1zLmF0dHJpYnV0ZU5hbWVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGF0dHJpYnV0ZU5hbWUg
PSBwYXJhbXMuYXR0cmlidXRlTmFtZXNbaV07CisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgYXR0
cmlidXRlVmFsdWUgPSBwYXJhbXMuYXR0cmlidXRlVmFsdWVzW2ldOworCisgICAgICAgIGlmIChh
dHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVQcmltaXRpdmUpCisgICAgICAgICAgICBtX3NjZW5l
LnByaW1pdGl2ZSA9IHBhcnNlUHJpbWl0aXZlKGF0dHJpYnV0ZVZhbHVlKTsKKyAgICAgICAgZWxz
ZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlQmFja2dyb3VuZENvbG9yKQorICAgICAg
ICAgICAgcGFyc2VDb2xvcihhdHRyaWJ1dGVWYWx1ZSwgbV9zY2VuZS5iYWNrZ3JvdW5kQ29sb3Ip
OworICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVQcmltaXRpdmVD
b2xvcikKKyAgICAgICAgICAgIHBhcnNlQ29sb3IoYXR0cmlidXRlVmFsdWUsIG1fc2NlbmUucHJp
bWl0aXZlQ29sb3IpOworICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1
dGVPcGFjaXR5KQorICAgICAgICAgICAgbV9zY2VuZS5vcGFjaXR5ID0gcGFyc2VPcGFjaXR5KGF0
dHJpYnV0ZVZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmli
dXRlQWNjZXB0c1RvdWNoKQorICAgICAgICAgICAgbV90b3VjaEV2ZW50UmVxdWVzdCA9IHBhcnNl
VG91Y2hFdmVudFJlcXVlc3RUeXBlKGF0dHJpYnV0ZVZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAo
YXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlUHJpbnRFdmVudERldGFpbHMpCisgICAgICAgICAg
ICBtX3ByaW50RXZlbnREZXRhaWxzID0gcGFyc2VCb29sZWFuKGF0dHJpYnV0ZVZhbHVlKTsKKyAg
ICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlQ2FuUHJvY2Vzc0RyYWcp
CisgICAgICAgICAgICBtX2NhblByb2Nlc3NEcmFnID0gcGFyc2VCb29sZWFuKGF0dHJpYnV0ZVZh
bHVlKTsKKyAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlUHJpbnRV
c2VyR2VzdHVyZVN0YXR1cykKKyAgICAgICAgICAgIG1fcHJpbnRVc2VyR2VzdHVyZVN0YXR1cyA9
IHBhcnNlQm9vbGVhbihhdHRyaWJ1dGVWYWx1ZSk7CisgICAgfQorfQorCitXZWJUZXN0UGx1Z2lu
SW1wbDo6fldlYlRlc3RQbHVnaW5JbXBsKCkKK3sKK30KKworYm9vbCBXZWJUZXN0UGx1Z2luSW1w
bDo6aW5pdGlhbGl6ZShXZWJQbHVnaW5Db250YWluZXIqIGNvbnRhaW5lcikKK3sKKyAgICBXZWJH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKKyAgICBtX2NvbnRleHQgPSB3ZWJL
aXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRlT2Zmc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QoYXR0
cnMpOworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghaW5pdFNjZW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG1fY29udGFpbmVyID0gY29udGFpbmVyOworICAgIG1fY29udGFpbmVyLT5zZXRCYWNraW5nVGV4
dHVyZUlkKG1fY29sb3JUZXh0dXJlKTsKKyAgICBtX2NvbnRhaW5lci0+cmVxdWVzdFRvdWNoRXZl
bnRUeXBlKG1fdG91Y2hFdmVudFJlcXVlc3QpOworICAgIG1fY29udGFpbmVyLT5zZXRXYW50c1do
ZWVsRXZlbnRzKHRydWUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYlRlc3RQbHVn
aW5JbXBsOjpkZXN0cm95KCkKK3sKKyAgICBkZXN0cm95U2NlbmUoKTsKKworICAgIGRlbGV0ZSBt
X2NvbnRleHQ7CisgICAgbV9jb250ZXh0ID0gMDsKKworICAgIG1fY29udGFpbmVyID0gMDsKKyAg
ICBtX2ZyYW1lID0gMDsKK30KKwordm9pZCBXZWJUZXN0UGx1Z2luSW1wbDo6dXBkYXRlR2VvbWV0
cnkoY29uc3QgV2ViUmVjdCYgZnJhbWVSZWN0LCBjb25zdCBXZWJSZWN0JiBjbGlwUmVjdCwgY29u
c3QgV2ViVmVjdG9yPFdlYlJlY3Q+JiBjdXRPdXRzUmVjdHMsIGJvb2wgaXNWaXNpYmxlKQorewor
ICAgIGlmIChjbGlwUmVjdCA9PSBtX3JlY3QpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlY3Qg
PSBjbGlwUmVjdDsKKyAgICBpZiAobV9yZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jb250ZXh0LT5yZXNoYXBlKG1fcmVjdC53aWR0aCwgbV9yZWN0LmhlaWdodCk7Cisg
ICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBtX3JlY3Qud2lkdGgsIG1fcmVjdC5oZWlnaHQp
OworCisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbG9yVGV4
dHVyZSk7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Cisg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3JlY3Qud2lk
dGgsIG1fcmVjdC5oZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVmZmVy
KTsKKyAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBH
TF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV9jb2xvclRleHR1cmUsIDApOwor
CisgICAgZHJhd1NjZW5lKCk7CisKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CisgICAgbV9jb250
YWluZXItPmNvbW1pdEJhY2tpbmdUZXh0dXJlKCk7Cit9CisKK1dlYlRlc3RQbHVnaW5JbXBsOjpQ
cmltaXRpdmUgV2ViVGVzdFBsdWdpbkltcGw6OnBhcnNlUHJpbWl0aXZlKGNvbnN0IFdlYlN0cmlu
ZyYgc3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga1ByaW1pdGl2ZU5vbmUg
PSBXZWJTdHJpbmc6OmZyb21VVEY4KCJub25lIik7CisgICAgc3RhdGljIGNvbnN0IFdlYlN0cmlu
ZyBrUHJpbWl0aXZlVHJpYW5nbGUgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0cmlhbmdsZSIpOwor
CisgICAgUHJpbWl0aXZlIHByaW1pdGl2ZSA9IFByaW1pdGl2ZU5vbmU7CisgICAgaWYgKHN0cmlu
ZyA9PSBrUHJpbWl0aXZlTm9uZSkKKyAgICAgICAgcHJpbWl0aXZlID0gUHJpbWl0aXZlTm9uZTsK
KyAgICBlbHNlIGlmIChzdHJpbmcgPT0ga1ByaW1pdGl2ZVRyaWFuZ2xlKQorICAgICAgICBwcmlt
aXRpdmUgPSBQcmltaXRpdmVUcmlhbmdsZTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBwcmltaXRpdmU7Cit9CisKKy8vIEZJWE1FOiBUaGlzIG1l
dGhvZCBzaG91bGQgYWxyZWFkeSBleGlzdC4gVXNlIGl0LgorLy8gRm9yIG5vdyBqdXN0IHBhcnNl
IHByaW1hcnkgY29sb3JzLgordm9pZCBXZWJUZXN0UGx1Z2luSW1wbDo6cGFyc2VDb2xvcihjb25z
dCBXZWJTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgY29sb3JbM10pCit7CisgICAgY29sb3JbMF0g
PSBjb2xvclsxXSA9IGNvbG9yWzJdID0gMDsKKyAgICBpZiAoc3RyaW5nID09ICJibGFjayIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChzdHJpbmcgPT0gInJlZCIpCisgICAgICAgIGNvbG9y
WzBdID0gMjU1OworICAgIGVsc2UgaWYgKHN0cmluZyA9PSAiZ3JlZW4iKQorICAgICAgICBjb2xv
clsxXSA9IDI1NTsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gImJsdWUiKQorICAgICAgICBjb2xv
clsyXSA9IDI1NTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CitmbG9hdCBXZWJUZXN0UGx1Z2luSW1wbDo6cGFyc2VPcGFjaXR5KGNvbnN0IFdlYlN0cmluZyYg
c3RyaW5nKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZihzdHJpbmcudXRm
OCgpLmRhdGEoKSkpOworfQorCitib29sIFdlYlRlc3RQbHVnaW5JbXBsOjpwYXJzZUJvb2xlYW4o
Y29uc3QgV2ViU3RyaW5nJiBzdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBr
UHJpbWl0aXZlVHJ1ZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoInRydWUiKTsKKyAgICByZXR1cm4g
c3RyaW5nID09IGtQcmltaXRpdmVUcnVlOworfQorCitib29sIFdlYlRlc3RQbHVnaW5JbXBsOjpp
bml0U2NlbmUoKQoreworICAgIGZsb2F0IGNvbG9yWzRdOworICAgIHByZW11bHRpcGx5QWxwaGEo
bV9zY2VuZS5iYWNrZ3JvdW5kQ29sb3IsIG1fc2NlbmUub3BhY2l0eSwgY29sb3IpOworCisgICAg
bV9jb2xvclRleHR1cmUgPSBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX2ZyYW1l
YnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworCisgICAgbV9jb250ZXh0
LT52aWV3cG9ydCgwLCAwLCBtX3JlY3Qud2lkdGgsIG1fcmVjdC5oZWlnaHQpOworICAgIG1fY29u
dGV4dC0+ZGlzYWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICBtX2NvbnRleHQtPmRpc2FibGUoR0xf
U0NJU1NPUl9URVNUKTsKKworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihjb2xvclswXSwgY29s
b3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSk7CisKKyAgICBtX2NvbnRleHQtPmVuYWJsZShHTF9C
TEVORCk7CisgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JD
X0FMUEhBKTsKKworICAgIHJldHVybiBtX3NjZW5lLnByaW1pdGl2ZSAhPSBQcmltaXRpdmVOb25l
ID8gaW5pdFByb2dyYW0oKSAmJiBpbml0UHJpbWl0aXZlKCkgOiB0cnVlOworfQorCit2b2lkIFdl
YlRlc3RQbHVnaW5JbXBsOjpkcmF3U2NlbmUoKQoreworICAgIG1fY29udGV4dC0+dmlld3BvcnQo
MCwgMCwgbV9yZWN0LndpZHRoLCBtX3JlY3QuaGVpZ2h0KTsKKyAgICBtX2NvbnRleHQtPmNsZWFy
KEdMX0NPTE9SX0JVRkZFUl9CSVQpOworCisgICAgaWYgKG1fc2NlbmUucHJpbWl0aXZlICE9IFBy
aW1pdGl2ZU5vbmUpCisgICAgICAgIGRyYXdQcmltaXRpdmUoKTsKK30KKwordm9pZCBXZWJUZXN0
UGx1Z2luSW1wbDo6ZGVzdHJveVNjZW5lKCkKK3sKKyAgICBpZiAobV9zY2VuZS5wcm9ncmFtKSB7
CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3NjZW5lLnByb2dyYW0pOworICAg
ICAgICBtX3NjZW5lLnByb2dyYW0gPSAwOworICAgIH0KKyAgICBpZiAobV9zY2VuZS52Ym8pIHsK
KyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9zY2VuZS52Ym8pOworICAgICAgICBt
X3NjZW5lLnZibyA9IDA7CisgICAgfQorCisgICAgaWYgKG1fZnJhbWVidWZmZXIpIHsKKyAgICAg
ICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZyYW1lYnVmZmVyKTsKKyAgICAgICAg
bV9mcmFtZWJ1ZmZlciA9IDA7CisgICAgfQorCisgICAgaWYgKG1fY29sb3JUZXh0dXJlKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2NvbG9yVGV4dHVyZSk7CisgICAgICAg
IG1fY29sb3JUZXh0dXJlID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgV2ViVGVzdFBsdWdpbkltcGw6
OmluaXRQcm9ncmFtKCkKK3sKKyAgICBjb25zdCBDU3RyaW5nIHZlcnRleFNvdXJjZSgKKyAgICAg
ICAgImF0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uOyAgXG4iCisgICAgICAgICJ2b2lkIG1haW4oKSB7
ICAgICAgICAgICAgIFxuIgorICAgICAgICAiICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uOyBcbiIK
KyAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgKTsKKworICAgIGNv
bnN0IENTdHJpbmcgZnJhZ21lbnRTb3VyY2UoCisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsgXG4iCisgICAgICAgICJ1bmlmb3JtIHZlYzQgY29sb3I7ICAgICAgXG4iCisgICAgICAg
ICJ2b2lkIG1haW4oKSB7ICAgICAgICAgICAgXG4iCisgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9
IGNvbG9yOyAgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAg
KTsKKworICAgIG1fc2NlbmUucHJvZ3JhbSA9IGxvYWRQcm9ncmFtKHZlcnRleFNvdXJjZSwgZnJh
Z21lbnRTb3VyY2UpOworICAgIGlmICghbV9zY2VuZS5wcm9ncmFtKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBtX3NjZW5lLmNvbG9yTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihtX3NjZW5lLnByb2dyYW0sICJjb2xvciIpOworICAgIG1fc2NlbmUucG9zaXRp
b25Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9zY2VuZS5wcm9ncmFt
LCAicG9zaXRpb24iKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJUZXN0UGx1Z2lu
SW1wbDo6aW5pdFByaW1pdGl2ZSgpCit7CisgICAgQVNTRVJUKG1fc2NlbmUucHJpbWl0aXZlID09
IFByaW1pdGl2ZVRyaWFuZ2xlKTsKKworICAgIG1fc2NlbmUudmJvID0gbV9jb250ZXh0LT5jcmVh
dGVCdWZmZXIoKTsKKyAgICBpZiAoIW1fc2NlbmUudmJvKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjb25zdCBmbG9hdCB2ZXJ0aWNlc1tdID0geworICAgICAgICAwLjBmLCAgMC44Ziwg
MC4wZiwKKyAgICAgICAgLTAuOGYsIC0wLjhmLCAwLjBmLAorICAgICAgICAwLjhmLCAtMC44Ziwg
MC4wZiB9OworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fc2Nl
bmUudmJvKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXpl
b2YodmVydGljZXMpLCAwLCBHTF9TVEFUSUNfRFJBVyk7CisgICAgbV9jb250ZXh0LT5idWZmZXJT
dWJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgMCwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYlRlc3RQbHVnaW5JbXBsOjpkcmF3UHJpbWl0
aXZlKCkKK3sKKyAgICBBU1NFUlQobV9zY2VuZS5wcmltaXRpdmUgPT0gUHJpbWl0aXZlVHJpYW5n
bGUpOworICAgIEFTU0VSVChtX3NjZW5lLnZibyk7CisgICAgQVNTRVJUKG1fc2NlbmUucHJvZ3Jh
bSk7CisKKyAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9zY2VuZS5wcm9ncmFtKTsKKworICAg
IC8vIEJpbmQgcHJpbWl0aXZlIGNvbG9yLgorICAgIGZsb2F0IGNvbG9yWzRdOworICAgIHByZW11
bHRpcGx5QWxwaGEobV9zY2VuZS5wcmltaXRpdmVDb2xvciwgbV9zY2VuZS5vcGFjaXR5LCBjb2xv
cik7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV9zY2VuZS5jb2xvckxvY2F0aW9uLCBjb2xv
clswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSk7CisKKyAgICAvLyBCaW5kIHByaW1p
dGl2ZSB2ZXJ0aWNlcy4KKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVS
LCBtX3NjZW5lLnZibyk7CisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSht
X3NjZW5lLnBvc2l0aW9uTG9jYXRpb24pOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9p
bnRlcihtX3NjZW5lLnBvc2l0aW9uTG9jYXRpb24sIDMsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwg
MCk7CisgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdMX1RSSUFOR0xFUywgMCwgMyk7Cit9CisK
K3Vuc2lnbmVkIFdlYlRlc3RQbHVnaW5JbXBsOjpsb2FkU2hhZGVyKHVuc2lnbmVkIHR5cGUsIGNv
bnN0IENTdHJpbmcmIHNvdXJjZSkKK3sKKyAgICB1bnNpZ25lZCBzaGFkZXIgPSBtX2NvbnRleHQt
PmNyZWF0ZVNoYWRlcih0eXBlKTsKKyAgICBpZiAoc2hhZGVyKSB7CisgICAgICAgIG1fY29udGV4
dC0+c2hhZGVyU291cmNlKHNoYWRlciwgc291cmNlLmRhdGEoKSk7CisgICAgICAgIG1fY29udGV4
dC0+Y29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgICAgICAgIGludCBjb21waWxlZCA9IDA7Cisg
ICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywg
JmNvbXBpbGVkKTsKKyAgICAgICAgaWYgKCFjb21waWxlZCkgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKKyAgICAgICAgICAgIHNoYWRlciA9IDA7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNoYWRlcjsKK30KKwordW5zaWduZWQgV2ViVGVzdFBs
dWdpbkltcGw6OmxvYWRQcm9ncmFtKGNvbnN0IENTdHJpbmcmIHZlcnRleFNvdXJjZSwgY29uc3Qg
Q1N0cmluZyYgZnJhZ21lbnRTb3VyY2UpCit7CisgICAgdW5zaWduZWQgdmVydGV4U2hhZGVyID0g
bG9hZFNoYWRlcihHTF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTb3VyY2UpOworICAgIHVuc2lnbmVk
IGZyYWdtZW50U2hhZGVyID0gbG9hZFNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50
U291cmNlKTsKKyAgICB1bnNpZ25lZCBwcm9ncmFtID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFt
KCk7CisgICAgaWYgKHZlcnRleFNoYWRlciAmJiBmcmFnbWVudFNoYWRlciAmJiBwcm9ncmFtKSB7
CisgICAgICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcik7
CisgICAgICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVy
KTsKKyAgICAgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICBp
bnQgbGlua2VkID0gMDsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwg
R0xfTElOS19TVEFUVVMsICZsaW5rZWQpOworICAgICAgICBpZiAoIWxpbmtlZCkgeworICAgICAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgcHJv
Z3JhbSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZlcnRleFNoYWRlcikKKyAgICAg
ICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBpZiAoZnJhZ21l
bnRTaGFkZXIpCisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVy
KTsKKworICAgIHJldHVybiBwcm9ncmFtOworfQorCitib29sIFdlYlRlc3RQbHVnaW5JbXBsOjpo
YW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50LCBXZWJDdXJzb3JJbmZv
JiBpbmZvKQoreworICAgIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSA9IDA7CisgICAgc3dpdGNoIChl
dmVudC50eXBlKSB7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpVbmRlZmluZWQ6ICAgICAgICAg
ICBldmVudE5hbWUgPSAidW5rbm93biI7IGJyZWFrOworCisgICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpNb3VzZURvd246ICAgICAgICAgICBldmVudE5hbWUgPSAiTW91c2VEb3duIjsgYnJlYWs7Cisg
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZVVwOiAgICAgICAgICAgICBldmVudE5hbWUgPSAi
TW91c2VVcCI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VNb3ZlOiAgICAg
ICAgICAgZXZlbnROYW1lID0gIk1vdXNlTW92ZSI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6TW91c2VFbnRlcjogICAgICAgICAgZXZlbnROYW1lID0gIk1vdXNlRW50ZXIiOyBicmVh
azsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlTGVhdmU6ICAgICAgICAgIGV2ZW50TmFt
ZSA9ICJNb3VzZUxlYXZlIjsgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpDb250ZXh0
TWVudTogICAgICAgICBldmVudE5hbWUgPSAiQ29udGV4dE1lbnUiOyBicmVhazsKKworICAgIGNh
c2UgV2ViSW5wdXRFdmVudDo6TW91c2VXaGVlbDogICAgICAgICAgZXZlbnROYW1lID0gIk1vdXNl
V2hlZWwiOyBicmVhazsKKworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93bjogICAg
ICAgICAgZXZlbnROYW1lID0gIlJhd0tleURvd24iOyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0
RXZlbnQ6OktleURvd246ICAgICAgICAgICAgIGV2ZW50TmFtZSA9ICJLZXlEb3duIjsgYnJlYWs7
CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpLZXlVcDogICAgICAgICAgICAgICBldmVudE5hbWUg
PSAiS2V5VXAiOyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OkNoYXI6ICAgICAgICAg
ICAgICAgIGV2ZW50TmFtZSA9ICJDaGFyIjsgYnJlYWs7CisKKyAgICBjYXNlIFdlYklucHV0RXZl
bnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjogIGV2ZW50TmFtZSA9ICJHZXN0dXJlU2Nyb2xsQmVnaW4i
OyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQ6ICAgIGV2
ZW50TmFtZSA9ICJHZXN0dXJlU2Nyb2xsRW5kIjsgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2
ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlOiBldmVudE5hbWUgPSAiR2VzdHVyZVNjcm9sbFVwZGF0
ZSI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nU3RhcnQ6ICAg
ZXZlbnROYW1lID0gIkdlc3R1cmVGbGluZ1N0YXJ0IjsgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpHZXN0dXJlRmxpbmdDYW5jZWw6ICBldmVudE5hbWUgPSAiR2VzdHVyZUZsaW5nQ2Fu
Y2VsIjsgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwOiAgICAgICAg
ICBldmVudE5hbWUgPSAiR2VzdHVyZVRhcCI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVu
dDo6R2VzdHVyZVRhcERvd246ICAgICAgZXZlbnROYW1lID0gIkdlc3R1cmVUYXBEb3duIjsgYnJl
YWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwQ2FuY2VsOiAgICBldmVudE5h
bWUgPSAiR2VzdHVyZVRhcENhbmNlbCI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6
R2VzdHVyZURvdWJsZVRhcDogICAgZXZlbnROYW1lID0gIkdlc3R1cmVEb3VibGVUYXAiOyBicmVh
azsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUd29GaW5nZXJUYXA6IGV2ZW50TmFt
ZSA9ICJHZXN0dXJlVHdvRmluZ2VyVGFwIjsgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpHZXN0dXJlTG9uZ1ByZXNzOiAgICBldmVudE5hbWUgPSAiR2VzdHVyZUxvbmdQcmVzcyI7IGJy
ZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZUxvbmdUYXA6ICAgICAgZXZlbnRO
YW1lID0gIkdlc3R1cmVMb25nVGFwIjsgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpH
ZXN0dXJlUGluY2hCZWdpbjogICBldmVudE5hbWUgPSAiR2VzdHVyZVBpbmNoQmVnaW4iOyBicmVh
azsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEVuZDogICAgIGV2ZW50TmFt
ZSA9ICJHZXN0dXJlUGluY2hFbmQiOyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdl
c3R1cmVQaW5jaFVwZGF0ZTogIGV2ZW50TmFtZSA9ICJHZXN0dXJlUGluY2hVcGRhdGUiOyBicmVh
azsKKworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hTdGFydDogICAgICAgICAgZXZlbnRO
YW1lID0gIlRvdWNoU3RhcnQiOyBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNo
TW92ZTogICAgICAgICAgIGV2ZW50TmFtZSA9ICJUb3VjaE1vdmUiOyBicmVhazsKKyAgICBjYXNl
IFdlYklucHV0RXZlbnQ6OlRvdWNoRW5kOiAgICAgICAgICAgIGV2ZW50TmFtZSA9ICJUb3VjaEVu
ZCI7IGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hDYW5jZWw6ICAgICAgICAg
ZXZlbnROYW1lID0gIlRvdWNoQ2FuY2VsIjsgYnJlYWs7CisgICAgfQorCisgICAgbV9kZWxlZ2F0
ZS0+cHJpbnRNZXNzYWdlKHN0ZDo6c3RyaW5nKCJQbHVnaW4gcmVjZWl2ZWQgZXZlbnQ6ICIpICsg
KGV2ZW50TmFtZSA/IGV2ZW50TmFtZSA6ICJ1bmtub3duIikgKyAiXG4iKTsKKyAgICBpZiAobV9w
cmludEV2ZW50RGV0YWlscykKKyAgICAgICAgcHJpbnRFdmVudERldGFpbHMobV9kZWxlZ2F0ZSwg
ZXZlbnQpOworICAgIGlmIChtX3ByaW50VXNlckdlc3R1cmVTdGF0dXMpCisgICAgICAgIG1fZGVs
ZWdhdGUtPnByaW50TWVzc2FnZShzdGQ6OnN0cmluZygiKiAiKSArIChtX2ZyYW1lLT5pc1Byb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpID8gIiIgOiAibm90ICIpICsgImhhbmRsaW5nIHVzZXIgZ2VzdHVy
ZVxuIik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYlRlc3RQbHVnaW5JbXBsOjpo
YW5kbGVEcmFnU3RhdHVzVXBkYXRlKFdlYkRyYWdTdGF0dXMgZHJhZ1N0YXR1cywgY29uc3QgV2Vi
RHJhZ0RhdGEmLCBXZWJEcmFnT3BlcmF0aW9uc01hc2ssIGNvbnN0IFdlYlBvaW50JiBwb3NpdGlv
biwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvc2l0aW9uKQoreworICAgIGNvbnN0IGNoYXIqIGRy
YWdTdGF0dXNOYW1lID0gMDsKKyAgICBzd2l0Y2ggKGRyYWdTdGF0dXMpIHsKKyAgICBjYXNlIFdl
YkRyYWdTdGF0dXNFbnRlcjoKKyAgICAgICAgZHJhZ1N0YXR1c05hbWUgPSAiRHJhZ0VudGVyIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJEcmFnU3RhdHVzT3ZlcjoKKyAgICAgICAgZHJh
Z1N0YXR1c05hbWUgPSAiRHJhZ092ZXIiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkRy
YWdTdGF0dXNMZWF2ZToKKyAgICAgICAgZHJhZ1N0YXR1c05hbWUgPSAiRHJhZ0xlYXZlIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJEcmFnU3RhdHVzRHJvcDoKKyAgICAgICAgZHJhZ1N0
YXR1c05hbWUgPSAiRHJhZ0Ryb3AiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkRyYWdT
dGF0dXNVbmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
bV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0ZDo6c3RyaW5nKCJQbHVnaW4gcmVjZWl2ZWQgZXZl
bnQ6ICIpICsgZHJhZ1N0YXR1c05hbWUgKyAiXG4iKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30KKworV2ViVGVzdFBsdWdpbiogV2ViVGVzdFBsdWdpbjo6Y3JlYXRlKFdlYkZyYW1lKiBmcmFt
ZSwgY29uc3QgV2ViUGx1Z2luUGFyYW1zJiBwYXJhbXMsIFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdh
dGUpCit7CisgICAgcmV0dXJuIG5ldyBXZWJUZXN0UGx1Z2luSW1wbChmcmFtZSwgcGFyYW1zLCBk
ZWxlZ2F0ZSk7Cit9CisKK1dlYlRlc3RQbHVnaW46OldlYlRlc3RQbHVnaW4oKQoreworfQorCitX
ZWJUZXN0UGx1Z2luOjp+V2ViVGVzdFBsdWdpbigpCit7Cit9CisKK2NvbnN0IFdlYlN0cmluZyYg
V2ViVGVzdFBsdWdpbjo6bWltZVR5cGUoKQoreworICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcg
a01pbWVUeXBlID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiYXBwbGljYXRpb24veC13ZWJraXQtdGVz
dC13ZWJwbHVnaW4iKTsKKyAgICByZXR1cm4ga01pbWVUeXBlOworfQorCit9CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViUGx1Z2luLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJQbHVnaW4uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkNWM5YzIzNjg3ZmI1Y2E1NWRmMzM5NmZkMGRlNzczZTRkMWY4ZDBl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJQbHVnaW4uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dFdlYlBsdWdpbi5oIgotCi0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJJbnB1
dEV2ZW50LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNp
bmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBv
cnQuaCIKLSNpbmNsdWRlICJXZWJQbHVnaW5Db250YWluZXIuaCIKLSNpbmNsdWRlICJXZWJQbHVn
aW5QYXJhbXMuaCIKLSNpbmNsdWRlICJXZWJUb3VjaFBvaW50LmgiCi0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Ci0KLS8vIEdMZW51bSB2YWx1ZXMgY29waWVkIGZyb20gZ2wyLmguCi0jZGVm
aW5lIEdMX0ZBTFNFICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHTF9UUlVFICAgICAgICAg
ICAgICAgICAgIDEKLSNkZWZpbmUgR0xfT05FICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5l
IEdMX1RSSUFOR0xFUyAgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIEdMX09ORV9NSU5VU19T
UkNfQUxQSEEgICAgMHgwMzAzCi0jZGVmaW5lIEdMX0RFUFRIX1RFU1QgICAgICAgICAgICAgMHgw
QjcxCi0jZGVmaW5lIEdMX0JMRU5EICAgICAgICAgICAgICAgICAgMHgwQkUyCi0jZGVmaW5lIEdM
X1NDSVNTT1JfVEVTVCAgICAgICAgICAgMHgwQjkwCi0jZGVmaW5lIEdMX1RFWFRVUkVfMkQgICAg
ICAgICAgICAgMHgwREUxCi0jZGVmaW5lIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgMHgxNDA2
Ci0jZGVmaW5lIEdMX1JHQkEgICAgICAgICAgICAgICAgICAgMHgxOTA4Ci0jZGVmaW5lIEdMX1VO
U0lHTkVEX0JZVEUgICAgICAgICAgMHgxNDAxCi0jZGVmaW5lIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiAgICAgMHgyODAwCi0jZGVmaW5lIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAgICAgMHgyODAxCi0j
ZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9TICAgICAgICAgMHgyODAyCi0jZGVmaW5lIEdMX1RFWFRV
UkVfV1JBUF9UICAgICAgICAgMHgyODAzCi0jZGVmaW5lIEdMX05FQVJFU1QgICAgICAgICAgICAg
ICAgMHgyNjAwCi0jZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQgICAgICAgMHg0MDAwCi0jZGVm
aW5lIEdMX0NMQU1QX1RPX0VER0UgICAgICAgICAgMHg4MTJGCi0jZGVmaW5lIEdMX0FSUkFZX0JV
RkZFUiAgICAgICAgICAgMHg4ODkyCi0jZGVmaW5lIEdMX1NUQVRJQ19EUkFXICAgICAgICAgICAg
MHg4OEU0Ci0jZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUiAgICAgICAgMHg4QjMwCi0jZGVmaW5l
IEdMX1ZFUlRFWF9TSEFERVIgICAgICAgICAgMHg4QjMxCi0jZGVmaW5lIEdMX0NPTVBJTEVfU1RB
VFVTICAgICAgICAgMHg4QjgxCi0jZGVmaW5lIEdMX0xJTktfU1RBVFVTICAgICAgICAgICAgMHg4
QjgyCi0jZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwICAgICAgMHg4Q0UwCi0jZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFICAgMHg4Q0Q1Ci0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSICAg
ICAgICAgICAgMHg4RDQwCi0KLXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QWxwaGEoY29uc3QgdW5z
aWduZWQgY29sb3JJblszXSwgZmxvYXQgYWxwaGEsIGZsb2F0IGNvbG9yT3V0WzRdKQotewotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBjb2xvck91dFtpXSA9IChjb2xv
ckluW2ldIC8gMjU1LjBmKSAqIGFscGhhOwotCi0gICAgY29sb3JPdXRbM10gPSBhbHBoYTsKLX0K
LQotc3RhdGljIGNvbnN0IGNoYXIqIHBvaW50U3RhdGUoV2ViS2l0OjpXZWJUb3VjaFBvaW50OjpT
dGF0ZSBzdGF0ZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBXZWJLaXQ6Oldl
YlRvdWNoUG9pbnQ6OlN0YXRlUmVsZWFzZWQ6Ci0gICAgICAgIHJldHVybiAiUmVsZWFzZWQiOwot
ICAgIGNhc2UgV2ViS2l0OjpXZWJUb3VjaFBvaW50OjpTdGF0ZVByZXNzZWQ6Ci0gICAgICAgIHJl
dHVybiAiUHJlc3NlZCI7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYlRvdWNoUG9pbnQ6OlN0YXRlTW92
ZWQ6Ci0gICAgICAgIHJldHVybiAiTW92ZWQiOwotICAgIGNhc2UgV2ViS2l0OjpXZWJUb3VjaFBv
aW50OjpTdGF0ZUNhbmNlbGxlZDoKLSAgICAgICAgcmV0dXJuICJDYW5jZWxsZWQiOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiAiVW5rbm93biI7Ci0gICAgfQotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50VG91Y2hM
aXN0KGNvbnN0IFdlYktpdDo6V2ViVG91Y2hQb2ludCogcG9pbnRzLCBpbnQgbGVuZ3RoKQotewot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIHByaW50ZigiKiAl
ZCwgJWQ6ICVzXG4iLCBwb2ludHNbaV0ucG9zaXRpb24ueCwgcG9pbnRzW2ldLnBvc2l0aW9uLnks
IHBvaW50U3RhdGUocG9pbnRzW2ldLnN0YXRlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50RXZl
bnREZXRhaWxzKGNvbnN0IFdlYktpdDo6V2ViSW5wdXRFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYg
KFdlYktpdDo6V2ViSW5wdXRFdmVudDo6aXNUb3VjaEV2ZW50VHlwZShldmVudC50eXBlKSkgewot
ICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmIHRvdWNoID0gc3RhdGljX2Nhc3Q8
Y29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50Jj4oZXZlbnQpOwotICAgICAgICBwcmludFRvdWNo
TGlzdCh0b3VjaC50b3VjaGVzLCB0b3VjaC50b3VjaGVzTGVuZ3RoKTsKLSAgICAgICAgcHJpbnRU
b3VjaExpc3QodG91Y2guY2hhbmdlZFRvdWNoZXMsIHRvdWNoLmNoYW5nZWRUb3VjaGVzTGVuZ3Ro
KTsKLSAgICAgICAgcHJpbnRUb3VjaExpc3QodG91Y2gudGFyZ2V0VG91Y2hlcywgdG91Y2gudGFy
Z2V0VG91Y2hlc0xlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChXZWJLaXQ6OldlYklucHV0RXZlbnQ6
OmlzTW91c2VFdmVudFR5cGUoZXZlbnQudHlwZSkgfHwgZXZlbnQudHlwZSA9PSBXZWJLaXQ6Oldl
YklucHV0RXZlbnQ6Ok1vdXNlV2hlZWwpIHsKLSAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJNb3Vz
ZUV2ZW50JiBtb3VzZSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdDo6V2ViTW91c2VFdmVudCY+
KGV2ZW50KTsKLSAgICAgICAgcHJpbnRmKCIqICVkLCAlZFxuIiwgbW91c2UueCwgbW91c2UueSk7
Ci0gICAgfSBlbHNlIGlmIChXZWJLaXQ6OldlYklucHV0RXZlbnQ6OmlzR2VzdHVyZUV2ZW50VHlw
ZShldmVudC50eXBlKSkgewotICAgICAgICBjb25zdCBXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCYg
Z2VzdHVyZSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdDo6V2ViR2VzdHVyZUV2ZW50Jj4oZXZl
bnQpOwotICAgICAgICBwcmludGYoIiogJWQsICVkXG4iLCBnZXN0dXJlLngsIGdlc3R1cmUueSk7
Ci0gICAgfQotfQotCi1zdGF0aWMgV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXI6OlRvdWNoRXZl
bnRSZXF1ZXN0VHlwZSBwYXJzZVRvdWNoRXZlbnRSZXF1ZXN0VHlwZShjb25zdCBXZWJTdHJpbmcm
IHN0cmluZykKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFdlYlN0cmluZywga1By
aW1pdGl2ZVJhdywgKFdlYlN0cmluZzo6ZnJvbVVURjgoInJhdyIpKSk7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBXZWJTdHJpbmcsIGtQcmltaXRpdmVTeW50aGV0aWMsIChXZWJTdHJp
bmc6OmZyb21VVEY4KCJzeW50aGV0aWMiKSkpOwotCi0gICAgaWYgKHN0cmluZyA9PSBrUHJpbWl0
aXZlUmF3KQotICAgICAgICByZXR1cm4gV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXI6OlRvdWNo
RXZlbnRSZXF1ZXN0VHlwZVJhdzsKLSAgICBpZiAoc3RyaW5nID09IGtQcmltaXRpdmVTeW50aGV0
aWMpCi0gICAgICAgIHJldHVybiBXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lcjo6VG91Y2hFdmVu
dFJlcXVlc3RUeXBlU3ludGhlc2l6ZWRNb3VzZTsKLSAgICByZXR1cm4gV2ViS2l0OjpXZWJQbHVn
aW5Db250YWluZXI6OlRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5vbmU7Ci19Ci0KLVRlc3RXZWJQbHVn
aW46OlRlc3RXZWJQbHVnaW4oV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViUGx1Z2luUGFyYW1zJiBwYXJhbXMpCi0g
ICAgOiBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV9jb250YWluZXIoMCkKLSAgICAsIG1fY29udGV4
dCgwKQotICAgICwgbV90b3VjaEV2ZW50UmVxdWVzdChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5l
cjo6VG91Y2hFdmVudFJlcXVlc3RUeXBlTm9uZSkKLSAgICAsIG1fcHJpbnRFdmVudERldGFpbHMo
ZmFsc2UpCi0gICAgLCBtX3ByaW50VXNlckdlc3R1cmVTdGF0dXMoZmFsc2UpCi0gICAgLCBtX2Nh
blByb2Nlc3NEcmFnKGZhbHNlKQotewotICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJp
YnV0ZVByaW1pdGl2ZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoInByaW1pdGl2ZSIpOwotICAgIHN0
YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZUJhY2tncm91bmRDb2xvciA9IFdlYlN0cmlu
Zzo6ZnJvbVVURjgoImJhY2tncm91bmQtY29sb3IiKTsKLSAgICBzdGF0aWMgY29uc3QgV2ViU3Ry
aW5nIGtBdHRyaWJ1dGVQcmltaXRpdmVDb2xvciA9IFdlYlN0cmluZzo6ZnJvbVVURjgoInByaW1p
dGl2ZS1jb2xvciIpOwotICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZU9wYWNp
dHkgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJvcGFjaXR5Iik7Ci0gICAgc3RhdGljIGNvbnN0IFdl
YlN0cmluZyBrQXR0cmlidXRlQWNjZXB0c1RvdWNoID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiYWNj
ZXB0cy10b3VjaCIpOwotICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZVByaW50
RXZlbnREZXRhaWxzID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgicHJpbnQtZXZlbnQtZGV0YWlscyIp
OwotICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZUNhblByb2Nlc3NEcmFnID0g
V2ViU3RyaW5nOjpmcm9tVVRGOCgiY2FuLXByb2Nlc3MtZHJhZyIpOwotICAgIHN0YXRpYyBjb25z
dCBXZWJTdHJpbmcga0F0dHJpYnV0ZVByaW50VXNlckdlc3R1cmVTdGF0dXMgPSBXZWJTdHJpbmc6
OmZyb21VVEY4KCJwcmludC11c2VyLWdlc3R1cmUtc3RhdHVzIik7Ci0KLSAgICBBU1NFUlQocGFy
YW1zLmF0dHJpYnV0ZU5hbWVzLnNpemUoKSA9PSBwYXJhbXMuYXR0cmlidXRlVmFsdWVzLnNpemUo
KSk7Ci0gICAgc2l6ZV90IHNpemUgPSBwYXJhbXMuYXR0cmlidXRlTmFtZXMuc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdlYlN0
cmluZyYgYXR0cmlidXRlTmFtZSA9IHBhcmFtcy5hdHRyaWJ1dGVOYW1lc1tpXTsKLSAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IHBhcmFtcy5hdHRyaWJ1dGVWYWx1ZXNb
aV07Ci0KLSAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0ga0F0dHJpYnV0ZVByaW1pdGl2ZSkK
LSAgICAgICAgICAgIG1fc2NlbmUucHJpbWl0aXZlID0gcGFyc2VQcmltaXRpdmUoYXR0cmlidXRl
VmFsdWUpOwotICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVCYWNr
Z3JvdW5kQ29sb3IpCi0gICAgICAgICAgICBwYXJzZUNvbG9yKGF0dHJpYnV0ZVZhbHVlLCBtX3Nj
ZW5lLmJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0g
a0F0dHJpYnV0ZVByaW1pdGl2ZUNvbG9yKQotICAgICAgICAgICAgcGFyc2VDb2xvcihhdHRyaWJ1
dGVWYWx1ZSwgbV9zY2VuZS5wcmltaXRpdmVDb2xvcik7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHJp
YnV0ZU5hbWUgPT0ga0F0dHJpYnV0ZU9wYWNpdHkpCi0gICAgICAgICAgICBtX3NjZW5lLm9wYWNp
dHkgPSBwYXJzZU9wYWNpdHkoYXR0cmlidXRlVmFsdWUpOwotICAgICAgICBlbHNlIGlmIChhdHRy
aWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVBY2NlcHRzVG91Y2gpCi0gICAgICAgICAgICBtX3RvdWNo
RXZlbnRSZXF1ZXN0ID0gcGFyc2VUb3VjaEV2ZW50UmVxdWVzdFR5cGUoYXR0cmlidXRlVmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVQcmludEV2ZW50
RGV0YWlscykKLSAgICAgICAgICAgIG1fcHJpbnRFdmVudERldGFpbHMgPSBwYXJzZUJvb2xlYW4o
YXR0cmlidXRlVmFsdWUpOwotICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRy
aWJ1dGVDYW5Qcm9jZXNzRHJhZykKLSAgICAgICAgICAgIG1fY2FuUHJvY2Vzc0RyYWcgPSBwYXJz
ZUJvb2xlYW4oYXR0cmlidXRlVmFsdWUpOwotICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1l
ID09IGtBdHRyaWJ1dGVQcmludFVzZXJHZXN0dXJlU3RhdHVzKQotICAgICAgICAgICAgbV9wcmlu
dFVzZXJHZXN0dXJlU3RhdHVzID0gcGFyc2VCb29sZWFuKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICB9
Ci19Ci0KLVRlc3RXZWJQbHVnaW46On5UZXN0V2ViUGx1Z2luKCkKLXsKLX0KLQotY29uc3QgV2Vi
U3RyaW5nJiBUZXN0V2ViUGx1Z2luOjptaW1lVHlwZSgpCi17Ci0gICAgc3RhdGljIGNvbnN0IFdl
YlN0cmluZyBrTWltZVR5cGUgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJhcHBsaWNhdGlvbi94LXdl
YmtpdC10ZXN0LXdlYnBsdWdpbiIpOwotICAgIHJldHVybiBrTWltZVR5cGU7Ci19Ci0KLWJvb2wg
VGVzdFdlYlBsdWdpbjo6aW5pdGlhbGl6ZShXZWJQbHVnaW5Db250YWluZXIqIGNvbnRhaW5lcikK
LXsKLSAgICBXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKLSAgICBtX2Nv
bnRleHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRlT2Zmc2NyZWVuR3JhcGhpY3ND
b250ZXh0M0QoYXR0cnMpOwotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghaW5pdFNjZW5lKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1fY29udGFpbmVyID0gY29udGFpbmVyOwotICAgIG1fY29udGFpbmVyLT5z
ZXRCYWNraW5nVGV4dHVyZUlkKG1fY29sb3JUZXh0dXJlKTsKLSAgICBtX2NvbnRhaW5lci0+cmVx
dWVzdFRvdWNoRXZlbnRUeXBlKG1fdG91Y2hFdmVudFJlcXVlc3QpOwotICAgIG1fY29udGFpbmVy
LT5zZXRXYW50c1doZWVsRXZlbnRzKHRydWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFRlc3RXZWJQbHVnaW46OmRlc3Ryb3koKQotewotICAgIGRlc3Ryb3lTY2VuZSgpOwotCi0gICAg
ZGVsZXRlIG1fY29udGV4dDsKLSAgICBtX2NvbnRleHQgPSAwOwotCi0gICAgbV9jb250YWluZXIg
PSAwOwotICAgIG1fZnJhbWUgPSAwOwotfQotCi12b2lkIFRlc3RXZWJQbHVnaW46OnVwZGF0ZUdl
b21ldHJ5KGNvbnN0IFdlYlJlY3QmIGZyYW1lUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJSZWN0PiYgY3V0T3V0c1JlY3RzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzVmlzaWJsZSkKLXsKLSAg
ICBpZiAoY2xpcFJlY3QgPT0gbV9yZWN0KQotICAgICAgICByZXR1cm47Ci0gICAgbV9yZWN0ID0g
Y2xpcFJlY3Q7Ci0gICAgaWYgKG1fcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY29udGV4dC0+cmVzaGFwZShtX3JlY3Qud2lkdGgsIG1fcmVjdC5oZWlnaHQpOwotICAg
IG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV9yZWN0LndpZHRoLCBtX3JlY3QuaGVpZ2h0KTsK
LQotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb2xvclRleHR1
cmUpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX05FQVJFU1QpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwotICAg
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBtX2Nv
bnRleHQtPnRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV9yZWN0LndpZHRo
LCBtX3JlY3QuaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7
Ci0gICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xf
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fY29sb3JUZXh0dXJlLCAwKTsKLQot
ICAgIGRyYXdTY2VuZSgpOwotCi0gICAgbV9jb250ZXh0LT5mbHVzaCgpOwotICAgIG1fY29udGFp
bmVyLT5jb21taXRCYWNraW5nVGV4dHVyZSgpOwotfQotCi1UZXN0V2ViUGx1Z2luOjpQcmltaXRp
dmUgVGVzdFdlYlBsdWdpbjo6cGFyc2VQcmltaXRpdmUoY29uc3QgV2ViU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrUHJpbWl0aXZlTm9uZSA9IFdlYlN0cmlu
Zzo6ZnJvbVVURjgoIm5vbmUiKTsKLSAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtQcmltaXRp
dmVUcmlhbmdsZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoInRyaWFuZ2xlIik7Ci0KLSAgICBQcmlt
aXRpdmUgcHJpbWl0aXZlID0gUHJpbWl0aXZlTm9uZTsKLSAgICBpZiAoc3RyaW5nID09IGtQcmlt
aXRpdmVOb25lKQotICAgICAgICBwcmltaXRpdmUgPSBQcmltaXRpdmVOb25lOwotICAgIGVsc2Ug
aWYgKHN0cmluZyA9PSBrUHJpbWl0aXZlVHJpYW5nbGUpCi0gICAgICAgIHByaW1pdGl2ZSA9IFBy
aW1pdGl2ZVRyaWFuZ2xlOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIHByaW1pdGl2ZTsKLX0KLQotLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3Vs
ZCBhbHJlYWR5IGV4aXN0LiBVc2UgaXQuCi0vLyBGb3Igbm93IGp1c3QgcGFyc2UgcHJpbWFyeSBj
b2xvcnMuCi12b2lkIFRlc3RXZWJQbHVnaW46OnBhcnNlQ29sb3IoY29uc3QgV2ViU3RyaW5nJiBz
dHJpbmcsIHVuc2lnbmVkIGNvbG9yWzNdKQotewotICAgIGNvbG9yWzBdID0gY29sb3JbMV0gPSBj
b2xvclsyXSA9IDA7Ci0gICAgaWYgKHN0cmluZyA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoc3RyaW5nID09ICJyZWQiKQotICAgICAgICBjb2xvclswXSA9IDI1NTsKLSAg
ICBlbHNlIGlmIChzdHJpbmcgPT0gImdyZWVuIikKLSAgICAgICAgY29sb3JbMV0gPSAyNTU7Ci0g
ICAgZWxzZSBpZiAoc3RyaW5nID09ICJibHVlIikKLSAgICAgICAgY29sb3JbMl0gPSAyNTU7Ci0g
ICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotZmxvYXQgVGVzdFdl
YlBsdWdpbjo6cGFyc2VPcGFjaXR5KGNvbnN0IFdlYlN0cmluZyYgc3RyaW5nKQotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZihzdHJpbmcudXRmOCgpLmRhdGEoKSkpOwotfQot
Ci1ib29sIFRlc3RXZWJQbHVnaW46OnBhcnNlQm9vbGVhbihjb25zdCBXZWJTdHJpbmcmIHN0cmlu
ZykKLXsKLSAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtQcmltaXRpdmVUcnVlID0gV2ViU3Ry
aW5nOjpmcm9tVVRGOCgidHJ1ZSIpOwotICAgIHJldHVybiBzdHJpbmcgPT0ga1ByaW1pdGl2ZVRy
dWU7Ci19Ci0KLWJvb2wgVGVzdFdlYlBsdWdpbjo6aW5pdFNjZW5lKCkKLXsKLSAgICBmbG9hdCBj
b2xvcls0XTsKLSAgICBwcmVtdWx0aXBseUFscGhhKG1fc2NlbmUuYmFja2dyb3VuZENvbG9yLCBt
X3NjZW5lLm9wYWNpdHksIGNvbG9yKTsKLQotICAgIG1fY29sb3JUZXh0dXJlID0gbV9jb250ZXh0
LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9mcmFtZWJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRl
RnJhbWVidWZmZXIoKTsKLQotICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV9yZWN0Lndp
ZHRoLCBtX3JlY3QuaGVpZ2h0KTsKLSAgICBtX2NvbnRleHQtPmRpc2FibGUoR0xfREVQVEhfVEVT
VCk7Ci0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0KLSAgICBtX2Nv
bnRleHQtPmNsZWFyQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10p
OwotCi0gICAgbV9jb250ZXh0LT5lbmFibGUoR0xfQkxFTkQpOwotICAgIG1fY29udGV4dC0+Ymxl
bmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7Ci0KLSAgICByZXR1cm4gbV9z
Y2VuZS5wcmltaXRpdmUgIT0gUHJpbWl0aXZlTm9uZSA/IGluaXRQcm9ncmFtKCkgJiYgaW5pdFBy
aW1pdGl2ZSgpIDogdHJ1ZTsKLX0KLQotdm9pZCBUZXN0V2ViUGx1Z2luOjpkcmF3U2NlbmUoKQot
ewotICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV9yZWN0LndpZHRoLCBtX3JlY3QuaGVp
Z2h0KTsKLSAgICBtX2NvbnRleHQtPmNsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwotCi0gICAg
aWYgKG1fc2NlbmUucHJpbWl0aXZlICE9IFByaW1pdGl2ZU5vbmUpCi0gICAgICAgIGRyYXdQcmlt
aXRpdmUoKTsKLX0KLQotdm9pZCBUZXN0V2ViUGx1Z2luOjpkZXN0cm95U2NlbmUoKQotewotICAg
IGlmIChtX3NjZW5lLnByb2dyYW0pIHsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFt
KG1fc2NlbmUucHJvZ3JhbSk7Ci0gICAgICAgIG1fc2NlbmUucHJvZ3JhbSA9IDA7Ci0gICAgfQot
ICAgIGlmIChtX3NjZW5lLnZibykgewotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlciht
X3NjZW5lLnZibyk7Ci0gICAgICAgIG1fc2NlbmUudmJvID0gMDsKLSAgICB9Ci0KLSAgICBpZiAo
bV9mcmFtZWJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1f
ZnJhbWVidWZmZXIpOwotICAgICAgICBtX2ZyYW1lYnVmZmVyID0gMDsKLSAgICB9Ci0KLSAgICBp
ZiAobV9jb2xvclRleHR1cmUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1f
Y29sb3JUZXh0dXJlKTsKLSAgICAgICAgbV9jb2xvclRleHR1cmUgPSAwOwotICAgIH0KLX0KLQot
Ym9vbCBUZXN0V2ViUGx1Z2luOjppbml0UHJvZ3JhbSgpCi17Ci0gICAgY29uc3QgQ1N0cmluZyB2
ZXJ0ZXhTb3VyY2UoCi0gICAgICAgICJhdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjsgIFxuIgotICAg
ICAgICAidm9pZCBtYWluKCkgeyAgICAgICAgICAgICBcbiIKLSAgICAgICAgIiAgZ2xfUG9zaXRp
b24gPSBwb3NpdGlvbjsgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IgotICAgICk7Ci0KLSAgICBjb25zdCBDU3RyaW5nIGZyYWdtZW50U291cmNlKAotICAgICAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgotICAgICAgICAidW5pZm9ybSB2ZWM0IGNvbG9y
OyAgICAgIFxuIgotICAgICAgICAidm9pZCBtYWluKCkgeyAgICAgICAgICAgIFxuIgotICAgICAg
ICAiICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsgIFxuIgotICAgICAgICAifSAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIgotICAgICk7Ci0KLSAgICBtX3NjZW5lLnByb2dyYW0gPSBsb2FkUHJvZ3Jh
bSh2ZXJ0ZXhTb3VyY2UsIGZyYWdtZW50U291cmNlKTsKLSAgICBpZiAoIW1fc2NlbmUucHJvZ3Jh
bSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9zY2VuZS5jb2xvckxvY2F0aW9uID0g
bV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9zY2VuZS5wcm9ncmFtLCAiY29sb3IiKTsK
LSAgICBtX3NjZW5lLnBvc2l0aW9uTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0
aW9uKG1fc2NlbmUucHJvZ3JhbSwgInBvc2l0aW9uIik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgVGVzdFdlYlBsdWdpbjo6aW5pdFByaW1pdGl2ZSgpCi17Ci0gICAgQVNTRVJUKG1fc2Nl
bmUucHJpbWl0aXZlID09IFByaW1pdGl2ZVRyaWFuZ2xlKTsKLQotICAgIG1fc2NlbmUudmJvID0g
bV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKLSAgICBpZiAoIW1fc2NlbmUudmJvKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBmbG9hdCB2ZXJ0aWNlc1tdID0geyAwLjBmLCAg
MC44ZiwgMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wLjhmLCAtMC44Ziwg
MC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjhmLCAtMC44ZiwgMC4wZiB9
OwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fc2NlbmUudmJv
KTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVy
dGljZXMpLCAwLCBHTF9TVEFUSUNfRFJBVyk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRh
KEdMX0FSUkFZX0JVRkZFUiwgMCwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIFRlc3RXZWJQbHVnaW46OmRyYXdQcmltaXRpdmUoKQotewot
ICAgIEFTU0VSVChtX3NjZW5lLnByaW1pdGl2ZSA9PSBQcmltaXRpdmVUcmlhbmdsZSk7Ci0gICAg
QVNTRVJUKG1fc2NlbmUudmJvKTsKLSAgICBBU1NFUlQobV9zY2VuZS5wcm9ncmFtKTsKLQotICAg
IG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX3NjZW5lLnByb2dyYW0pOwotCi0gICAgLy8gQmluZCBw
cmltaXRpdmUgY29sb3IuCi0gICAgZmxvYXQgY29sb3JbNF07Ci0gICAgcHJlbXVsdGlwbHlBbHBo
YShtX3NjZW5lLnByaW1pdGl2ZUNvbG9yLCBtX3NjZW5lLm9wYWNpdHksIGNvbG9yKTsKLSAgICBt
X2NvbnRleHQtPnVuaWZvcm00ZihtX3NjZW5lLmNvbG9yTG9jYXRpb24sIGNvbG9yWzBdLCBjb2xv
clsxXSwgY29sb3JbMl0sIGNvbG9yWzNdKTsKLQotICAgIC8vIEJpbmQgcHJpbWl0aXZlIHZlcnRp
Y2VzLgotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fc2NlbmUu
dmJvKTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2NlbmUucG9z
aXRpb25Mb2NhdGlvbik7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fc2Nl
bmUucG9zaXRpb25Mb2NhdGlvbiwgMywgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAwKTsKLSAgICBt
X2NvbnRleHQtPmRyYXdBcnJheXMoR0xfVFJJQU5HTEVTLCAwLCAzKTsKLX0KLQotdW5zaWduZWQg
VGVzdFdlYlBsdWdpbjo6bG9hZFNoYWRlcih1bnNpZ25lZCB0eXBlLCBjb25zdCBDU3RyaW5nJiBz
b3VyY2UpCi17Ci0gICAgdW5zaWduZWQgc2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIo
dHlwZSk7Ci0gICAgaWYgKHNoYWRlcikgewotICAgICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJj
ZShzaGFkZXIsIHNvdXJjZS5kYXRhKCkpOwotICAgICAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFk
ZXIoc2hhZGVyKTsKLQotICAgICAgICBpbnQgY29tcGlsZWQgPSAwOwotICAgICAgICBtX2NvbnRl
eHQtPmdldFNoYWRlcml2KHNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsICZjb21waWxlZCk7Ci0g
ICAgICAgIGlmICghY29tcGlsZWQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hh
ZGVyKHNoYWRlcik7Ci0gICAgICAgICAgICBzaGFkZXIgPSAwOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBzaGFkZXI7Ci19Ci0KLXVuc2lnbmVkIFRlc3RXZWJQbHVnaW46OmxvYWRQcm9n
cmFtKGNvbnN0IENTdHJpbmcmIHZlcnRleFNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcmIGZyYWdtZW50U291cmNlKQotewotICAgIHVuc2ln
bmVkIHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfVkVSVEVYX1NIQURFUiwgdmVydGV4U291
cmNlKTsKLSAgICB1bnNpZ25lZCBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfRlJBR01F
TlRfU0hBREVSLCBmcmFnbWVudFNvdXJjZSk7Ci0gICAgdW5zaWduZWQgcHJvZ3JhbSA9IG1fY29u
dGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgIGlmICh2ZXJ0ZXhTaGFkZXIgJiYgZnJhZ21lbnRT
aGFkZXIgJiYgcHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9n
cmFtLCB2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9n
cmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJv
Z3JhbSk7Ci0KLSAgICAgICAgaW50IGxpbmtlZCA9IDA7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0
UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAmbGlua2VkKTsKLSAgICAgICAgaWYg
KCFsaW5rZWQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFt
KTsKLSAgICAgICAgICAgIHByb2dyYW0gPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICh2
ZXJ0ZXhTaGFkZXIpCi0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRl
cik7Ci0gICAgaWYgKGZyYWdtZW50U2hhZGVyKQotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNo
YWRlcihmcmFnbWVudFNoYWRlcik7Ci0KLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KLQotYm9vbCBU
ZXN0V2ViUGx1Z2luOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYktpdDo6V2ViSW5wdXRFdmVu
dCYgZXZlbnQsIFdlYktpdDo6V2ViQ3Vyc29ySW5mbyYgaW5mbykKLXsKLSAgICBjb25zdCBjaGFy
KiBldmVudE5hbWUgPSAwOwotICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgewotICAgIGNhc2UgV2Vi
S2l0OjpXZWJJbnB1dEV2ZW50OjpVbmRlZmluZWQ6ICAgICAgICAgICBldmVudE5hbWUgPSAidW5r
bm93biI7IGJyZWFrOwotCi0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Ok1vdXNlRG93
bjogICAgICAgICAgIGV2ZW50TmFtZSA9ICJNb3VzZURvd24iOyBicmVhazsKLSAgICBjYXNlIFdl
YktpdDo6V2ViSW5wdXRFdmVudDo6TW91c2VVcDogICAgICAgICAgICAgZXZlbnROYW1lID0gIk1v
dXNlVXAiOyBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRFdmVudDo6TW91c2VNb3Zl
OiAgICAgICAgICAgZXZlbnROYW1lID0gIk1vdXNlTW92ZSI7IGJyZWFrOwotICAgIGNhc2UgV2Vi
S2l0OjpXZWJJbnB1dEV2ZW50OjpNb3VzZUVudGVyOiAgICAgICAgICBldmVudE5hbWUgPSAiTW91
c2VFbnRlciI7IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpNb3VzZUxl
YXZlOiAgICAgICAgICBldmVudE5hbWUgPSAiTW91c2VMZWF2ZSI7IGJyZWFrOwotICAgIGNhc2Ug
V2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpDb250ZXh0TWVudTogICAgICAgICBldmVudE5hbWUgPSAi
Q29udGV4dE1lbnUiOyBicmVhazsKLQotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpN
b3VzZVdoZWVsOiAgICAgICAgICBldmVudE5hbWUgPSAiTW91c2VXaGVlbCI7IGJyZWFrOwotCi0g
ICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6OlJhd0tleURvd246ICAgICAgICAgIGV2ZW50
TmFtZSA9ICJSYXdLZXlEb3duIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZl
bnQ6OktleURvd246ICAgICAgICAgICAgIGV2ZW50TmFtZSA9ICJLZXlEb3duIjsgYnJlYWs7Ci0g
ICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6OktleVVwOiAgICAgICAgICAgICAgIGV2ZW50
TmFtZSA9ICJLZXlVcCI7IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpD
aGFyOiAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAiQ2hhciI7IGJyZWFrOwotCi0gICAgY2Fz
ZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjogIGV2ZW50TmFtZSA9
ICJHZXN0dXJlU2Nyb2xsQmVnaW4iOyBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRF
dmVudDo6R2VzdHVyZVNjcm9sbEVuZDogICAgZXZlbnROYW1lID0gIkdlc3R1cmVTY3JvbGxFbmQi
OyBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbFVw
ZGF0ZTogZXZlbnROYW1lID0gIkdlc3R1cmVTY3JvbGxVcGRhdGUiOyBicmVhazsKLSAgICBjYXNl
IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nU3RhcnQ6ICAgZXZlbnROYW1lID0g
Ikdlc3R1cmVGbGluZ1N0YXJ0IjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZl
bnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDogIGV2ZW50TmFtZSA9ICJHZXN0dXJlRmxpbmdDYW5jZWwi
OyBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcDogICAg
ICAgICAgZXZlbnROYW1lID0gIkdlc3R1cmVUYXAiOyBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6
V2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcERvd246ICAgICAgZXZlbnROYW1lID0gIkdlc3R1cmVU
YXBEb3duIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVU
YXBDYW5jZWw6ICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlVGFwQ2FuY2VsIjsgYnJlYWs7Ci0gICAg
Y2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVEb3VibGVUYXA6ICAgIGV2ZW50TmFt
ZSA9ICJHZXN0dXJlRG91YmxlVGFwIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0
RXZlbnQ6Okdlc3R1cmVUd29GaW5nZXJUYXA6IGV2ZW50TmFtZSA9ICJHZXN0dXJlVHdvRmluZ2Vy
VGFwIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVMb25n
UHJlc3M6ICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlTG9uZ1ByZXNzIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVMb25nVGFwOiAgICAgIGV2ZW50TmFtZSA9
ICJHZXN0dXJlTG9uZ1RhcCI7IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50
OjpHZXN0dXJlUGluY2hCZWdpbjogICBldmVudE5hbWUgPSAiR2VzdHVyZVBpbmNoQmVnaW4iOyBi
cmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoRW5kOiAg
ICAgZXZlbnROYW1lID0gIkdlc3R1cmVQaW5jaEVuZCI7IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0
OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hVcGRhdGU6ICBldmVudE5hbWUgPSAiR2VzdHVy
ZVBpbmNoVXBkYXRlIjsgYnJlYWs7Ci0KLSAgICBjYXNlIFdlYktpdDo6V2ViSW5wdXRFdmVudDo6
VG91Y2hTdGFydDogICAgICAgICAgZXZlbnROYW1lID0gIlRvdWNoU3RhcnQiOyBicmVhazsKLSAg
ICBjYXNlIFdlYktpdDo6V2ViSW5wdXRFdmVudDo6VG91Y2hNb3ZlOiAgICAgICAgICAgZXZlbnRO
YW1lID0gIlRvdWNoTW92ZSI7IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJJbnB1dEV2ZW50
OjpUb3VjaEVuZDogICAgICAgICAgICBldmVudE5hbWUgPSAiVG91Y2hFbmQiOyBicmVhazsKLSAg
ICBjYXNlIFdlYktpdDo6V2ViSW5wdXRFdmVudDo6VG91Y2hDYW5jZWw6ICAgICAgICAgZXZlbnRO
YW1lID0gIlRvdWNoQ2FuY2VsIjsgYnJlYWs7Ci0gICAgfQotCi0gICAgcHJpbnRmKCJQbHVnaW4g
cmVjZWl2ZWQgZXZlbnQ6ICVzXG4iLCBldmVudE5hbWUgPyBldmVudE5hbWUgOiAidW5rbm93biIp
OwotICAgIGlmIChtX3ByaW50RXZlbnREZXRhaWxzKQotICAgICAgICBwcmludEV2ZW50RGV0YWls
cyhldmVudCk7Ci0gICAgaWYgKG1fcHJpbnRVc2VyR2VzdHVyZVN0YXR1cykKLSAgICAgICAgcHJp
bnRmKCIqICVzaGFuZGxpbmcgdXNlciBnZXN0dXJlXG4iLCBtX2ZyYW1lLT5pc1Byb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpID8gIiIgOiAibm90ICIpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBUZXN0V2ViUGx1Z2luOjpoYW5kbGVEcmFnU3RhdHVzVXBkYXRlKFdlYktpdDo6V2ViRHJhZ1N0
YXR1cyBkcmFnU3RhdHVzLCBjb25zdCBXZWJLaXQ6OldlYkRyYWdEYXRhJiwgV2ViS2l0OjpXZWJE
cmFnT3BlcmF0aW9uc01hc2ssIGNvbnN0IFdlYktpdDo6V2ViUG9pbnQmIHBvc2l0aW9uLCBjb25z
dCBXZWJLaXQ6OldlYlBvaW50JiBzY3JlZW5Qb3NpdGlvbikKLXsKLSAgICBjb25zdCBjaGFyKiBk
cmFnU3RhdHVzTmFtZSA9IDA7Ci0gICAgc3dpdGNoIChkcmFnU3RhdHVzKSB7Ci0gICAgY2FzZSBX
ZWJLaXQ6OldlYkRyYWdTdGF0dXNFbnRlcjoKLSAgICAgICAgZHJhZ1N0YXR1c05hbWUgPSAiRHJh
Z0VudGVyIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYkRyYWdTdGF0dXNP
dmVyOgotICAgICAgICBkcmFnU3RhdHVzTmFtZSA9ICJEcmFnT3ZlciI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgV2ViS2l0OjpXZWJEcmFnU3RhdHVzTGVhdmU6Ci0gICAgICAgIGRyYWdTdGF0
dXNOYW1lID0gIkRyYWdMZWF2ZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpX
ZWJEcmFnU3RhdHVzRHJvcDoKLSAgICAgICAgZHJhZ1N0YXR1c05hbWUgPSAiRHJhZ0Ryb3AiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViRHJhZ1N0YXR1c1Vua25vd246Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBwcmludGYoIlBsdWdpbiBy
ZWNlaXZlZCBldmVudDogJXNcbiIsIGRyYWdTdGF0dXNOYW1lKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJQ
bHVnaW4uaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJQbHVnaW4uaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVjZGY4NWQxYjYzZTRlZmUwZTM5MTNkZWU2
MTAxMTMyMzZjMDQ5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViUGx1Z2luLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGVzdFdlYlBsdWdpbl9o
Ci0jZGVmaW5lIFRlc3RXZWJQbHVnaW5faAotCi0jaW5jbHVkZSAiV2ViUGx1Z2luLmgiCi0jaW5j
bHVkZSAiV2ViUGx1Z2luQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVjdC5o
IgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEOwotfQot
Ci0vLyBBIGZha2UgaW1wbGVtZW50aW9uIG9mIFdlYktpdDo6V2ViUGx1Z2luIGZvciB0ZXN0aW5n
IHB1cnBvc2VzLgotLy8KLS8vIEl0IHVzZXMgV2ViR3JhcGhpY3NDb250ZXh0M0QgdG8gcGFpbnQg
YSBzY2VuZSBjb25zaXNpdGluZyBvZiBhIHByaW1pdGl2ZQotLy8gb3ZlciBhIGJhY2tncm91bmQu
IFRoZSBwcmltaXRpdmUgYW5kIGJhY2tncm91bmQgY2FuIGJlIGN1c3RvbWl6ZWQgdXNpbmcKLS8v
IHRoZSBmb2xsb3dpbmcgcGx1Z2luIHBhcmFtZXRlcnM6Ci0vLyBwcmltaXRpdmU6IG5vbmUgKGRl
ZmF1bHQpLCB0cmlhbmdsZS4KLS8vIGJhY2tncm91bmQtY29sb3I6IGJsYWNrIChkZWZhdWx0KSwg
cmVkLCBncmVlbiwgYmx1ZS4KLS8vIHByaW1pdGl2ZS1jb2xvcjogYmxhY2sgKGRlZmF1bHQpLCBy
ZWQsIGdyZWVuLCBibHVlLgotLy8gb3BhY2l0eTogWzAuMCAtIDEuMF0uIERlZmF1bHQgaXMgMS4w
LgotLy8KLS8vIFdoZXRoZXIgdGhlIHBsdWdpbiBhY2NlcHRzIHRvdWNoIGV2ZW50cyBvciBub3Qg
Y2FuIGJlIGN1c3RvbWl6ZWQgdXNpbmcgdGhlCi0vLyAnYWNjZXB0cy10b3VjaCcgcGx1Z2luIHBh
cmFtZXRlciAoZGVmYXVsdHMgdG8gZmFsc2UpLgotY2xhc3MgVGVzdFdlYlBsdWdpbiA6IHB1Ymxp
YyBXZWJLaXQ6OldlYlBsdWdpbiB7Ci1wdWJsaWM6Ci0gICAgVGVzdFdlYlBsdWdpbihXZWJLaXQ6
OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJQbHVnaW5QYXJhbXMmKTsKLSAgICB2aXJ0dWFs
IH5UZXN0V2ViUGx1Z2luKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcm
IG1pbWVUeXBlKCk7Ci0KLSAgICAvLyBXZWJQbHVnaW4gbWV0aG9kczoKLSAgICB2aXJ0dWFsIGJv
b2wgaW5pdGlhbGl6ZShXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lciopOwotICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCBOUE9iamVjdCogc2NyaXB0YWJsZU9iamVjdCgp
IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuUHJvY2Vzc0RyYWcoKSBjb25zdCB7
IHJldHVybiBtX2NhblByb2Nlc3NEcmFnOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYktp
dDo6V2ViQ2FudmFzKiwgY29uc3QgV2ViS2l0OjpXZWJSZWN0JikgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUdlb21ldHJ5KGNvbnN0IFdlYktpdDo6V2ViUmVjdCYgZnJhbWVSZWN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlJlY3QmIGNsaXBS
ZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlZl
Y3RvcjxXZWJLaXQ6OldlYlJlY3Q+JiBjdXRPdXRzUmVjdHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaXNWaXNpYmxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRm9j
dXMoYm9vbCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2liaWxpdHkoYm9vbCkgeyB9
Ci0gICAgdmlydHVhbCBib29sIGFjY2VwdHNJbnB1dEV2ZW50cygpIHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJLaXQ6OldlYklucHV0
RXZlbnQmLCBXZWJLaXQ6OldlYkN1cnNvckluZm8mKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
RHJhZ1N0YXR1c1VwZGF0ZShXZWJLaXQ6OldlYkRyYWdTdGF0dXMsIGNvbnN0IFdlYktpdDo6V2Vi
RHJhZ0RhdGEmLCBXZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25zTWFzaywgY29uc3QgV2ViS2l0OjpX
ZWJQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYktpdDo6V2ViUG9pbnQmIHNjcmVlblBvc2l0aW9u
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYktpdDo6V2Vi
VVJMUmVzcG9uc2UmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3Qg
Y2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWxMb2FkaW5nKGNvbnN0IFdl
YktpdDo6V2ViVVJMRXJyb3ImKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
Z0ZyYW1lUmVxdWVzdChjb25zdCBXZWJLaXQ6OldlYlVSTCYsIHZvaWQqIG5vdGlmeURhdGEpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGluZ0ZyYW1lUmVxdWVzdChjb25zdCBXZWJL
aXQ6OldlYlVSTCYsIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IFdlYktpdDo6V2ViVVJMRXJyb3Im
KSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQbGFjZWhvbGRlcigpIHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBQcmltaXRpdmUgewotICAgICAgICBQcmltaXRpdmVOb25l
LAotICAgICAgICBQcmltaXRpdmVUcmlhbmdsZQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgU2NlbmUg
ewotICAgICAgICBQcmltaXRpdmUgcHJpbWl0aXZlOwotICAgICAgICB1bnNpZ25lZCBiYWNrZ3Jv
dW5kQ29sb3JbM107Ci0gICAgICAgIHVuc2lnbmVkIHByaW1pdGl2ZUNvbG9yWzNdOwotICAgICAg
ICBmbG9hdCBvcGFjaXR5OwotCi0gICAgICAgIHVuc2lnbmVkIHZibzsKLSAgICAgICAgdW5zaWdu
ZWQgcHJvZ3JhbTsKLSAgICAgICAgaW50IGNvbG9yTG9jYXRpb247Ci0gICAgICAgIGludCBwb3Np
dGlvbkxvY2F0aW9uOwotCi0gICAgICAgIFNjZW5lKCkKLSAgICAgICAgICAgIDogcHJpbWl0aXZl
KFByaW1pdGl2ZU5vbmUpCi0gICAgICAgICAgICAsIG9wYWNpdHkoMS4wZikgLy8gRnVsbHkgb3Bh
cXVlLgotICAgICAgICAgICAgLCB2Ym8oMCkKLSAgICAgICAgICAgICwgcHJvZ3JhbSgwKQotICAg
ICAgICAgICAgLCBjb2xvckxvY2F0aW9uKC0xKQotICAgICAgICAgICAgLCBwb3NpdGlvbkxvY2F0
aW9uKC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3JbMF0gPSBiYWNr
Z3JvdW5kQ29sb3JbMV0gPSBiYWNrZ3JvdW5kQ29sb3JbMl0gPSAwOwotICAgICAgICAgICAgcHJp
bWl0aXZlQ29sb3JbMF0gPSBwcmltaXRpdmVDb2xvclsxXSA9IHByaW1pdGl2ZUNvbG9yWzJdID0g
MDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBGdW5jdGlvbnMgZm9yIHBhcnNpbmcgcGx1
Z2luIHBhcmFtZXRlcnMuCi0gICAgUHJpbWl0aXZlIHBhcnNlUHJpbWl0aXZlKGNvbnN0IFdlYktp
dDo6V2ViU3RyaW5nJik7Ci0gICAgdm9pZCBwYXJzZUNvbG9yKGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiwgdW5zaWduZWQgY29sb3JbM10pOwotICAgIGZsb2F0IHBhcnNlT3BhY2l0eShjb25zdCBX
ZWJLaXQ6OldlYlN0cmluZyYpOwotICAgIGJvb2wgcGFyc2VCb29sZWFuKGNvbnN0IFdlYktpdDo6
V2ViU3RyaW5nJik7Ci0KLSAgICAvLyBGdW5jdGlvbnMgZm9yIGxvYWRpbmcgYW5kIGRyYXdpbmcg
c2NlbmUuCi0gICAgYm9vbCBpbml0U2NlbmUoKTsKLSAgICB2b2lkIGRyYXdTY2VuZSgpOwotICAg
IHZvaWQgZGVzdHJveVNjZW5lKCk7Ci0gICAgYm9vbCBpbml0UHJvZ3JhbSgpOwotICAgIGJvb2wg
aW5pdFByaW1pdGl2ZSgpOwotICAgIHZvaWQgZHJhd1ByaW1pdGl2ZSgpOwotICAgIHVuc2lnbmVk
IGxvYWRTaGFkZXIodW5zaWduZWQgdHlwZSwgY29uc3QgV1RGOjpDU3RyaW5nJiBzb3VyY2UpOwot
ICAgIHVuc2lnbmVkIGxvYWRQcm9ncmFtKGNvbnN0IFdURjo6Q1N0cmluZyYgdmVydGV4U291cmNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6Q1N0cmluZyYgZnJhZ21lbnRT
b3VyY2UpOwotCi0gICAgV2ViS2l0OjpXZWJGcmFtZSogbV9mcmFtZTsKLSAgICBXZWJLaXQ6Oldl
YlBsdWdpbkNvbnRhaW5lciogbV9jb250YWluZXI7Ci0KLSAgICBXZWJLaXQ6OldlYlJlY3QgbV9y
ZWN0OwotICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICB1
bnNpZ25lZCBtX2NvbG9yVGV4dHVyZTsKLSAgICB1bnNpZ25lZCBtX2ZyYW1lYnVmZmVyOwotICAg
IFNjZW5lIG1fc2NlbmU7Ci0KLSAgICBXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lcjo6VG91Y2hF
dmVudFJlcXVlc3RUeXBlIG1fdG91Y2hFdmVudFJlcXVlc3Q7Ci0gICAgYm9vbCBtX3ByaW50RXZl
bnREZXRhaWxzOwotICAgIGJvb2wgbV9wcmludFVzZXJHZXN0dXJlU3RhdHVzOwotICAgIGJvb2wg
bV9jYW5Qcm9jZXNzRHJhZzsKLX07Ci0KLSNlbmRpZiAvLyBUZXN0UGVwcGVyUGx1Z2luX2gKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRleCAzYmUy
MjMzMjA3OTY2MDNjMTcxMjU1NmM4YzU2MTkxZjI0ZDdmNzVhLi40ZTY4Y2NjNjExOWQ0N2U1NDI0
YWZkOWJhNjQwZDk1NmQwYjliNDdmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViVmlld0hvc3QuY3BwCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiVGFzay5oIgog
I2luY2x1ZGUgIlRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRlc3RTaGVs
bC5oIgotI2luY2x1ZGUgIlRlc3RXZWJQbHVnaW4uaCIKICNpbmNsdWRlICJXZWJDYWNoZWRVUkxS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViQ29uc29sZU1lc3NhZ2UuaCIKICNpbmNsdWRlICJXZWJD
b250ZXh0TWVudURhdGEuaCIKQEAgLTYyLDYgKzYxLDcgQEAKICNpbmNsdWRlICJXZWJSYW5nZS5o
IgogI2luY2x1ZGUgIldlYlNjcmVlbkluZm8uaCIKICNpbmNsdWRlICJXZWJTdG9yYWdlTmFtZXNw
YWNlLmgiCisjaW5jbHVkZSAiV2ViVGVzdFBsdWdpbi5oIgogI2luY2x1ZGUgIldlYlRleHRDaGVj
a2luZ0NvbXBsZXRpb24uaCIKICNpbmNsdWRlICJXZWJUZXh0Q2hlY2tpbmdSZXN1bHQuaCIKICNp
bmNsdWRlICJXZWJVc2VyTWVkaWFDbGllbnRNb2NrLmgiCkBAIC04NzYsOCArODc2LDggQEAgdm9p
ZCBXZWJWaWV3SG9zdDo6ZXhpdEZ1bGxTY3JlZW4oKQogCiBXZWJQbHVnaW4qIFdlYlZpZXdIb3N0
OjpjcmVhdGVQbHVnaW4oV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJQbHVnaW5QYXJhbXMmIHBh
cmFtcykKIHsKLSAgICBpZiAocGFyYW1zLm1pbWVUeXBlID09IFRlc3RXZWJQbHVnaW46Om1pbWVU
eXBlKCkpCi0gICAgICAgIHJldHVybiBuZXcgVGVzdFdlYlBsdWdpbihmcmFtZSwgcGFyYW1zKTsK
KyAgICBpZiAocGFyYW1zLm1pbWVUeXBlID09IFdlYlRlc3RQbHVnaW46Om1pbWVUeXBlKCkpCisg
ICAgICAgIHJldHVybiBXZWJUZXN0UGx1Z2luOjpjcmVhdGUoZnJhbWUsIHBhcmFtcywgdGhpcyk7
CiAKICAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6OkNyZWF0ZVdlYlBsdWdpbihmcmFtZSwgcGFy
YW1zKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>